Richtige IDE statt Arduino SDK?


#1

Hallo,

obwohl einige Erfahrung im Bereich Linux, Einplatinenrechner (Raspberry etc) und IoT, ist das hier mein erster Berührungspunkt zu Arduinos. Daher ist auch die Arduino IDE bzw. das SDK für mich neu, und die vereinfachte C++ Syntax ebenfalls. Zwar ist mein letztes C++ nun 15 Jahre her und ich mehr in der Java, PHP und Perl Welt zuhause, aber C++ oder auch Code aus anderen Sprachen lesen und verstehen klappt doch ganz gut. Fremden Code gut und schnell verstehen wird aber durch eine vernünftige IDE untersützt.
Und da war bzw. bin ich erschüttert über die Arduino IDE: kein vernünftiges Syntax und Context Highlighting, keine Call Hierarchy, keine Type Hierarchy, keine “open declaration” Navigation, keine Suche nach Referenzen, im Prinzip außer etwas Syntax Highlighting kaum Unterstützung.

Mit Java Projekten nutze ich Eclipse. Für C++ gibt’s natürlich auch Eclipse, und für Arduino das entsprechende Plugin. Ich habe es mal getestet, funktioniert einwandfrei. Man kann vernünftig den Code editieren, wer Eclipse (oder eine andere brauchbare IDE) kennt weiß was damit möglich ist.

Allerdings compiliert weder der master noch der dev Branch Code ohne weiteres sauber als C++ Code, da das Prototyping der Methoden nicht sauber ist, und 1, 2 kleine Ungenauigkeiten drin sind, am Beispiel master: es fehlt um die Zeile 27 herum

bool readCard(nfcTagObject *nfcTag);
void dump_byte_array(byte *buffer, byte bufferSize);
void resetCard();
void setupCard();
void writeCard(nfcTagObject nfcTag);

und Zeile 486 in Methode readCard muss

return returnValue; //statt nur return;

lauten.

Im dev Branch ist es mit den Prototypen der Methoden genauso, außer dass es natürlich mehr sind, und in Zeile 470 muss es zusätzlich zu dem return returnValue; obendrüber heißen

randomSeed(millis() + random(1000));  //-> millis() statt millis

Nach Korrektur compilieren beide branches, und können direkt aus Eclipse auf den Arduino geladen werden.

Building TonUINO
"C:/Users/xxx/.arduinocdt/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10608 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   -I"C:/Users/xxx/.arduinocdt/packages/arduino/hardware/avr/1.6.23/cores/arduino" -I"C:/Users/xxx/.arduinocdt/packages/arduino/hardware/avr/1.6.23/variants/eightanaloginputs" -I"C:/Users/xxx/.arduinocdt/libraries/DFPlayer_Mini_Mp3_by_Makuna/1.0.2/src" -I"C:/Users/xxx/.arduinocdt/libraries/MFRC522/1.4.3/src" -I"C:/Users/xxx/.arduinocdt/packages/arduino/hardware/avr/1.6.23/libraries/EEPROM/src" -I"C:/Users/xxx/.arduinocdt/libraries/JC_Button/2.0.1/src" -I"C:/Users/xxx/.arduinocdt/packages/arduino/hardware/avr/1.6.23/libraries/SPI/src" -I"C:/Users/xxx/.arduinocdt/packages/arduino/hardware/avr/1.6.23/libraries/SoftwareSerial/src" "../../TonUINO.cpp" -o "project/TonUINO.cpp.o"
"C:/Users/xxx/.arduinocdt/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-gcc" -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p  -o "./TonUINO.elf" project/TonUINO.cpp.o  libraries/MFRC522/1.4.3/src/MFRC522.cpp.o libraries/MFRC522/1.4.3/src/MFRC522Extended.cpp.o libraries/JC_Button/2.0.1/src/JC_Button.cpp.o libraries/SPI/src/SPI.cpp.o libraries/SoftwareSerial/src/SoftwareSerial.cpp.o  "./core.a" "-L." -lm
"C:/Users/xxx/.arduinocdt/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-objcopy" -O ihex -R .eeprom  "./TonUINO.elf" "./TonUINO.hex"
"C:/Users/xxx/.arduinocdt/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0  "./TonUINO.elf" "./TonUINO.eep"
Program store usage: 19777 of maximum 30720 bytes
Initial RAM usage: 799 of maximum 2048 bytes

Nun die Frage: wer könnte - wenn da nichts gegen spricht - diese Änderungen zum. in den dev Branch übernehmen? “Abwärts-/rückwärtskompatibel” sind die Änderungen, der Sketch compiliert in der Arduino IDE unverändert.

Außerdem: wenn jemand Interesse an der IDE, Fragen zur Nutzung oder Einrichtung hat oder Probleme, gerne fragen :slight_smile:

In den folgenden Screenshots mal einen Eindruck von der Eclipse IDE.

CallHierarchy


'resetCard' was not declared in this scope
#2

Vielen Dank für Deinen Beitrag!
Wir sind ja (fast) alle eher Hobby-Programmierer :wink:
Du kannst in GitHub aber Thorsten einen Request für Deine Änderungen schicken.


#3

Hobby-Programmierer hin oder her der Code sollte schon auch in einer anderen IDE bauen. Die Arduino IDE verzeiht hier offensichtlich den ein oder anderen Flüchtigkeitsfehler mehr. Mach bitte einen Pull request, dann wird sich drum gekümmert. :+1:t2:
Der Fokus liegt aber weiterhin auf der Arduino IDE, weil das Projekt ja möglichst einfach sein soll. Nichts desto trotz soll es wie gesagt auch in Eclipse bauen falls das jemand nutzen möchte. Daher auch von mir nochmal Danke für den Hinweis!


#4

Sehr schön! Hatte ich bei mir auch so weit eingerichtet, aber dann musste es schnell gehen (bzw. das Zeitfenster “Kinder im Bett” war zu kostbar :wink:) und ich hab doch wieder in der Arduino IDE weiter gearbeitet.
Woher hast du die externen libraries und wie hast du sie eingefügt? Ich vermute es gibt keinen komfortablen Download Assistenten wie bei der Arduino IDE?!


#5

Für die Aduino Welt kann ich auch VisualStudio Code mit dem PlatformIO Plugin empfehlen.
Da hat man dann auch den Komfort “Libraries” mit einem Klick einbinden zu können und der Compiler ist auf Wunsch etwas deutlicher was Fehler und Warnungen angeht.

Wenn wir schon bei Unschönheiten sind:

 status = (MFRC522::StatusCode)mfrc522.PCD_Authenticate(...)

Ist auch etwas das nur dazu führt mögliche Fehler zu verdecken. Explizit casten sollte man nur, wenn
es unbedingt nötig ist.

So sieht es übrigens bei VisualStudio Code aus:


#6

Ehrlich gesagt, sind mir die ganzen anderen Lösungen zu kompliziert.
Ich habe, nach dem ich es hier gelesen habe auch mal das Visualstudio mit PlatformIO installiert. Ich komm da aber nicht weiter, alles zu viel Knöpfle und tamtam drumrum. Ich könnte auch, ohne das mir das jemand zeigt, niemals die ganzen Vorteile daraus schöpfen.
AUch hab ich mal den Atom.io probiert weil ich direkt das Github Repo einbinden wollte. Habs nicht hinbekommen und lande immer wieder bei der ArduinoIDE, respektive bei Notepad++ und kopiers dann rüber :wink:


#7

Könntest Du bitte @Thorsten evtl. einen Pull-Request schicken?


#8

Ich werde einen Pull-Request erzeugen, ist für mich aber noch ein unbekanntes Feld, also irgedwann heute oder die Tage abends… muss ich erst mal rausfinden was das ist :wink:

@nanos, es gibt sowohl für die Platform als auch die eingesetzten Bibliotheken eine bequeme Installationsmöglichkeit…!
Ich habe mal eine Anleitung von Download Eclipse bis Upload Programm auf das Board erstellt…: Anleitung


#9

Hallo, sieh Dir mal meine Anleitung für Eclipse an, damit sollte es einfach gehen. Und wenn Du dann erstmal die vielen kleinen Hilfen einer “richtigen” IDE siehst willst Du nicht mehr zu Notepad++ zurück… alleine “Tooltips” sind schon hilfreich. Ich habe mit dem Arduino SDK jetzt noch nicht rausgefunden, wie man sich z.B. diese Information besorgen kann, ohne den Code der Bilibotheken zu durchforsten - den ich in der Arduino IDE auch noch nicht gefunden habe :thinking:

Also ich will niemanden “bekehren”, aber wer Eclipse, Netbeans, … kennt und liebt wird mich verstehen :wink:


#10

Toll vielen Dank für die ausführliche Anleitung!

Schau doch mal hier:


#11

Cool. Danke.
Gleich mal ausgedruckt und werde ich bald mal angehen.


#12

