Moin Forum!
Gerade wollte ich doch mal wieder was mit Programmierung machen und lud
einen älteren Sketch.
Da kam eine Fehlermeldung. Nun bin ich schon wieder länger raus und
dachte mir, da frag ich mal die KI. Mach ich sonst nicht - versprochen.
Sehr witzig, die KI hatte eine Antwort womit ich nicht gerechnet habe.
1
Das Problem ist, dass sich im selben Ordner (Timer) zwei .ino-Dateien befinden: Timer.ino und Timer_Kopie.ino.
2
Die Arduino IDE versucht, alle .ino-Dateien in einem Ordner zu einem einzigen Programm zusammenzufassen. Da beide Dateien den exakt gleichen Code enthalten, beschwert sich der Compiler über "Redefinitions" – er sieht Variablen wie sleep_flag und Funktionen wie setup() doppelt.
Bisher hatte ich solche Probleme nie. Ich habe natürlich immer die neuen
Versionen der Arduino IDE installiert.
Ist das nur ein blöder Zufall, dass das jetzt aufgetreten ist oder
handhabt Arduino die Dateienverwaltung nun anders?
Das passiert auch, wenn du eine .ino in einem anderen Ordner anklickst.
Dann fragt er dich, ob er sie nach /Arduino kopieren soll.
Er legt auch automatisch einen neuen Ordner an, wenn du eine .ino
speichern willst und sie Timer nennst. Dann hast du einen Ordner Timer
und eine Timer.ino in /Arduino
Fred F. schrieb:> Dann hast du einen Ordner Timer> und eine Timer.ino in /Arduino
Zumindest weiß ich jetzt wieso ich dieses Verhalten nicht mehr
unterbinden sollte.
Macht Arduino erst seit einiger Zeit und nervte mich immer. Gerade weil
ich die Änderungen immer in einer neuen Datei zusammen in einem Ordner
haben wollte. Bisher gab es sicher auch deshalb Fehler, die mir aber
nicht so klar waren.
Harald K. schrieb:> https://de.wikipedia.org/wiki/Git
Ach Git, ja klar!
Danke für den Link! Hatte ich damals schon einmal mit angefangen.
Ich denke da ich jetzt mit der Abwicklung der Arbeit fertig bin und wenn
es mir weiterhin ziemlich gut geht, ist das sicher etwas, was ich mir
(dank deinem Hinweis) wieder ansehen werde. Allerdings will ich so was
nicht öffentlich machen. Nicht, dass ich was zu verheimlichen hätte,
aber meine Programme sind sicher für viele Menschen augenschädlich.😆
Frank O. schrieb:> Allerdings will ich so was> nicht öffentlich machen.
Musst Du auch nicht. Git läuft komplett lokal auf Deinem Rechner, nichts
zwingt Dich dazu, Deine "commits" auch irgendwohin zu "pushen".
So als Tipp:
man kann mit git auch ein Repo auf eine USB Festplatte "pushen".
Dann hat man gleich ein Backup aller Änderungen auf einem zweiten
Speicher.
Mach ich mit vielen kleinen Projekten so an denen nur ich arbeite.
Wenn man einen Heimserver hat (und da reicht ein dockerfähiges NAS aus),
kann man auf diesem einen lokalen Git-Server laufen lassen. Gitea ist da
eine recht nette Möglichkeit.
Fürs reine Backup aber genügt es, das Quellverzeihnis inklusive aller
enthaltenen versteckten Dateien zu sichern. Im versteckten Verzeichnis
.git liegt die "Magie" von git.
Frank O. schrieb:> Ist das nur ein blöder Zufall, dass das jetzt aufgetreten ist oder> handhabt Arduino die Dateienverwaltung nun anders?
War schon immer so. Projektname = Verzeichnis = Dateiname
(ohne Suffix, DAU Windows Nutzer sehen die Dateiendungen nicht)
Alexander schrieb:>> handhabt Arduino die Dateienverwaltung nun anders?> War schon immer so. Projektname = Verzeichnis = Dateiname
Meine ersten Gehversuche mit Arduino waren 2015 mit 1.7.4, da wurde aus
einer .ino automatisch ein gleichnamiges Verzeichnis angelegt und die in
dieses verschoben. Wenn im Ordner zwei oder mehr .ino liegen, fliegt die
Compilierung ab - also keinesfalls neu.
Was ich noch nicht probiert habe, ob '#includes' ersetzbar sind, indem
man die Files in den Ordner packt. Die Struktur mit den libraries finde
ich etwas undurchsichtig und vor allem ärgernisträchtig, wenn man eine
aktualisiert und später ein altes Projekt nochmal anfassen muß.
Manfred P. schrieb:> Wenn im Ordner zwei oder mehr .ino liegen, fliegt die> Compilierung ab - also keinesfalls neu.
Ab wann weiß ich nicht mehr, jedenfalls konnte ich sonst immer
"Timer.ino;Timer1.ino; Timer2.ino ..." alle im selben Ordner speichern,
ohne, dass es Fehler gab.
Hallo,
nur für das Protokoll, denn hier wird etwas beschrieben was so wie
dargestellt nicht stimmen kann.
Frank O. schrieb:> Das Problem ist, dass sich im selben Ordner (Timer) zwei .ino-Dateien> befinden: Timer.ino und Timer_Kopie.ino.
Die IDE erstellt automatisch keine Kopie. Die Timer_Kopie.ino. hast du
selbst erstellt. Da beißt die Maus keinen Faden ab. Das passiert wenn
man mit der Maus im Dateiexplorer eine Datei in den gleichen Ordner
kopiert bzw. eine Kopie erstellt. Vermutlich ausversehen passiert, aber
von dir und nicht von der IDE.
> Ab wann weiß ich nicht mehr, jedenfalls konnte ich sonst immer> "Timer.ino;Timer1.ino; Timer2.ino ..." alle im selben Ordner speichern,> ohne, dass es Fehler gab.
Wenn in allen das "Gleiche" drin steht inkl. setup() und loop() und es
als Backup dienen soll, dann ist das natürlich quatsch. Denn alle .ino
Dateien im Ordner Timer werden "zusammengestellt/zusammenkopiert" bevor
die eigentliche Kompilierung beginnt. Wenn es dann mehrere gleichnamige
Funktionen, Variablen etc. gibt knallt es natürlich. War vorher so und
ist jetzt so. Lege einen Unterordner Backup an und schiebe sie dort
rein. Das mach ich bspw. so mit Datumskürzel im Dateinamen. Ist simpel
und reicht für meine Zwecke aus.
Was man machen kann ist mit Tabs arbeiten, wenn der Sketch/Code größer
wird, wenn man den Code nicht in eigene Libs auslagern möchte, wenn der
Code zur Wiederverwendung nicht geeignet ist. Dein Ordner heißt Timer
und es gibt eine Timer.ino. Damit ist das die Haupt .ino Datei mit
setup() und loop(). Alle anderen .ino Dateien sind in den Tabs wenn du
diesen Sketch öffnest und befinden sich auch im Ordner Timer. Das mit
den Tabs dient zum Code auslagern, da kann man Funktionen reinschieben
o.ä. Selten gibt es Probleme damit, dann muss man mit
Funktionsprototypen nachhelfen.
Manfred P. schrieb:> Alexander schrieb:>>> handhabt Arduino die Dateienverwaltung nun anders?>> War schon immer so. Projektname = Verzeichnis = Dateiname
Wo er recht hat, hat er recht.
> Was ich noch nicht probiert habe, ob '#includes' ersetzbar sind, indem> man die Files in den Ordner packt. Die Struktur mit den libraries finde> ich etwas undurchsichtig und vor allem ärgernisträchtig, wenn man eine> aktualisiert und später ein altes Projekt nochmal anfassen muß.
Ich habe das noch nicht speziell genau dafür probiert. Aber Prinzip wie
eigens erstelle Libs. Ordnernamen, Dateinamen und die library.properties
anpassen. Alles im Pfad ...\sketchbook\libraries. Bei anderen Libs kann
man sich das anschauen. Dann wird die ältere Version auch von der IDE
gefunden und aufgelistet und liegt dann nicht versteckt irgendwo rum.
Wenn man mehrere Lib Versionen testen möchte, muss man dann nur seine
#include Zeile ändern und nicht tief im System rumfummeln. Bspw. würde
sich anbieten #include "xyzLib_v0.0.1" oder "xyzLib_v0.0.2".
Für jede Version gibt einen Ordner im Pfad ...\sketchbook\libraries und
alle Versionen sind sauber getrennt.
Man kann das sicherlich auch mir #defines ausbauen wenn spezifisch
kompiliert werden soll, ich denke da sind der Fantasie keine Grenzen
gesetzt.
Veit D. schrieb:> Wo er recht hat, hat er recht.
Mag alles stimmen, aber vorher hatte ich noch nicht bemerkt dadurch
Probleme zu haben.
Veit D. schrieb:> Die IDE erstellt automatisch keine Kopie. Die Timer_Kopie.ino. hast du> selbst erstellt. Da beißt die Maus keinen Faden ab. Das passiert wenn> man mit der Maus im Dateiexplorer eine Datei in den gleichen Ordner> kopiert bzw. eine Kopie erstellt. Vermutlich ausversehen passiert, aber> von dir und nicht von der IDE.
Ja klar habe ich das extra gemacht.
Aber jetzt bin ich im Bilde und mir schwarmt, dass ich wohl auch schon
vorher Fehler dadurch hatte, die ich nur leider so nicht erkannt hatte.
Im Nachhinein eine war das eine blöde Idee, weil das eigentlich aus
anderen IDEs bekannt war.
Manchmal ist man einfach bescheuert.
Jedenfalls weiß ich es jetzt und werde die selbstverständlich in
verschiedenen Unterordner speichern.
Und Git schaue ich mir auch wieder an.
Ich hänge das Datum an und belasse die Dateien in ihren Ordner. Das
mache ich auch mit Software und habe mir dafür ein mausbedienbares
Programm geschrieben.
Manfred P. schrieb:> Verzeichnis von ...\Arduino_IDE\Programme\OLED_i2C_Test
Da Backslash im Pfad vorhanden: dann doch wenigstens
OLED_i2C_Test.ino_20200515.txt
Manfred P. schrieb:> Ich hänge das Datum an und belasse die Dateien in ihren Ordner.
Auch eine Idee. Aber ich habe gerade erstmal gesehen, dass ich nur noch
schwer durchblicke. Das letzte Projekt war die elektrische Bremse beim
Gabelstapler. Eigentlich müsste ich jeden Schritt noch im Kopf haben.
Früher war das so, aber seit Richard tot ist und ich danach einen
Gedächnisverlust hatte, funktioniert mein Kopf leider nicht mehr so gut,
dass ich mir alles über jahrzehnte merken kann und dann kam auch noch
der neue Tumor.
Kurz um, ich muss das sowieso alles neu ordnen und vor allem
dokumentieren.
Ob nun Git oder was anderes kommt, ist noch offen.
Aber Danke für deinen Tipp!
Frank O. schrieb:> Ob nun Git oder was anderes kommt, ist noch offen.
Git macht (u.a.) dasselbe, was die von Hand angelegten Dateien machen
sollen, kann aber auch gleich die Unterschiede zwischen verschiedenen
Versionen ("Commits") anzeigen.
Und die von Git angelegten "Kopien" bringen nicht die
Entwicklungsumgebung durcheinander, sondern die liegen versteckt in
einem Unterverzeichnis (.git)
In vielen neueren IDEs gibt es eine Git-Integration, man kann das aber
auch im Kommandozeilenfenster bedienen.
Harald K. schrieb:> In vielen neueren IDEs gibt es eine Git-Integration, man kann das aber> auch im Kommandozeilenfenster bedienen.
Die paar Kommandos, die man regelmäßig braucht, hat man schnell
auswendig gelernt. Und zum Anschauen der Historie genügt mir das
mitgelieferte gitk.
Hans W. schrieb:> Die paar Kommandos, die man regelmäßig braucht, hat man schnell> auswendig gelernt.
Gewiss, nur ist eine brauchbare Anzeige eines diffs, bei dem man nicht
eintippseln muss, welche Commits man vergleichen möchte, sondern diese
z.B. aus 'ner Dropdown-Liste aussuchen kann, meist komfortabler.
Harald K. schrieb:> Git macht (u.a.) dasselbe, was die von Hand angelegten Dateien machen> sollen, kann aber auch gleich die Unterschiede zwischen verschiedenen> Versionen ("Commits") anzeigen.
Schaue mir gerade ein Tutorial an und gerade zeigt er, dass du das
"Privat" stellen kannst. Darunter, das hat er (noch) nicht gesagt, steht
sofort "Add a Readme file". Genau das brauche ich.
Allerdings muss ich das nochmal schauen, da ich gerade schon weggesegelt
bin. Bin seit 5:30 Uhr auf den Beinen. Training, Haushalt und alle
anderen, möglichen Sachen. Jetzt kommt die Müdigkeit.
Frank O. schrieb:> Schaue mir gerade ein Tutorial an und gerade zeigt er, dass du das> "Privat" stellen kannst.
Da vermischst du gerade Git und Github.
Github kann man benutzen, dann hast du gewissermaßen einen Cloud-Backup.
;-) Allerdings könnte es sein, dass Microsoft deinen Code zum Füttern
von irgendwelchen LLMs benutzt, wenn du als nicht zahlender Kunde
private Repositories machst, da habe ich noch nicht so genau hingesehen.
Alle meine Github-Repos sind eh öffentlich. ;-)
Git selbst braucht kein Github, wurde dir ja aber schon geschrieben. Es
braucht auch keine verteilten Repositories, wenngleich man das natürlich
als eine simple Art Backup machen kann. Wenn du allein dran arbeitest
und nur eins der Repositories zum Arbeiten benutzt (das / die andere(n)
nur als Backup), musst du dich auch nicht um potenzielle Konflikte
zwischen Dateiversionen sorgen.
Jörg W. schrieb:> Allerdings könnte es sein, dass Microsoft deinen Code zum Füttern von> irgendwelchen LLMs benutzt,
An dieser Stelle verweise ich noch mal auf den Konkurrenten GitLab.