Selbst auf der Website von ebay wird erwähnt, dass ich beim Anbringen an Arduino Mega kein 2,4-Zoll-TFT-LCD-Shield-Display verwenden kann. Das Problem ist, dass ich dieses Shield versehentlich gekauft habe. Ich möchte dieses Shield auf Arduino Mega 2560 setzen. Gibt es ein Weg, um Mega und 2,4 "Display Shield zu kombinieren?
Hinweis: Ich habe das Arduino Uno meines Freundes anprobiert. Schild funktioniert sehr gut.
Hinweis: Das Foto unten bestimmt meine Frage. Auf dem Display wird der Code meines Arduino nicht ausgeführt. Es läuft nur seine LED.
// UTFT_Demo_320x240 (C)2012 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a demo of how to use most of the functions
// of the library with a supported display modules.
//
// This demo was made for modules with a screen resolution
// of 320x240 pixels.
//
// This program requires the UTFT library.
//
#include <UTFT.h>
#define ILI9320_16 18
// Declare which fonts we will be using
extern uint8_t SmallFont[];
// Uncomment the next line for Arduino 2009/Uno
//UTFT myGLCD(UNO_24,A2,A1,A3,A4); // Remember to change the model parameter to suit your display module!
// Uncomment the next line for Arduino Mega
UTFT myGLCD(ILI9320_16,38,39,40,41); // Remember to change the model parameter to suit your display module!
void setup()
{
randomSeed(analogRead(0));
// Setup the LCD
pinMode(A0,OUTPUT); // for the UNO_SHIELD_1IN1
digitalWrite(A0,HIGH); // the RD pin must be set high
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
}
void loop()
{
int buf[318];
int x, x2;
int y, y2;
int r;
// Clear the screen and draw the frame
myGLCD.clrScr();
myGLCD.setColor(255, 0, 0);
myGLCD.fillRect(0, 0, 319, 13);
myGLCD.setColor(64, 64, 64);
myGLCD.fillRect(0, 226, 319, 239);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1);
myGLCD.setBackColor(64, 64, 64);
myGLCD.setColor(255,255,0);
myGLCD.print("<http://electronics.henningkarlsen.com>", CENTER, 227);
myGLCD.setColor(0, 0, 255);
myGLCD.drawRect(0, 14, 319, 225);
// Draw crosshairs
myGLCD.setColor(0, 0, 255);
myGLCD.setBackColor(0, 0, 0);
myGLCD.drawLine(159, 15, 159, 224);
myGLCD.drawLine(1, 119, 318, 119);
for (int i=9; i<310; i+=10)
myGLCD.drawLine(i, 117, i, 121);
for (int i=19; i<220; i+=10)
myGLCD.drawLine(157, i, 161, i);
// Draw sin-, cos- and tan-lines
myGLCD.setColor(0,255,255);
myGLCD.print("Sin", 5, 15);
for (int i=1; i<318; i++)
{
myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95));
}
myGLCD.setColor(255,0,0);
myGLCD.print("Cos", 5, 27);
for (int i=1; i<318; i++)
{
myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95));
}
myGLCD.setColor(255,255,0);
myGLCD.print("Tan", 5, 39);
for (int i=1; i<318; i++)
{
myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180)));
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
myGLCD.setColor(0, 0, 255);
myGLCD.setBackColor(0, 0, 0);
myGLCD.drawLine(159, 15, 159, 224);
myGLCD.drawLine(1, 119, 318, 119);
// Draw a moving sinewave
x=1;
for (int i=1; i<(318*20); i++)
{
x++;
if (x==319)
x=1;
if (i>319)
{
if ((x==159)||(buf[x-1]==119))
myGLCD.setColor(0,0,255);
else
myGLCD.setColor(0,0,0);
myGLCD.drawPixel(x,buf[x-1]);
}
myGLCD.setColor(0,255,255);
y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100)));
myGLCD.drawPixel(x,y);
buf[x-1]=y;
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some filled rectangles
for (int i=1; i<6; i++)
{
switch (i)
{
case 1:
myGLCD.setColor(255,0,255);
break;
case 2:
myGLCD.setColor(255,0,0);
break;
case 3:
myGLCD.setColor(0,255,0);
break;
case 4:
myGLCD.setColor(0,0,255);
break;
case 5:
myGLCD.setColor(255,255,0);
break;
}
myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20));
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some filled, rounded rectangles
for (int i=1; i<6; i++)
{
switch (i)
{
case 1:
myGLCD.setColor(255,0,255);
break;
case 2:
myGLCD.setColor(255,0,0);
break;
case 3:
myGLCD.setColor(0,255,0);
break;
case 4:
myGLCD.setColor(0,0,255);
break;
case 5:
myGLCD.setColor(255,255,0);
break;
}
myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20));
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some filled circles
for (int i=1; i<6; i++)
{
switch (i)
{
case 1:
myGLCD.setColor(255,0,255);
break;
case 2:
myGLCD.setColor(255,0,0);
break;
case 3:
myGLCD.setColor(0,255,0);
break;
case 4:
myGLCD.setColor(0,0,255);
break;
case 5:
myGLCD.setColor(255,255,0);
break;
}
myGLCD.fillCircle(100+(i*20),60+(i*20), 30);
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some lines in a pattern
myGLCD.setColor (255,0,0);
for (int i=15; i<224; i+=5)
{
myGLCD.drawLine(1, i, (i*1.44)-10, 224);
}
myGLCD.setColor (255,0,0);
for (int i=224; i>15; i-=5)
{
myGLCD.drawLine(318, i, (i*1.44)-11, 15);
}
myGLCD.setColor (0,255,255);
for (int i=224; i>15; i-=5)
{
myGLCD.drawLine(1, i, 331-(i*1.44), 15);
}
myGLCD.setColor (0,255,255);
for (int i=15; i<224; i+=5)
{
myGLCD.drawLine(318, i, 330-(i*1.44), 224);
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some random circles
for (int i=0; i<100; i++)
{
myGLCD.setColor(random(255), random(255), random(255));
x=32+random(256);
y=45+random(146);
r=random(30);
myGLCD.drawCircle(x, y, r);
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some random rectangles
for (int i=0; i<100; i++)
{
myGLCD.setColor(random(255), random(255), random(255));
x=2+random(316);
y=16+random(207);
x2=2+random(316);
y2=16+random(207);
myGLCD.drawRect(x, y, x2, y2);
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
// Draw some random rounded rectangles
for (int i=0; i<100; i++)
{
myGLCD.setColor(random(255), random(255), random(255));
x=2+random(316);
y=16+random(207);
x2=2+random(316);
y2=16+random(207);
myGLCD.drawRoundRect(x, y, x2, y2);
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
for (int i=0; i<100; i++)
{
myGLCD.setColor(random(255), random(255), random(255));
x=2+random(316);
y=16+random(209);
x2=2+random(316);
y2=16+random(209);
myGLCD.drawLine(x, y, x2, y2);
}
delay(2000);
myGLCD.setColor(0,0,0);
myGLCD.fillRect(1,15,318,224);
for (int i=0; i<10000; i++)
{
myGLCD.setColor(random(255), random(255), random(255));
myGLCD.drawPixel(2+random(316), 16+random(209));
}
delay(2000);
myGLCD.fillScr(0, 0, 255);
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(80, 70, 239, 169);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.print("That's it!", CENTER, 93);
myGLCD.print("Restarting in a", CENTER, 119);
myGLCD.print("few seconds...", CENTER, 132);
myGLCD.setColor(0, 255, 0);
myGLCD.setBackColor(0, 0, 255);
myGLCD.print("Runtime: (msecs)", CENTER, 210);
myGLCD.printNumI(millis(), CENTER, 225);
delay (10000);
}
arduino-mega
shields
lcd
Bucht
quelle
quelle
UTFT myGLCD(UNO_24,A2,A1,A3,A4);
Antworten:
Ich war zufällig gerade vor dem gleichen LCD - Shields ein paar Tage zu kaufen, für eine Bibliothek suchen , um es mit einer MEGA 2560 Board zu verwenden Ich fand https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code die unterstützt sowohl UNO- als auch MEGA- Boards.
Die Benutzung ist sehr, einfach , wenn wir es benutzen wollen für MEGA sollten wir den Header ändern
#include "uno_24_shield.h"
in SWTFT.cpp zu#include "mega_24_shield.h"
Beschreibung (nützlich zum Hinzufügen von Unterstützung für das Schild in anderen Bibliotheken):
Die Inkompatibilität ergibt sich aus verschiedenen Port-Zuordnungen für die Arduino-Pinbelegung zwischen Mega und UNO.
in UNO LCD-Abschirmung wird verbunden durch:
in MEGA wird es verbunden durch:
quelle
Eine Möglichkeit, fortzufahren, besteht darin, eine Tabelle zu erstellen, in der die von dieser Karte verwendeten Stiftpositionen und die Arduino-Abschirmungssignale aufgeführt sind, an die sie angeschlossen sind. Daneben benötigen Sie Spalten mit den tatsächlichen Signalen des ATMega2560 (für Mega2560) und des ATMega328 (für Uno), an die diese Abschirmungsstifte angeschlossen sind. Sie können diese Informationen aus den schematischen Zeichnungen von Uno und Mega2560 abrufen.
Auf den ersten Blick scheinen die Namen der Arduino-Abschirmungsstifte für Uno und Mega identisch zu sein: Beispielsweise befindet sich der Abschirmungsstift '0' (digitale Null) auf beiden Platinen an derselben Stelle und auch für andere Stifte.
Beim Uno Digital-0 wird jedoch an ATMega328 Port D Bit 0 angeschlossen, während beim Mega2560 an ATMega2560 Port E Bit 0 angeschlossen wird. Mit Digital 2..7 wird es stumpfer.
Wenn Sie nun Bits einzeln mit digitalWrite (Pin, Wert) drehen, kümmert sich die Arduino-Bibliothek zweifellos um die Übersetzung in die entsprechenden Ports, die für den verwendeten ATMega-Chip und die verwendete Arduino-Karte eingestellt werden müssen. Bibliotheken, die Funktionen niedrigerer Ebene verwenden (insbesondere wenn sie ganze Bytes in Ports schreiben müssen, wie dies bei einer schnellen LCD-Bibliothek der Fall sein könnte), müssen jedoch ihre eigenen Schritte unternehmen, um diese Übersetzung durchzuführen.
Der erste Schritt besteht darin, festzustellen, ob es für Mega2560 eine separate LCD-Treiberbibliothek gibt.
Untersuchen Sie als Nächstes, ob die Bibliothek, über die Sie verfügen, über einen Initialisierungscode verfügt, der bestimmen soll, auf welcher Karte sie ausgeführt wird (und ist Ihre Karte enthalten?), Oder ob Sie ein Flag setzen müssen, um anzugeben, welche Karte verwendet wird.
Andernfalls könnten Sie ein Durcheinander von Steckbrücken oder ein anderes Verdrahtungsschema erzeugen, um die Signale des Mega ATMega2560 so zu überbrücken, dass sie wie ein Uno verkabelt sind. Es ist nicht klar, dass dies möglich ist, da ein Teil von Port D des ATMega2560 nicht einmal mit einem Header verbunden ist.
Oder Sie sehen sich den Quellcode der Bibliothek an und sehen, was sie tatsächlich tut und was sie anders machen müsste, um die ATMega 2560-Pins zu bedienen, mit denen die Abschirmung verbunden ist.
quelle
Haben Sie die Homepage der Bibliothek überprüft? Henning Karlsens Bibliotheksseite
Er hat ein Benutzerhandbuch für die Bibliothek erstellt. Im Anforderungsdokument wird auch darauf verwiesen, welcher Pin wohin führt.
quelle
Sie müssen die Funktionen der Pins zwischen Ihrem Mega und dem Uno Ihres Freundes vergleichen. Dann müssen Sie diese elektrischen Verbindungen herstellen. Ich spreche darüber ein wenig im Abschnitt "Pin-Positionen" meiner Antwort hier .
Dies erfordert "Hacking". Es muss etwas getan werden, um diese physischen Verbindungen umzuleiten. Normalerweise verwende ich einen Zwischenschild, um die Stifte nach Bedarf zu verschieben. Es gab einen Schild, der speziell für diesen Zweck hergestellt wurde, aber ich konnte ihn nicht finden. Vielleicht würde dieser funktionieren ?
quelle