Ich habe mir wirklich einen abgebrochen das Ganze hinzubekommen. Ich hatte fast sämtliche Sachen nach der AVR-Linux Anleitung fertig aber mich die ganze Zeit gefragt, wo in deiner Anleitung der “Arduino Download Manager”-Button herkommt (Seite 3). Irgendwann hats Klick gemacht und ich habe mal den Eclipse Marketplace durchsucht (nicht nur das Plugin Repository). Kann es sein, dass du Eclipse C++ IDE for Arduino (https://marketplace.eclipse.org/content/eclipse-c-ide-arduino) (nach-)installiert hast??? Dieser winzige Hinweis fehlt in deiner Anleitung :wink: (oder wird unter Windows automatisch mit installiert).

Naja, wie dem auch sei, mit selbigen nachinstalliert finde ich nun auch den Arduino Download Manager und werde vermutlich ab jetzt auch Eclipse nutzen können :grin:


#13

Bei mir war alles da, so wie in der tollen Anleitung.
Allerdings bringt die dev Version so viele Fehler, das ich, der nicht fließend C spricht, keine Chance hab das fehlerfrei hinzubekommen. Deswegen kann ich darüber nicht compilieren und somit auch nicht flashen. Schade.


#14

Hallo nanos, oh je, sehr seltsam - den Punkt hatte ich nicht, ich habe es aber ergänzt in der Anleitung.

Dass das fehlte liegt daran, dass es in meinem Download schon fertig gebundelt war/ist, hast Du wirklich das Eclipse IDE for C/C++ Developers Package geladen: Link
Habe es neu probiert auf einem anderen Rechner, mit einem anderen Workspace und User Profil: egal was ich probiere, die Arduino IDE ist immer sofort da, ohne nachinstallieren…!
Ist auch im Zip vom Eclipse Donwload zu sehen:

Anleitung ist aber zur Sicherheit mal eränzt: Anleitung_V2


#15

Die Fehler sind eigentlich gar nicht so zahlreich, sind aber mit dem letzten Commit in der Tat angestiegen.

Derzeit:
Fehlende Deklaration von Methoden, einfügen um Zeile 57

bool readCard(nfcTagObject *nfcTag);
void dump_byte_array(byte *buffer, byte bufferSize);
void resetCard();
void setupCard();
void writeCard(nfcTagObject nfcTag);
void adminMenu();
void playShortCut(uint8_t shortCut);
void setstandbyTimer();
void setupFolder(folderSettings * theFolder);
void randomSeed(unsigned long x);

Zeile 457 korrigieren zu

randomSeed(millis() + random(1000));

Zeile 956 korrigieren zu

return returnValue;

Und neu, das “Equalizer auch anwenden und nicht speichern” übergibt einen int als Parameter, erwartet wird von der Bibliothek aber ein Wert des Enums DfMp3_Eq. Dass das funktioniert ist aber wohl eher Glück, die Enumwerte sind intern Zahlen. Quellcode der Bibliothek:

enum DfMp3_Eq
{
    DfMp3_Eq_Normal,
    DfMp3_Eq_Pop,
    DfMp3_Eq_Rock,
    DfMp3_Eq_Jazz,
    DfMp3_Eq_Classic,
    DfMp3_Eq_Bass
};

Also müsste man Zeilen 390 und 703 korrigieren von

mp3.setEq(mySettings.eq - 1);

zu

DfMp3_Eq selectedEqualizer = static_cast<DfMp3_Eq> (mySettings.eq-1);
mp3.setEq(selectedEqualizer);

Ich habe allerdings noch nicht getestet ob dieser Cast funktioniert, bzw. im Arduino SDK funktioniert…


#16

Es compiliert auch in der Arduino IDE. Habe daher einen Pull Request zum DEV Branch hierzu erstellt… (https://github.com/xfjx/TonUINO/pull/18)


#17

Nein :see_no_evil:, ich nutze regelmäßig die Java-IDE und installiere Eclipse über die Paketverwaltung meiner Linuxdistribution (macht die Updateverwaltung wesentlich einfacher). Eclipse-Java und Eclipse-CPP parallel beißen sich. Ich dachte das Nachinstallieren der C+±Umgebung wäre identisch mit dem Bundle. Wieder was dazu gelernt :grimacing:


#18

Großartig! Vielen Dank für die tolle Anleitung für die Eclipse-IDE. Ich bin total begeistert.


#19

Hab mal einen Branch mit den aktuellen Änderungen für die DEV Version für Eclipse erstellt: https://github.com/A-A-G/TonUINO/tree/eclipse
Sind zwar nicht viele aber vielleicht hilft es ja wem…
Anleitung ist wirklich top!


#20

Der Link zur Anleitung funktioniert bei mir leider nicht mehr : (
Wollte das heute auch mal ausprobieren.