Hallo, ich habe einen Arduino Mega und ein Display. Ich möchte lediglich was auf dem Display anzeigen lassen. Selbst wenn ich nur eine folgende Codezeile ausführe: #include <LiquidCrystal.h> so kommt folgender Fehler: c:/users/basti/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7. 3.0-atmel3.6.1-arduino7/bin/../lib/gcc/avr/7.3.0/../../../../avr/lib/avr 6/crtatmega2560.o:(.init9+0x0): undefined reference to `main' collect2.exe: error: ld returned 1 exit status exit status 1 Compilation error: exit status 1 Irgendwas stimmt mit den Bibliotheken nicht
main ist die Funktion, die beim Start des Programms ausgeführt wird. Die musst du natürlich noch anlegen, z.B.
1 | int main(int argc, char *argv) |
2 | {
|
3 | return 0; |
4 | }
|
Falls du das nicht verstehst, solltest du mal in ein Grundlagen-Buch über C/C++ oder auch zum Arduino schauen.
:
Bearbeitet durch User
Thomas F. schrieb: > main ist die Funktion, die beim Start des Programms ausgeführt wird. Die > musst du natürlich noch anlegen, z.B. Nein, muss er nicht. Wie im Titel steht, handelt es sich um Arduino.
Bei Arduino hat man normalerweise mindestens eine loop() Funktion, das ist dort das Hauptprogramm.
Thomas F. schrieb: > main ist die Funktion, die beim Start des Programms ausgeführt wird. Die > musst du natürlich noch anlegen, z.B. >
1 | > int main(int argc, char *argv) |
2 | > { |
3 | > return 0; |
4 | > } |
5 | >
|
> > Falls du das nicht verstehst, solltest du mal in ein Grundlagen-Buch > über C/C++ oder auch zum Arduino schauen. Und schon gar nicht mit der Signatur ;-) Was erwartest Du denn für einen Inhalt des C-String-Arrays auf einem µC?
Wilhelm M. schrieb: > Und schon gar nicht mit der Signatur ;-) > Was erwartest Du denn für einen > Inhalt des C-String-Arrays auf einem µC? Vllt. bekommt die main() ja Parameter ausm Reset_Handler :-D Aber den gibts ja so auch nicht aufm Atmega.
Sebastian M. schrieb: > Irgendwas stimmt mit den Bibliotheken nicht Welche Version von der Arduino IDE hast und welche Version von der LiquidCrystal Bibliothek?
Wilhelm M. schrieb: > Und schon gar nicht mit der Signatur ;-) > Was erwartest Du denn für einen Inhalt des C-String-Arrays auf einem µC? Adam P. schrieb: > Vllt. bekommt die main() ja Parameter ausm Reset_Handler :-D > Aber den gibts ja so auch nicht aufm Atmega. Ok, verstehe. Aber das wirft die Frage auf, warum die main() einen Integer (nicht void) als Ergebnis haben muss. Ich weiß, es ist halt so, aber logisch ist es nicht.
Steve van de Grens schrieb: > Ok, verstehe. Aber das wirft die Frage auf, warum die main() einen > Integer (nicht void) als Ergebnis haben muss. Ich weiß, es ist halt so, > aber logisch ist es nicht. https://en.cppreference.com/w/c/language/main_function
Sebastian M. schrieb: > Selbst wenn ich nur eine folgende Codezeile ausführe: > #include <LiquidCrystal.h> Kein Wunder!
1 | #include <LiquidCrystal.h> |
2 | void setup(){} |
3 | void loop(){} |
Sollte fehlerfrei kompilieren Alternativ:
1 | #include <LiquidCrystal.h> |
2 | int main(){} |
Aber dann ist das Framework zum großen Teil aus dem Rennen, und das will man meist nicht.
Wilhelm M. schrieb: > Steve van de Grens schrieb: >> Ok, verstehe. Aber das wirft die Frage auf, warum die main() einen >> Integer (nicht void) als Ergebnis haben muss. Ich weiß, es ist halt so, >> aber logisch ist es nicht. > > https://en.cppreference.com/w/c/language/main_function Sorry: https://en.cppreference.com/w/cpp/language/main_function
Arduino IDE 2.0.2 also ganz neu. Der Fehler ist seit heute gestern noch nicht und habe nicht geändert. Library puh keine ahnung welche version
Steve van de Grens schrieb: > Aber das wirft die Frage auf, warum die main() einen > Integer (nicht void) als Ergebnis haben muss. Ja das ist echt bissel blöd. Da du ja nie ein return haben wirst.
1 | int main(void) |
2 | {
|
3 | while (1) |
4 | {
|
5 | //sw_task_schedul();
|
6 | }
|
7 | }
|
Sebastian M. schrieb: > Arduino IDE 2.0.2 also ganz neu. Der Fehler ist seit heute gestern noch > nicht und habe nicht geändert. Zeig mal dein code, häng den mal als Datei an, oder poste ihn falls nicht zu lang.
Sebastian M. schrieb: > Arduino IDE 2.0.2 also ganz neu. Ich halte die neue IDE noch für relativ krank. Wenn man nicht zwingend auf irgendwelche Features der 2.XXX angewiesen ist rate ich weiterhin zur portablen Installation der 1.8.19
Wilhelm M. schrieb: > https://en.cppreference.com/w/c/language/main_function Der Artikel beantwortet meine Frage nicht. Er bezieht sich auf PC mit Betriebssystem, wo der return Wert sinnvoll benutzt werden kann.
Adam P. schrieb: > Steve van de Grens schrieb: >> Aber das wirft die Frage auf, warum die main() einen >> Integer (nicht void) als Ergebnis haben muss. > > Ja das ist echt bissel blöd. > Da du ja nie ein return haben wirst. Adruino-Gedöns ist C++. Daher:
1 | int main(){ |
2 | while(true){ |
3 | // ...
|
4 | }
|
5 | }
|
Steve van de Grens schrieb: > Wilhelm M. schrieb: >> https://en.cppreference.com/w/c/language/main_function > > Der Artikel beantwortet meine Frage nicht. Er bezieht sich auf PC mit > Betriebssystem, wo der return Wert sinnvoll benutzt werden kann. Doch. An der Signatur von main() ändert das Environment nichts, das ist einfach im C++-Standard so festgelegt. https://en.cppreference.com/w/cpp/freestanding
bei Arduino braucht man keine main. Das ist der Code zum ausgeben auf dem Display: #include <LiquidCrystal.h> //LCD-Bibliothek laden LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //In dieser Zeile wird festgelegt, welche Pins des Mikrocontrollerboards für das LCD verwendet wird (Am besten erstmal nicht verändern). void setup() { lcd.begin(16, 2); //Im Setup wird angegeben, wie viele Zeichen und Zeilen verwendet werden. Hier: 16 Zeichen in 2 Zeilen. } void loop() { lcd.setCursor(0, 0); //Startposition der Darstellung auf dem LCD festlegen. lcd.setCursor(0,0) bedeutet: Erstes Zeichen in der ersten Zeile. lcd.print("www.funduino.de"); //Dort soll der Text „www.funduino.de“ erscheinen. Der Befehl lcd.setCursor ist dem Mikrocontrollerboard durch das Aufrufen der Bibliothek bekannt. lcd.setCursor(0, 1); // lcd.setCursor(0,1) bedeutet: Erstes Zeichen in der zweiten Zeile. lcd.print("Viel Erfolg"); //Dort soll dann der Text „Viel Erfolg!!!“ auftauchen. } wurde oft benutzt
Sebastian M. schrieb: > bei Arduino braucht man keine main. Doch. Du musst sie nur nicht selbst schreiben ;-)
Wilhelm M. schrieb: > An der Signatur von main() ändert das Environment nichts, das ist > einfach im C++-Standard so festgelegt. Ich sage ja "es ist halt so", trotzdem finde ich es unlogisch. Der Compiler hat eh schon jede Menge Sonderlocken für Mikrocontroller, da hätte ich das gleich mit geändert. Zumindest als Option.
:
Bearbeitet durch User
Steve van de Grens schrieb: > Wilhelm M. schrieb: >> An der Signatur von main() ändert das Environment nichts, das ist >> einfach im C++-Standard so festgelegt. > > Ich sage ja "es ist halt so", trotzdem finde ich es unlogisch. Das ist bei allen Dingen des C++-Standards so. Die o.g. Seite beschreibt den Standard, keine Implementierung wie den gcc. > Der > Compiler hat eh schon jede Menge Sonderlocken für Mikrocontroller, da > hätte ich das gleich mit geändert. Zumindest als Option. Du hast es immer noch nicht verstanden. 1) Auf dem µC haben wir typischerweise eine "freestanding" Umgebung 2) Ob der Einstiegspunkt dann via main() oder was anderes geschieht, ist IB. 3) Der avr-gcc (gcc) verlangt nach wie vor main(). 4) Wenn main(), dann nach den Regeln des Standards.
Sebastian M. schrieb: > Arduino IDE 2.0.2 also ganz neu. Der Fehler ist seit heute gestern noch > nicht und habe nicht geändert. Also ich habe nun getestet: Arduino IDE 2.0.2 LiquidCrystal 1.0.7 Fazit: läuft! Kopier das mal bei dir rein:
1 | #include <LiquidCrystal.h> //LCD-Bibliothek laden |
2 | |
3 | LiquidCrystal lcd(12, 11, 5, 4, 3, 2); |
4 | |
5 | void setup() |
6 | {
|
7 | lcd.begin(16, 2); |
8 | }
|
9 | |
10 | void loop() |
11 | {
|
12 | lcd.setCursor(0, 0); |
13 | lcd.print("www.funduino.de"); |
14 | lcd.setCursor(0, 1); |
15 | lcd.print("Viel Erfolg"); |
16 | }
|
Steve van de Grens schrieb: > Ich sage ja "es ist halt so", trotzdem finde ich es unlogisch. Und ich finde es unlogisch, wenn ein nicht vorhandenes Betriebssystem Kommandozeilenparameter bereit stellen soll. Geradezu absurd finde ich das. Steve van de Grens schrieb: > Der Compiler hat eh schon jede Menge Sonderlocken für Mikrocontroller Ja? Dann nenne bitte eine unnötige. Eine würde mir schon reichen....
EAF schrieb: > Steve van de Grens schrieb: >> Ich sage ja "es ist halt so", trotzdem finde ich es unlogisch. > > Und ich finde es unlogisch, wenn ein nicht vorhandenes Betriebssystem > Kommandozeilenparameter bereit stellen soll. > Geradezu absurd finde ich das. Darum geht es nicht, denn main() mit leerer Parameterliste ist ja möglich. Es geht um den Rückgabetyp int (statt bspw. void).
EAF schrieb: > Dann nenne bitte eine unnötige. Wieso sollte ich? ich habe nicht behauptet, das die Sonderlocken unnötig seien. Wenn du da welche vermutest, suche sie selbst.
Wilhelm M. schrieb: > Darum geht es nicht, denn main() mit leerer Parameterliste ist ja > möglich. Es geht um den Rückgabetyp int (statt bspw. void). Da haben wir aber die gleiche Problematik. Es ist nichts da, was den return Wert konsumiert.
:
Bearbeitet durch User
Wilhelm M. schrieb: > Adruino-Gedöns ist C++. > Daher: > int main(){ und wann soll main auf dem Arduino terminieren? int main() bleibt Unsinn
Steve van de Grens schrieb: > Wilhelm M. schrieb: >> Darum geht es nicht, denn main() mit leerer Parameterliste ist ja >> möglich. Es geht um den Rückgabetyp int (statt bspw. void). > > Da haben wir aber die gleiche Problematik. Es ist nichts da, was den > return Wert konsumiert. Und damit sind wir wieder am Anfang: Beitrag "Re: Arduino Display"
Joachim B. schrieb: > Wilhelm M. schrieb: >> Adruino-Gedöns ist C++. >> Daher: >> int main(){ > > und wann soll main auf dem Arduino terminieren? > int main() bleibt Unsinn Dann solltest Du besser
1 | [[noreturn]] int main() {} |
schreiben.
Steve van de Grens schrieb: > Wenn du da welche vermutest, suche sie selbst. Wenn du dir Änderungen am Standard erwünscht, dann bist du hier vermutlich an der falschen Stelle am Buddeln. Also falsche Baustelle. Mein Rat: Spare dir die Energie für das Nörgeln, oder suche dir den Ansatzpunkt, wo du Wirkung erreichen kannst.
EAF schrieb: > Spare dir die Energie für das Nörgeln, oder suche dir den Ansatzpunkt, > wo du Wirkung erreichen kannst. Einverstanden.
EAF schrieb: > Steve van de Grens schrieb: >> Wenn du da welche vermutest, suche sie selbst. > > Mein Rat: > Spare dir die Energie für das Nörgeln, oder suche dir den Ansatzpunkt, > wo du Wirkung erreichen kannst. wer ist denn dieser "Steve van de Grens" der 2t Nick vom Stefanus? Beitrag "Wieviele Leds in Reihe möglich, 24V, 0.5Ampere Netzteil?"
auch der code läuft nicht. es liegt sicher nicht am Code sondern eher irgendwie an den Speicherorten. Weiß da jemand mehr
Thomas F. schrieb: > main ist die Funktion, die beim Start des Programms ausgeführt wird. Die > musst du natürlich noch anlegen, z.B.int main(int argc, char *argv) > { > return 0; > } > > Falls du das nicht verstehst, solltest du mal in ein Grundlagen-Buch > über C/C++ oder auch zum Arduino schauen. Der Vollständigkeit halber: Die main() bei Arduino befindet sich in der main.cpp "C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino"
1 | #include <Arduino.h> |
2 | |
3 | // Declared weak in Arduino.h to allow user redefinitions.
|
4 | int atexit(void (* /*func*/ )()) { return 0; } |
5 | |
6 | // Weak empty variant initialization function.
|
7 | // May be redefined by variant files.
|
8 | void initVariant() __attribute__((weak)); |
9 | void initVariant() { } |
10 | |
11 | void setupUSB() __attribute__((weak)); |
12 | void setupUSB() { } |
13 | |
14 | int main(void) |
15 | {
|
16 | init(); |
17 | |
18 | initVariant(); |
19 | |
20 | #if defined(USBCON)
|
21 | USBDevice.attach(); |
22 | #endif
|
23 | |
24 | setup(); |
25 | |
26 | for (;;) { |
27 | loop(); |
28 | if (serialEventRun) serialEventRun(); |
29 | }
|
30 | |
31 | return 0; |
32 | }
|
Sebastian M. schrieb: > es liegt sicher nicht am Code sondern eher > irgendwie an den Speicherorten. Weiß da jemand mehr Ist die o.g. Fehlermeldung die einzige? Sonst poste mal alles aus der Ausgabe. Zur not, einmal neu installieren und Updates machen auch von den Libs.
folgende Meldung kommt:C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `pulseEnable': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:304: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:305: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:306: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:307: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:308: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:309: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `write4bits': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:314: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `send': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:288: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:292: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `write8bits': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:322: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `begin': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:91: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:94: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:96: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:101: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:107: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:109: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:110: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:112: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:122: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:126: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:130: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `clear': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:179: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o: In function `begin': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:140: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o:C:\Users\bas ti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/LiquidCrystal.cpp :144: more undefined references to `delayMicroseconds' follow C:\Users\basti\AppData\Local\Temp\cc7Yb0Mw.ltrans0.ltrans.o:(.rodata+0x6 ): undefined reference to `Print::write(unsigned char const*, unsigned int)' c:/users/basti/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7. 3.0-atmel3.6.1-arduino7/bin/../lib/gcc/avr/7.3.0/../../../../avr/lib/avr 6/crtatmega2560.o:(.init9+0x0): undefined reference to `main' collect2.exe: error: ld returned 1 exit status exit status 1 Compilation error: exit status 1
Schau mal unter Tools -> Manage Libraries... Hast du da die neuste? Edit: Ich vermute auch, dass er da einige Dateien nicht findet. Das einfachste wäre evtl. wirklich alles (Arduino IDE) löschen und neu installieren.
:
Bearbeitet durch User
Sebastian M. schrieb: > C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui > dCrystal.cpp: Da steht was von "Arduino15", oben was von "2.0.2"? Kommen sich da grad zwei Installationen in die Quere? > undefined reference to `digitalWrite' d.H. das komplette Arduino-Framework wird nicht mitkompiliert? Hast du irgendwas an der boards.txt ö.Ä. geändert, und dir eine eigene Hardware ohne arduino-support zusammenkonfiguriert?
Sebastian M. schrieb: > folgende Meldung Da werden wesentliche Teile des Frameworks nicht eingebunden. Die Installation ist defekt. Nach der Deinstallation sollte auch dieser C:\Users\basti\AppData\Local\Arduino15\libraries Ordner gelöscht werden. evtl. vorher Backup anlegen.
EAF schrieb: > Nach der Deinstallation sollte auch dieser > C:\Users\basti\AppData\Local\Arduino15\libraries > Ordner gelöscht werden. Korrektur: Nach der IDE Deinstallation sollte auch dieser C:\Users\basti\AppData\Local\Arduino15 Ordner gelöscht werden.
Habe jetzt Deinstalliert und nochmal neu runtergeladen aber es hat nichts geholfen. Folgender Fehlermeldung kommt: C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `pulseEnable': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:304: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:305: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:306: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:307: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:308: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:309: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `write4bits': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:314: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `send': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:288: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:292: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `write8bits': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:322: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `begin': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:91: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:94: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:96: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:101: undefined reference to `pinMode' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:107: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:109: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:110: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:112: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:122: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:126: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:130: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `clear': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:179: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o: In function `begin': C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/Liqui dCrystal.cpp:140: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o:C:\Users\bas ti\AppData\Local\Arduino15\libraries\LiquidCrystal\src/LiquidCrystal.cpp :144: more undefined references to `delayMicroseconds' follow C:\Users\basti\AppData\Local\Temp\ccZNphFx.ltrans0.ltrans.o:(.rodata+0x6 ): undefined reference to `Print::write(unsigned char const*, unsigned int)' c:/users/basti/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7. 3.0-atmel3.6.1-arduino7/bin/../lib/gcc/avr/7.3.0/../../../../avr/lib/avr 6/crtatmega2560.o:(.init9+0x0): undefined reference to `main' collect2.exe: error: ld returned 1 exit status exit status 1 Compilation error: exit status 1
Adam P. schrieb: > Schau mal unter > > Tools -> Manage Libraries... > > Hast du da die neuste? > > Edit: > Ich vermute auch, dass er da einige Dateien nicht findet. > Das einfachste wäre evtl. wirklich alles (Arduino IDE) löschen und neu > installieren. Wenn ich die neueste Installiere und ausführe kommt der nachfolgende Fehler (aber es steht mehrere Bibliotheken dafür dabei): C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `pulseEnable': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:304: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:305: undefined reference to `delayMicroseconds' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:306: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:307: undefined reference to `delayMicroseconds' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:308: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:309: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `write4bits': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:314: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `send': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:288: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:292: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `write8bits': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:322: undefined reference to `digitalWrite' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `begin': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:91: undefined reference to `pinMode' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:94: undefined reference to `pinMode' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:96: undefined reference to `pinMode' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:101: undefined reference to `pinMode' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:107: undefined reference to `delayMicroseconds' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:109: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:110: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:112: undefined reference to `digitalWrite' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:122: undefined reference to `delayMicroseconds' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:126: undefined reference to `delayMicroseconds' C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:130: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `clear': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:179: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o: In function `begin': C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCryst al.cpp:140: undefined reference to `delayMicroseconds' C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o:C:\Users\bas ti\Documents\Arduino\libraries\LiquidCrystal\src/LiquidCrystal.cpp:144: more undefined references to `delayMicroseconds' follow C:\Users\basti\AppData\Local\Temp\ccFvvQ9m.ltrans0.ltrans.o:(.rodata+0x6 ): undefined reference to `Print::write(unsigned char const*, unsigned int)' c:/users/basti/appdata/local/arduino15/packages/arduino/tools/avr-gcc/7. 3.0-atmel3.6.1-arduino7/bin/../lib/gcc/avr/7.3.0/../../../../avr/lib/avr 6/crtatmega2560.o:(.init9+0x0): undefined reference to `main' collect2.exe: error: ld returned 1 exit status Mehrere Bibliotheken wurden für "LiquidCrystal.h" gefunden Benutzt: C:\Users\basti\Documents\Arduino\libraries\LiquidCrystal Nicht benutzt: C:\Users\basti\AppData\Local\Arduino15\libraries\LiquidCrystal exit status 1 Compilation error: exit status 1
Adam P. schrieb: > Also ich habe nun getestet: Ich auch! Sebastian M. schrieb: > Folgender Fehlermeldung kommt: Eigentlich ist wichtiger, das was er tut, dass die Fehler kommen, wissen wir schon. Es kann übrigens Sinn machen die ganzen mit arduino beginnenden Ordner aus temp zu löschen. bzw die Datenträgerbereinigung da mal drüber zu schicken.
Ok habe es iwie geschafft nach löschen iwelcher ordner und neuinstallation. Ich habe das Display: https://www.reichelt.de/arduino-shield-display-lcd-kit-16x2-blau-weiss-ard-shd-lcd-p270527.html?&trstct=pos_2&nbc=1 das Stecke ich in meinen Arduiono Mega aber es erscheint trdm nichts auf dem Display aber keine Fehlermeldung
Solange das Display nicht initialisiert wurde (was eine Software-Sache ist) sollte es eine Reihe graue Blöcke anzeigen und die andere Reihe leer bleiben. Stelle ggf. das Kontrast Poti entsprechend ein. Wenn du das schon nicht geht, hast du ein Hardwareproblem.
Sebastian M. schrieb: > Ich habe das Display: Das wird über I²C angesprochen, du hast die falsche Library. Schau eher hier: https://www.arduino.cc/reference/en/libraries/liquidcrystal-i2c/
Εrnst B. schrieb: > Das wird über I²C angesprochen Den Verdacht habe ich auch. Die Produktbeschrezbung von Conrad ist ein schlechter Witz, das Datenblatt eine Unverschämtheit. Wenn ich mir die Fotos anschaue, könnte da sogar ein Mikrocontroller mit drauf sein, aber im Text und im downloadbaren Material steht nichts dazu.
Du hast einen Mega 2560, korrekt? Da schaut das Pinout nicht so aus, als könnte man das Display-Board irgendwo sinnvoll direkt draufstecken. Das Bild von der Reichelt-Seite passt nicht zu deinem Arduino. Du musst die richtigen SDA/SCL-Pins bei deinem Arduino suchen.
:
Bearbeitet durch User
Ich habe diese Doku gefunden, demnach ist LiquidCrystal (ohne I²C) doch die richtige Bibliothek. Aber mit anderen Parametern. https://wiki.keyestudio.com/Ks0256_keyestudio_LCD1602_Expansion_Shield
:
Bearbeitet durch User
Steve van de Grens schrieb: > Ich habe diese Doku gefunden, demnach ist LiquidCrystal (ohne I²C) doch > die richtige Bibliothek. Ah, ok, dann war das Reichelt-Bild irreführend. Vergleiche die Pinouts, und schau welche Pinnummern vom Mega 2560 dem alten Arduino entsprechen, dann pass die Initialisierung entsprechend an.
Steve van de Grens schrieb: > Die Produktbeschrezbung von Conrad ist ein schlechter Witz Sorry, ich meinte Reichelt.
Sebastian M. schrieb: > bei Arduino braucht man keine main. Was meinst du wohl, wer loop() und setup() bei Arduino aufruft?
> bei Arduino braucht man keine main. > Was meinst du wohl, wer loop() und setup() bei Arduino aufruft? Bei Arduino braucht man kein loop() und setup(). (meistens ehr doch, also: Wahlweise)
Sebastian M. schrieb: > das Stecke ich in meinen Arduiono Mega aber es erscheint trdm nichts auf > dem Display Klingt nach plug and pray. LG, Sebastian
Steve van de Grens schrieb: > Die Produktbeschrezbung von Reichelt ist ein schlechter Witz, das > Datenblatt eine Unverschämtheit. Die bedauernswerten deutschen Händler beklagen sich über China, aber bieten keinerlei Mehrwert - Produkte ohne oder mit schlechter Beschreibung bekomme ich direkt aus China billiger. EAF schrieb: > Bei Arduino braucht man kein loop() und setup(). Geh' besser mit Deinen Bauklötzen spielen. Steve van de Grens schrieb: > Ich habe diese Doku gefunden, demnach ist LiquidCrystal (ohne I²C) doch > die richtige Bibliothek. Aber mit anderen Parametern. > https://wiki.keyestudio.com/Ks0256_keyestudio_LCD1602_Expansion_Shield Die dortige Initialisierung passt, wenn das Display auf einem UNO steckt. Ich habe keine Ahnung, ob der Mega die gleiche Belegungsfolge bietet. Ich benutze beide nicht und meine Displays habe ich lose ohne Platine drunter.
EAF schrieb: > Bei Arduino braucht man kein loop() und setup(). Und für was hältst du die Aufrufe in der main.cpp vom Arduino Core?
1 | int main(void) |
2 | {
|
3 | init(); |
4 | initVariant(); |
5 | |
6 | #if defined(USBCON)
|
7 | USBDevice.attach(); |
8 | #endif
|
9 | |
10 | setup(); |
11 | |
12 | for (;;) { |
13 | loop(); |
14 | if (serialEventRun) serialEventRun(); |
15 | }
|
16 | return 0; |
17 | }
|
https://github.com/arduino/ArduinoCore-avr/blob/1.8.5/cores/arduino/main.cpp
Manfred schrieb: > EAF schrieb: >> Bei Arduino braucht man kein loop() und setup(). > > Geh' besser mit Deinen Bauklötzen spielen. Hmmm.... Trollst du gerade, oder hast du keine Ahnung von dem Kram? Das kürzest mögliche Arduino fähige C oder C++ Programm sieht so aus:
1 | int main(){} |
Es kompiliert perfekt und tut genau das, was man erwartet: Nichts! Siehst du da ein loop() oder setup()? Ich nicht.
Nachtrag/Erklärung: Der Arduino Builder sieht vor, dass man auch auf das Framework gänzlich verzichten kann. Und das geht eben genau über den Weg, dass man setup() und loop() weglässt und selber eine main() definiert.
EAF schrieb: > Das kürzest mögliche Arduino fähige C oder C++ Programm sieht so aus:int > main(){} Und was an dem Programm ist Arduino?
Wolfgang schrieb: > Und was an dem Programm ist Arduino? Ach du armer Kerl. Es kann mit der Arduino IDE kompiliert werden. Es kann dann auf einem Arduino laufen. Selbst große Teile des Frameworks kann man verwenden. Auch viele der Libraries. Also: Was ist daran nicht Arduino? Ich sehe schon, jetzt willst du sogar bestimmen dürfen was Arduino ist, und wo es aufhört.... Ich schätze, dass du damit deinen Kompetenzbereich überschreitest. Klare: Die Definitionshoheit liegt nicht bei dir!
Ihr wisst beide wie man das richtig macht und was sonst noch machbar ist. Warum streitet ihr euch?
:
Bearbeitet durch User
Natürlich bin ich mir bewusst, dass es die main gibt aber ich die nicht zwangsläufig selber schreiben muss. Hört endlich auf mit dem klugscheissen wegen der main xD. Ja ich benutzte den Arduino Mega und nicht den Uno bzw. ich habe auch einen Uno zur verfügung aber da gehts auch nicht wenn ich den nur draufstecke
:
Bearbeitet durch User
Ich verstehe nicht wo das Problem ist, uns wieso ihr da so ein Theater macht. Das 1602 Display ist DAS Display für den Arduino. Ergo gibt es da Schaltplane und Codes ohne Ende für im Netz. Egal ob man ein UNO oder ein Nano hat. Der einzige Unterschied ist, das der Nano genug Leitungen hat das Display auch OHNE i2c Huckepack-Platine anzuschließen. Für BEIDE Varianten gibt es sogar in der Arduino-IDE (wenn richtig installiert) ein Beispiel-Code. Zu unterscheiden sind die beiden Varianten mit den Zusatz i2c oder halt nicht ;) Also macht nicht so ein Aufstand von Zwerg ;)
Schlaumaier schrieb: > Das 1602 Display ist DAS Display für den Arduino. Ergo gibt es da > Schaltplane und Codes ohne Ende für im Netz. Bis gestern Abends war der Knackpunkt, den Plan von der Platine zu finden. Was nützt ein Schaltplan, der nicht dem Produkt entspricht? Was nützt ein Datenblatt, in dem nicht einmal die Pinbelegung angegeben ist? Der TO hat den Plan inzwischen und auch die richtige Bibliothek, sowie deren Doku. > Also macht nicht so ein Aufstand von Zwerg ;) Jetzt hast du es uns allen aber richtig gegeben. Und, läuft das Display jetzt? Nein! War mal wieder sehr Hilfreich ............ nicht
:
Bearbeitet durch User
Steve van de Grens schrieb: > Der TO hat den Plan inzwischen und auch die richtige Bibliothek, sowie > deren Doku. Ich wäre für ein Foto des Display. Irgendwie habe ich das Gefühl das es kein normales 1602 ist. ODER der TO vergessen hat den Kontrast anzuklemmen. ;) https://starthardware.org/lcd/ <- Ich meine die Leitung die durch ein Poti in den Plan läuft. ;) Und wo ich schon zig Leuten gesagt habe sie sollen an der weisen Schraube in beide Richtungen drehen bis auf den Display was passiert. Logo wenn sie die i2c-Huckepack-Platinen nutzen. DANN kommt der große AH-da-ist-was. Effekt. ;)
Schlaumaier schrieb: > Ich wäre für ein Foto des Display. Er hat es doch verlinkt! > ODER der TO vergessen hat den Kontrast anzuklemmen. Hatten wir auch schon geklärt, gähn. > DANN kommt der große AH-da-ist-was. Effekt. Sicher nicht. Deine Hinweise sind hier vollkommen nutzlos.
:
Bearbeitet durch User
Sebastian M. schrieb: > Ich habe das Display: > https://www.reichelt.de/arduino-shield-display-lcd-kit-16x2-blau-weiss-ard-shd-lcd-p270527.html?&trstct=pos_2&nbc=1 Steve van de Grens schrieb: > Schlaumaier schrieb: >> Ich wäre für ein Foto des Display. > > Er hat es doch verlinkt! Ok habe ich übersehen. Dann soll er einfach DIESE Seite aufrufen und sich freuen. https://www.az-delivery.de/products/azdelivery-hd44780-1602-lcd-module-display-2x16-zeichen-fur-arduino-lcd1602-keypad Und an der Schraube drehen in beide Richtungen ;) Und das nächste mal kein Shild kaufen. Damit hat man nur stress.
Schlaumaier schrieb: > Dann soll er einfach DIESE Seite aufrufen und sich freuen. We gesagt, er hat bereits ein Programmbeispiel bekommen. Sogar direkt auf der Webseite des Produkt-Herstellers. > Und an der Schraube drehen in beide Richtungen Den Kontrast hatten wir wie gesagt bereits geklärt. Höre du doch mal auf, am Rad zu drehen! Und lies wenigstens mal die vorherigen Beiträge, bevor du störst.
:
Bearbeitet durch User
Steve van de Grens schrieb: > Lies doch wenigstens mal die vorherigen Beiträge, bevor zu störst! Naja, vielleicht liest der TO ja meine Tipps. Du musst sie ja nicht lesen.
Schlaumaier schrieb: > Naja, vielleicht liest der TO ja meine Tipps. Die bringen ihn kein Stück weiter, weil sie nicht zu seinem konkreten Produkt passen.
Sebastian M. schrieb: > bzw. ich habe auch einen Uno zur verfügung aber da gehts auch nicht wenn > ich den nur draufstecke Weiter vorne wurde Dir ein Link gezeigt, hinter dem es auch ein Beispielprogramm gibt: Beitrag "Re: Arduino Display" Wenn das am Uno nicht geht ... würde ich mal die portable Version der 1.5.x-IDE auf den Rechner packen. Du hast nicht zufällig ein Hardwareproblem, dass das Display extrem blass ist oder Rechtecke anzeigt = Kontrastpoti falsch eingestellt? Schlaumaier schrieb: > Das 1602 Display ist DAS Display für den Arduino. Ergo gibt es da > Schaltplane und Codes ohne Ende für im Netz. Ja. > Egal ob man ein UNO oder ein Nano hat. Der einzige Unterschied ist, das > der Nano genug Leitungen hat das Display auch OHNE i2c Huckepack-Platine > anzuschließen. Das geht auch mit dem Uno ohne I2C. Schlaumaier schrieb: > Naja, vielleicht liest der TO ja meine Tipps. Na hoffentlich nicht. Steve van de Grens schrieb: > Die bringen ihn kein Stück weiter, weil sie nicht zu seinem konkreten > Produkt passen. Vielleicht muss der TO mal die Leitungen vom UNO-Stecker bis zum Display durchklingeln, ob diese wirklich 1:1 passend durchgeschaltet sind. Auf dem Display sind sie ja sichtbar aufgedruckt. Irgendwie hat Schlaumaier ja recht: Diese 1602 sind das Standarddisplay und leidlich problemlos in Betrieb zu nehmen.
Sebastian M. schrieb: > Ja ich benutzte den Arduino Mega und nicht den Uno > > bzw. ich habe auch einen Uno zur verfügung aber da gehts auch nicht wenn > ich den nur draufstecke Stand der Dinge war eigentlich, dass Sebastian nicht compilen kann (genauer gesagt: Das linking bricht mit unresolved refs ab). Ist das jetzt geloest oder ist das ein Troll? Gruesse Th.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.