TFTPong

Bu çizim, Arduino Uno ile TFT ekran için pong'un temel bir uygulamadır.

Bir platform ve ekranın kenarlarına ve hareketli platforma karşı zıplayan bir top oluşturur. İki potansiyometre (veya başka bir analog sensör) platformu kontrol kontrol eder.

Örnek, bunların nesneler arasındaki çarpışma algılaması yanı sıra, onun loop() tüm loop() silmeden görüntülerin hızlı bir şekilde nasıl çalışır biçimde gösterir.

Gerekli Donanım

  • Arduino Uno
  • Arduino TFT ekran
  • breadboard
  • bağlantı teli
  • iki adet 10 kilohm potansiyometre

devre

Gücü ve topraklamayı devre tahtasına gidiyor.

Potansiyometreleri breadboard üzerine seçilir. Onun tencerede bir tarafı toprağa, diğerini güce yaşıyor. Bir potansiyometrenin orta pimini A0'a, diğerini A1'e göre.

TFT ekranını breadboard'a getiriyor. Ekranın yan tarafındaki küçük mavi sekmeli ve oklu üstbilgiler. Ekranın yönüne dikkat edin, bu görüntülerde baş aşağı.

BL ve + 5V pinlerini güce ve GND'yi toprağa çıkıyor. CS-LD'yi pin 10'a, DC 9 pinin, RESET pin 8'e, MOSI pin 11'e ve SCK'yı 13 pinine açar. Bir Leonardo kullanın farklı pinler kullanacaksınız. daha fazla ayrıntı için başlangıç sayfasına bakın.


Daha büyük sürüm için resimin üzerine tıklayınız

Kod

Ekranı kullanmak için önce SPI ve TFT kitaplıklarını eklemeniz gerekir.

#include <SPI.h>
#include <TFT.h>
[Kodu Al]

Ekranı Kontrol etmek Için kullanacağınız pinleri tanımlayın ettik TFTscreen Adlı Bir TFT kütüphanesi Örneği oluşturun. Ekranla her çalışmayı bu nesneye çalışıruracaksınız.

#define cs 10
#define dc 9
#define rst 8

TFT TFT ekran = TFT ( cs , dc , rst ) ;

Üst ve raket x & y ayrıntı, topun yönü ve üst ve raketin önceki seçenek için değişkenleri içindir.

int paddleX = 0 ;
int kürek Y = 0 ;
int oldPaddleX , oldPaddleY ;
int ballDirectionX = 1 ;
int ballDirectionY = 1 ;

int ballX , ballY , oldBallX , oldBallY ;

setup() , arka planını görüntüler.

void setup ( ) {
TFTscreen. begin ( ) ;
TFTscreen. arka plan ( 0 , 0 , 0 ) ;
}

loop() , ekranın genişliğini ve yüksekliğini, potansiyometrelerin değerlerini okuyarak, faydalı bir aralıkla eşleştirmeden önce saklayarak başlar.

void loop ( ) {
int myWidth = TFTekran. genişlik ( ) ;
int myHeight = TFTekran. yükseklik ( ) ;

paddleX = harita (analogOkuma (A0), 0, 1023, 0, myWidth) - 20/2;
paddleY = harita (analogOkuma (A-1), 0, 1023, 0, myHeight) - 5/2;

Dolgu rengini siyah olarak ayarlamak ve hareket ettirilirse

TFTscreen. dolgu ( 0 , 0 , 0 ) ;

if ( oldPaddleX ! = paddleX || oldPaddleY ! = paddleY ) {
TFTscreen. rect ( oldPaddleX , oldPaddleY , 20 , 5 ) ;
}

Dolgu rengini beyaza yazdırma ve raketi çizin.

TFTscreen. dolgu ( 255 , 255 , 255 ) ;
TFTscreen. rect (paddleX, paddleY, 20, 5);

Raketin geçerli geçerli önceki konum olarak seçmek, bir sonraki seferde taşınıp taşınmadığını kontrol edebilirsiniz.

oldPaddleX = paddleX ;
oldPaddleY = kürekY ;

loop() sonunda, ballSpeed değişkeninin değerini kullanın. Örneği bitirdikten sonra, ballSpeed değerini değiştirerek başka bir potansiyometre ekleyebilir ve hızı dinamik olarak bulunmaktadır.

moveBall() adlı özel bir moveBall() .

if ( millis ( ) % ballSpeed < 2 ) {
moveBall ( ) ;
}
}

moveBall() topun gerekliliklerine göre, önceki yılın silecek ve yeni noktaya çizecektir. Ayrıca ekrandan çıkmadığından emin olmak için kontrol eder, yanlara çarptığında göre tersine çevirir. Bu aynı zamanda üst ve raketin kesişimlerini kontrol eden inPaddle() adında ikinci bir özel işlevi çağırır.

void moveBall ( ) {
if ( ballX > TFTekran. genişlik ( ) || ballX < 0 ) {
ballDirectionX = - ballDirectionX ;
}
if ( ballY > TFTekran. yükseklik ( ) || ballY < 0 ) {
ballDirectionY = - ballDirectionY ;
}
if ( inPaddle ( ballX , ballY , paddleX , paddleY , 20 , 5 ) ) {
ballDirectionY = - ballDirectionY ;
}

ballX + = ballDirectionX ;
ballY + = ballDirectionY ;

TFTscreen. dolgu ( 0 , 0 , 0 ) ;

if ( oldBallX ! = ballX || oldBallY ! = ballY ) {
TFTscreen. rect (oldBallX, oldBallY, 5, 5);
}

TFTscreen. dolgu ( 255 , 255 , 255 ) ;
TFTscreen. rect (ballX, Bally, 5, 5);

oldBallX = topX ;
oldBallY = topY ;
}

inPaddle() , raket ve topun aynı alanı kullanıp kullanmadığını kontrol eder. Eğer öyleyse, moveBall() da topun yönünü tersine çeviren TRUE moveBall() .

boolean inPaddle ( int x , int y , int rectX , int rectY , int rectWidth , int rectHeight ) {
boole sonucu = yanlış ;

burada ( ( x > = rectX && x <= ( rectX + rectWidth ) ) &&
( y > = rectY && y <= ( rectY + rectHeight ) ) ) {
sonuç = doğru ;
}
sonuç döndürür;
}

Çizimin listesinde aşağıdakidır:


 /* Telnet client This sketch connects to aa telnet server (http://www.google.com) using an Arduino Wiznet Ethernet shield. You'll need a telnet server to test this with. Processing's ChatServer example (part of the network library) works well, running on port 10002. It can be found as part of the examples in the Processing application, available at http://processing.org/ Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 created 14 Sep 2010 modified 9 Apr 2012 by Tom Igoe */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,177); // Enter the IP address of the server you're connecting to: IPAddress server(1,1,1,1); // Initialize the Ethernet client library // with the IP address and port of the server // that you want to connect to (port 23 is default for telnet; // if you're using Processing's ChatServer, use port 10002): EthernetClient client; void setup() { // start the Ethernet connection: Ethernet.begin(mac, ip); // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // give the Ethernet shield a second to initialize: delay(1000); Serial.println("connecting..."); // if you get a connection, report back via serial: if (client.connect(server, 10002)) { Serial.println("connected"); } else { // if you didn't get a connection to the server: Serial.println("connection failed"); } } void loop() { // if there are incoming bytes available // from the server, read them and print them: if (client.available()) { char c = client.read(); Serial.print(c); } // as long as there are bytes in the serial queue, // read them and send them out the socket if it's open: while (Serial.available() > 0) { char inChar = Serial.read(); if (client.connected()) { client.print(inChar); } } // if the server's disconnected, stop the client: if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); // do nothing: while(true); } }  /* Telnet client This sketch connects to aa telnet server (http://www.google.com) using an Arduino Wiznet Ethernet shield. You'll need a telnet server to test this with. Processing's ChatServer example (part of the network library) works well, running on port 10002. It can be found as part of the examples in the Processing application, available at http://processing.org/ Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 created 14 Sep 2010 modified 9 Apr 2012 by Tom Igoe */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,177); // Enter the IP address of the server you're connecting to: IPAddress server(1,1,1,1); // Initialize the Ethernet client library // with the IP address and port of the server // that you want to connect to (port 23 is default for telnet; // if you're using Processing's ChatServer, use port 10002): EthernetClient client; void setup() { // start the Ethernet connection: Ethernet.begin(mac, ip); // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // give the Ethernet shield a second to initialize: delay(1000); Serial.println("connecting..."); // if you get a connection, report back via serial: if (client.connect(server, 10002)) { Serial.println("connected"); } else { // if you didn't get a connection to the server: Serial.println("connection failed"); } } void loop() { // if there are incoming bytes available // from the server, read them and print them: if (client.available()) { char c = client.read(); Serial.print(c); } // as long as there are bytes in the serial queue, // read them and send them out the socket if it's open: while (Serial.available() > 0) { char inChar = Serial.read(); if (client.connected()) { client.print(inChar); } } // if the server's disconnected, stop the client: if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); // do nothing: while(true); } }  /* Telnet client This sketch connects to aa telnet server (http://www.google.com) using an Arduino Wiznet Ethernet shield. You'll need a telnet server to test this with. Processing's ChatServer example (part of the network library) works well, running on port 10002. It can be found as part of the examples in the Processing application, available at http://processing.org/ Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 created 14 Sep 2010 modified 9 Apr 2012 by Tom Igoe */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1,177); // Enter the IP address of the server you're connecting to: IPAddress server(1,1,1,1); // Initialize the Ethernet client library // with the IP address and port of the server // that you want to connect to (port 23 is default for telnet; // if you're using Processing's ChatServer, use port 10002): EthernetClient client; void setup() { // start the Ethernet connection: Ethernet.begin(mac, ip); // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // give the Ethernet shield a second to initialize: delay(1000); Serial.println("connecting..."); // if you get a connection, report back via serial: if (client.connect(server, 10002)) { Serial.println("connected"); } else { // if you didn't get a connection to the server: Serial.println("connection failed"); } } void loop() { // if there are incoming bytes available // from the server, read them and print them: if (client.available()) { char c = client.read(); Serial.print(c); } // as long as there are bytes in the serial queue, // read them and send them out the socket if it's open: while (Serial.available() > 0) { char inChar = Serial.read(); if (client.connected()) { client.print(inChar); } } // if the server's disconnected, stop the client: if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); // do nothing: while(true); } }