Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Platformio meldet folgende Fehler für die Dev #50

Closed
3rdlvlspprt opened this issue Nov 30, 2019 · 16 comments
Closed

Platformio meldet folgende Fehler für die Dev #50

3rdlvlspprt opened this issue Nov 30, 2019 · 16 comments

Comments

@3rdlvlspprt
Copy link

Hi.

PlatformIO ist die Dev-Ebene meiner Wahl. Ist jemand in der Lage, die Dev so zu programmieren, dass folgende Fehler nicht mehr beim kompilieren erscheinen? PlatformIO Code dürfte ja auch bei der Arduino IDE klappen, welche ja eher Fehler ausbügelt/ignoriert, PlatformIO aber nicht.

Compiling .pio\build\nanoatmega328\src\main.cpp.o
src\main.cpp: In member function 'virtual void SleepTimer::loop()':
src\main.cpp:277:25: error: 'setstandbyTimer' was not declared in this scope
setstandbyTimer();
^
src\main.cpp:279:16: warning: deleting object of polymorphic class type 'SleepTimer' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
delete this;
^
src\main.cpp: In member function 'virtual bool KindergardenMode::handleNext()':
src\main.cpp:422:20: error: 'playFolder' was not declared in this scope
playFolder();
^
src\main.cpp: In function 'void nextTrack(uint16_t)':
src\main.cpp:534:21: error: 'setstandbyTimer' was not declared in this scope
setstandbyTimer();
^
src\main.cpp:545:23: error: 'setstandbyTimer' was not declared in this scope
setstandbyTimer();
^
src\main.cpp:566:21: error: 'setstandbyTimer' was not declared in this scope
setstandbyTimer();
^
src\main.cpp:581:23: error: 'setstandbyTimer' was not declared in this scope
setstandbyTimer();
^
src\main.cpp: In function 'void waitForTrackToFinish()':
src\main.cpp:714:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
} while (!isPlaying() && millis() < currentTime + TIMEOUT);
^
src\main.cpp: In function 'void setup()':
src\main.cpp:758:27: warning: invalid conversion from 'int' to 'DfMp3_Eq' [-fpermissive]
mp3.setEq(mySettings.eq - 1);
^
In file included from src\main.cpp:3:0:
.pio\libdeps\nanoatmega328\DFPlayer Mini Mp3 by Makuna\src/DFMiniMp3.h:198:10: note: initializing argument 1 of 'void DFMiniMp3<T_SERIAL_METHOD, T_NOTIFICATION_METHOD>::setEq(DfMp3_Eq) [with T_SERIAL_METHOD = SoftwareSerial; T_NOTIFICATION_METHOD = Mp3Notify]'
void setEq(DfMp3_Eq eq)
^
src\main.cpp:786:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < EEPROM.length(); i++) {
^
src\main.cpp:794:17: error: 'playShortCut' was not declared in this scope
playShortCut(3);
^
src\main.cpp: In function 'void loop()':
src\main.cpp:977:10: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
if (ignorePauseButton == false)
^
src\main.cpp:1028:10: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
if (!ignoreUpButton)
^
src\main.cpp:1100:23: error: 'readCard' was not declared in this scope
if (readCard(&myCard) == true) {
^
src\main.cpp:1110:17: error: 'setupCard' was not declared in this scope
setupCard();
^
src\main.cpp: In function 'void adminMenu(bool)':
src\main.cpp:1117:37: warning: default argument given for parameter 1 of 'void adminMenu(bool)' [-fpermissive]
void adminMenu(bool fromCard = false) {
^
src\main.cpp:82:6: note: previous specification in 'void adminMenu(bool)' here
void adminMenu(bool fromCard = false);
^
src\main.cpp: In function 'void adminMenu(bool)':
src\main.cpp:1131:22: error: 'askCode' was not declared in this scope
if (askCode(pin) == true) {
^
src\main.cpp:1173:15: error: 'resetCard' was not declared in this scope
resetCard();
^
src\main.cpp:1192:29: warning: invalid conversion from 'int' to 'DfMp3_Eq' [-fpermissive]
mp3.setEq(mySettings.eq - 1);
^
In file included from src\main.cpp:3:0:
.pio\libdeps\nanoatmega328\DFPlayer Mini Mp3 by Makuna\src/DFMiniMp3.h:198:10: note: initializing argument 1 of 'void DFMiniMp3<T_SERIAL_METHOD, T_NOTIFICATION_METHOD>::setEq(DfMp3_Eq) [with T_SERIAL_METHOD = SoftwareSerial; T_NOTIFICATION_METHOD = Mp3Notify]'
void setEq(DfMp3_Eq eq)
^
src\main.cpp:1236:52: error: 'setupFolder' was not declared in this scope
setupFolder(&mySettings.shortCuts[shortcut - 1]);
^
src\main.cpp:1300:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < EEPROM.length(); i++) {
^
src\main.cpp:1318:22: error: 'askCode' was not declared in this scope
if (askCode(pin)) {
^
src\main.cpp: In function 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)':
src\main.cpp:1349:120: warning: default argument given for parameter 4 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
^
src\main.cpp:76:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
^
src\main.cpp:1349:120: warning: default argument given for parameter 5 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
^
src\main.cpp:76:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
^
src\main.cpp:1349:120: warning: default argument given for parameter 6 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
^
src\main.cpp:76:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
^
src\main.cpp:1349:120: warning: default argument given for parameter 7 of 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' [-fpermissive]
bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) {
^
src\main.cpp:76:9: note: previous specification in 'uint8_t voiceMenu(int, int, int, bool, int, int, bool)' here
uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset,
^
src\main.cpp: In function 'void resetCard()':
src\main.cpp:1466:13: error: 'setupCard' was not declared in this scope
setupCard();
^
src\main.cpp: In function 'void writeCard(nfcTagObject)':
src\main.cpp:1710:8: warning: unused variable 'size' [-Wunused-variable]
byte size = sizeof(buffer);
^
*** [.pio\build\nanoatmega328\src\main.cpp.o] Error 1

@A-A-G
Copy link

A-A-G commented Nov 30, 2019

Dazu sind sicherlich einige in der Lage.

Das Thema gab es auch schon: https://discourse.voss.earth/t/richtige-ide-statt-arduino-sdk/980

@3rdlvlspprt
Copy link
Author

Hi,

dann wäre das ja super, wenn sich jemand finden und das tun würde.

Gruß

@grimmpp
Copy link

grimmpp commented Dec 1, 2019

Wenn du was auf die Schnelle ausprobieren möchtest, kannst du in mein Repo hinein schauen: https://github.com/grimmpp/audiobox-for-kids . Es basiert auf PIO. Es ist alles auch PIN-kompatibel zu TonUINO, allerdings kenne ich den Unterschied zur aktuellen DEV Version nicht. ...

@3rdlvlspprt
Copy link
Author

3rdlvlspprt commented Dec 2, 2019

Guck ich mir an, danke. Den Code kompatibel zu machen, ist dann meine erste Hürde, um dann richtig loslegen zu können. Wäre nett, wenn das jemand hinkriegt, der das mal eben so aus dem Ärmel schüttelt. Auch wäre es mehr als sinnvoll, den Code einmal an einer Stelle sauber zu machen.

@grimmpp
Copy link

grimmpp commented Dec 2, 2019

Das hatte ich gemacht und dann habe ich angefangen ihn objektorientiert umzuschreiben. Unter lib kannst du die "Helfer"-Klassen finden. Wenn du es kompiliert werden dir die Abhängigkeiten als Baum gelistet. ...
Ich habe auch ein dockerfile + Anleitung im Repo, damit man es schnell testen kann ohne etwas installieren zu müssen.

@3rdlvlspprt
Copy link
Author

Das gefällt mir gut, was du gemacht hast. Der Code ist aber komplett anders, und so denke ich, dass, wenn die Dev mal zur Master wird, oder neue Änderungen reinkommen, auch der wieder "umgebaut" werden müsste. Ich probiere deshalb erst mal weiter an der Bereinigung der Dev zu Platformio rum, bin eigentlich auch schon fast fertig.

@A-A-G
Copy link

A-A-G commented Dec 4, 2019

https://github.com/A-A-G/TonUINO/tree/platformio

PlatformIO zum laufen zu bekommen dauert ja länger als die paar Anpassungen... :)

@DerTomm
Copy link

DerTomm commented Jan 1, 2020

Ich stand heute vor dem gleichen Problem: Ich möchte mich zukünftig gerne an der Entwicklung dieses genialen Projekts (großen Dank an @xfjx!) beteiligen, arbeite jedoch ungern in der Arduino IDE. Also hieß es, das Projekt in VS Code auf Basis von PlatformIO aufzusetzen.

Da Thorsten verständlicherweise die Einstiegshürden so niedrig wie möglich halten will und damit die Nutzbarkeit mit der Arduino IDE das Maß der Dinge ist, sind große Umbauten am Code also tabu.

Glücklicherweise sind diese aber auch gar nicht notwendig gewesen. Am Ende habe ich das Projekt nun so aufgesetzt, dass die PIO-spezifischen Dateien und Verzeichnisse nicht ins Projekt gepusht werden (PR #53) und sich der Code ohne Fehler und Warnungen compilieren lässt (PR #54; hier sind die Anpassungen von @A-A-G enthalten).

Basis ist die reguläre Verzeichnisstruktur des Originalrepo-DEV-Branches. Nach Einrichtung des PIO-Projektes ist dies der Inhalt meiner platformio.ini:

[env:bb328p8m]
platform = atmelavr
board = bb328p8m
framework = arduino
monitor_speed = 115200

[platformio]
src_dir = ./

Ich nutze einen barebone Atmega328 (der mit 8 MHz und 3.3V Spannung läuft) auf einer eigenen Platine, daher das ungewöhnliche Board. Wichtig ist eigentlich nur der Abschnitt [platformio]. PIO findet damit die Tonuino.ino im Root und kann diese fehlerfrei kompilieren. Weitere Anpassungen am Code sollten meines Erachtens nicht nötig sein.

Wenn Thorsten die beiden PRs mergt und die Änderungen in den DEV-Branch wandern, solltet Ihr also eigentlich recht schnell die PIO-Umgebung aufsetzen können.

Viele Grüße,
Thomas

@AlexanderWillner
Copy link

Zur Kenntnis: unter https://github.com/alexanderwillner/tonuino ist der Support auch drin. Was die Arduino-Unterstützung angeht, habe ich unter https://github.com/AlexanderWillner/TonUINO/tree/cleanup einmal getestet, dass eine leere ino-Datei auch die passende CPP-Datei öffnet. Gerne bringe ich die Änderungen in diesen Branch mit ein...

Repository owner deleted a comment from 3rdlvlspprt Jan 8, 2020
@xfjx
Copy link
Owner

xfjx commented Jan 8, 2020

Hallo @AlexanderWillner. Erstmal Danke für das Angebot. Aktuell bin ich sowohl beruflich als auch familiär sehr eingespannt. Auch der Rest des Projekts (Support) nimmt viel Zeit in Anspruch. Bald wird es sicher wieder etwas ruhiger bei mir und ich kann mich wieder aktiver um die Weiterentwicklung kümmern.

Platform-IO ist aktuell nicht geplant, da es Dinge für Enduser verkomplizieren würde.

Das ist ja das tolle an Opensource - du kannst es ja für dich so umstellen oder erweitern wie du willst. Darum habe ich es so aufgesetzt.

@AlexanderWillner
Copy link

Danke für das Feedback.

Erstmal Danke für das Angebot. Aktuell bin ich sowohl beruflich als auch familiär sehr eingespannt.

Das verstehe ich gut.

Platform-IO ist aktuell nicht geplant, da es Dinge für Enduser verkomplizieren würde.

Nach den Änderungen ändert sich für den Enduser nichts: ein Doppelklick auf eine ino-Datei.

Das ist ja das tolle an Opensource - du kannst es ja für dich so umstellen oder erweitern wie du willst. Darum habe ich es so aufgesetzt.

Wirklich prima, dass der Code auf GitHub gehostet ist. Gleichzeitig ist die Idee von Opensource nicht, dass jeder für jeden Bugfix und jede Änderung seinen eigenen Fork hat, sondern dass die Community zum Quelltext beiträgt (Pull Requests).

@3rdlvlspprt
Copy link
Author

Hi Alexander. Meine Kritik würde gelöscht und wie du siehst, ist kein Interesse daran, den Code zugänglicher zu machen oder zu debuggen. Das sind Windmühlen, und das muss man nicht verstehen. Haben schon zig andere versucht, aber, warum auch immer, schalten die hier auf stur.

@3rdlvlspprt
Copy link
Author

Es kann ja auch nicht sein, dass es eine Stelle gibt, die den Master Code hier hat, viele Forken und debuggen, aber der Master wird hier nicht debugged. Das ist nicht Anfänger oder Anwenderfreundlich

@A-A-G
Copy link

A-A-G commented Jan 9, 2020

Das Löschen des Beitrags fand ich auch nicht so gelungen...
Ansonsten finde ich den Ansatz von @xfjx, den Code möglichst einfach zu halten damit auch Leute, die von Programmierung keine Ahnung haben, sich einen Tonuino bauen können, gut.
(Die minimalen Änderungen, damit der Code in anderen IDEs lauffähig ist könnte man allerdings hinzufügen.)
Für den kompletten Support anderer IDEs (Eclipse, VSC + PlatformIO) sind dann Forks/Branches wohl besser geeignet. Da könnte man auch die Ordnerstruktur anpassen/verbessern etc.

@DerTomm
Copy link

DerTomm commented Jan 9, 2020

Platform-IO ist aktuell nicht geplant, da es Dinge für Enduser verkomplizieren würde.

Nach den Änderungen ändert sich für den Enduser nichts: ein Doppelklick auf eine ino-Datei.

Die Unterstützung einer richtigen Entwicklungs- und Buildumgebung würde dazu beitragen, dass - nennen wir sie mal fortgeschrittene - Entwickler sich eher an der Weiterentwicklung des Projektes beteiligen würden. Davon hätten dann auch die regulären Enduser etwas.

Und wie @AlexanderWillner schon schreibt: Wenn es richtig gestaltet ist, ändert sich für normale Anwender nichts.

Das ist ja das tolle an Opensource - du kannst es ja für dich so umstellen oder erweitern wie du willst. Darum habe ich es so aufgesetzt.

Wirklich prima, dass der Code auf GitHub gehostet ist. Gleichzeitig ist die Idee von Opensource nicht, dass jeder für jeden Bugfix und jede Änderung seinen eigenen Fork hat, sondern dass die Community zum Quelltext beiträgt (Pull Requests).

Genau das geschieht hier ja dummerweise schon: Viele, die Commits im Projekt erstellen, um entweder Fehler zu beheben oder Funktionalität hinzuzufügen, machen dies ausschließlich in ihren jeweiligen Forks. Das kann doch nicht wirklich in Deinem Interesse sein. Auf der Projekt-Website schreibst Du ja selbst:

Wenn ihr Erweiterungen oder Verbesserungen habt würde ich mich sehr freuen wenn ihr mir diese zurück schickt.

oder

Wenn ihr mich unterstützen wollt könnt ihr dies auf folgenden Wegen tun:
[...] Am Quellcode weiterentwickeln

@3rdlvlspprt
Copy link
Author

Die arduino IDE bügelt aber Fehler gut aus. Nutzt man dann aber eine andere, die das nicht macht, zum Beispiel PlatformIO, dann möchte diese erst, dass die Fehler entfernt werden. Das sind teilweise einfache typos, manchmal auch semantik. Diese Fehler sind halt in dem "Ur"-Quellcode, der hier vertrieben wird. Die müssen entfernt werden, hier und nur hier. Alle anderen forks haben auch dieselben Fehler, außer die bereinigten.

Es ist so für den Anfänger nicht möglich, sich weiter zu entwickeln, außer, wenn er sich dann die Krümel sucht, und selbst debugged. Es gibt schon zig Versuche, tonuino auf eine andere Ebene zu heben, und jedesmal scheitert es an denselben festgefahrenen Stellen.

Ich meine ihr wollt eine neue Platine rausbringen, wohl um vieles zu vereinfachen. Wie soll die anständig laufen, wenn der Code nicht 100% stimmt, bzw von anderen IDE fehlerfrei genutzt werden kann?

Aber, das ist ja eigentlich auch egal. Totgefahren und zensiert, also bin ich zum Beispiel raus, auch wenn ich nicht viel beitragen konnte, da ich hier auf Granit stieß.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants