Arduino-Programmierung: Bin ich oder der Erfinder der Programmiersprache zu blöd?

Es gibt 137 Antworten in diesem Thema, welches 17.611 mal aufgerufen wurde. Der letzte Beitrag (16. Juni 2022 um 13:57) ist von 1570.

  • Es macht nur etwas anderes als du haben willst.

    :gruebel

    Die höhere Komplexität liegt meiner Meinung nach nicht in der verwendeten Sprache, sondern darin dass parallel zum Blinken und den damit verbundenen Wartezeiten ständig die Taste abgefragt werden muss. Schließlich will man den Blinkvorgang möglichst verzögerungsfrei abbrechen.

    Das schafft der C64 mit 1 MHz und mit seinem BASIC quasi verzögerungsfrei.

    Wenn der Arduino mit einem LED-Blinken und Tasten abfragen schon "zeitkritisch überfordert" sein sollte, dann würde ich den nicht mal geschenkt anfassen. :D

    Nun ja, was Retro-Rentner möchte ist eine Blinkfrequenz von 1 Hz (500ms an, 500ms aus), das Basic-Programm blinkt einfach so schnell es kann.

    Der Arduino ist nicht etwa zu langsam, sondern viel zu schnell, so dass man das An- und Abschalten sofort hintereinander gar nicht als Blinken wahrnehmen würde, geschweige denn ein Blinken in der gewünschten Frequenz. Daher ist es notwendig irgendwie geartete Delays einzubauen, während dieser natürlich fortwährend die Taste abgefragt werden muss. Das müsste das C64-Programm auch tun, tut es aber nicht.

  • Jupp, so einfach kann das Programmieren sein!

    Einfach irgendwas programmieren was so ähnlich wie eine Lösung aussieht ist halt einfacher als etwas zu Programmieren, dass sich an die Vorgaben hält. Der Ton fehlt, die Blinkfrequenz ist falsch und durch das Blinken des Rahmens statt eines Userport-Pins für eine echte LED spart man noch mehr Initialisierungskram.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Simples Projekt:

    Nach Einschalten des Arduino soll nach einer Pause von 10 Minuten ein Ton (Doppelton) ausgegeben werden und eine LED soll blinken,

    bis man einen Taster betätigt.

    Der Ton soll dann ausgeschaltet werden und die LED nicht mehr blinken.

    Nach 10 Minuten starten Ton & Blinken erneut, bis der Taster gedrückt wird.

    Nun ja, was Retro-Rentner möchte ist eine Blinkfrequenz von 1 Hz (500ms an, 500ms aus), das Basic-Programm blinkt einfach so schnell es kann.

    Ich hab zwar nichts von 500ms gelesen, aber wird schon so sein ... :)


    Man kann sicherlich jetzt Haare spalten, ob eine Blickfrequenz exakt getimed ist oder nicht, letztendlich ist es halt so, dass man am C64-BASIC einfach drauflos programmieren konnte. Das macht auch heute noch bei Kindern einen unglaublichen Reiz aus (selbst paarmal miterlebt).

    Ein pups-simples PRINT "HALLO" oder PRINT 34+23 ist einfach "intutiv direkter" erfahrbar als sich erst in irgendwelche Methodenstrukturen einlesen zu müssen. Den direkten Reiz von damalstm kann man mit solchen modernen Projekten kaum mehr erleben. Nicht, dass die alles schlecht sind, ganz im Gegenteil, aber eben anders nicht mehr so "direkt" zur Maschine. ;)

  • letztendlich ist es halt so, dass man am C64-BASIC einfach drauflos programmieren konnte. Das macht auch heute noch bei Kindern einen unglaublichen Reiz aus (selbst paarmal miterlebt).

    Ein pups-simples PRINT "HALLO" oder PRINT 34+23 ist einfach "intutiv direkter" erfahrbar als sich erst in irgendwelche Methodenstrukturen einlesen zu müssen. Den direkten Reiz von damalstm kann man mit solchen modernen Projekten kaum mehr erleben. Nicht, dass die alles schlecht sind, ganz im Gegenteil, aber eben anders nicht mehr so "direkt" zur Maschine. ;)

    Für Kinder gibt es heutzutage aber auch eine Reihe einfach zu erlernender Programmierungs-Baukästen, Blockly, Snap! usw. =)

    Strukturierte Programmierung ist auch nur ein Paradigma (Spaghetticode geht in jeder Sprache), und auch in, z.B., Python (dem BASIC des 21. Jahrhunderts) kann man wild drauflosprogrammieren. :)

  • Man kann sicherlich jetzt Haare spalten, ob eine Blickfrequenz exakt getimed ist oder nicht, letztendlich ist es halt so, dass man am C64-BASIC einfach drauflos programmieren konnte. Das macht auch heute noch bei Kindern einen unglaublichen Reiz aus (selbst paarmal miterlebt).

    Ein pups-simples PRINT "HALLO" oder PRINT 34+23 ist einfach "intutiv direkter" erfahrbar als sich erst in irgendwelche Methodenstrukturen einlesen zu müssen. Den direkten Reiz von damalstm kann man mit solchen modernen Projekten kaum mehr erleben. Nicht, dass die alles schlecht sind, ganz im Gegenteil, aber eben anders nicht mehr so "direkt" zur Maschine. ;)

    Naja, man muss schon exakt bei seinen Anforderungen sein. Wir sind einfach von RRs eigenem Programm ausgegangen, und haben das als Spezifikation benutzt. Ansonsten vergleichen wir halt Äpfel und Birnen.

    Das direkt drauflos programmieren geht ja heute auch noch. Naja, fast. Nach dem Einschalten des Rechners muss man halt doch noch die Python shell aufmachen, oder den javascript oder Clojure REPL -- wobei die RasPi Foundation ursprünglich genau aus dem Grund den Pi direkt in einen Python REPL booten wollte. Sie haben es am Ende doch nicht gemacht, aber dieses "drauflosprogrammieren" ist genau so immer noch mit den REPLs moderner Programmiersprachen möglich. Da geht auch einfach mal "1+1 [Enter]" um eine Rechenaufgabe zu lösen.

    Es gibt halt mehrere Stufen der Entwicklung eines Programmierers: 1. einfache feste Befehlsabfolgen programmieren (wie bei LOGO) 2. Kontrollfluss mit IF 3. Schleifen 4. Funktionen und Rekursion -- und dann immer abstraktere und höherwertigere Konzepte, wie OO, FP, und tausend Konzepte, die hier zu weit führen. Die Arduino IDE macht dabei den Einstieg unglaublich simpel, indem sie einen leeren Sketch direkt mit setup() und loop() vorbestückt und sogar einen Kommentar reinschreibt "hier kommt die initialisierung rein" und "hier kommt das rein, was der Arduino so die ganze zeit machen soll". Ja, es ist ein Stück schwerer als einfach den Python REPL zu öffnen oder am C= BASIC was reinzutippen, aber immerhin programmiert man gleichzeitig einen autarken Mikrocontroller, der, wenn man ihn vom PC abstöpselt, immer noch das Programm ausführt, was man da gerade hochgeladen hat. Es ist halt eine andere Kiste -- nämlich die Programmierung von eingebetteten Computern.

    C64C mit 8580, C64 mit 6581 und C64G mit ARMSID,

    C16, VC20, PET3016+32K, 3x1541, 2x1541-II, Pi1541, Philips CM8833-II, 1084S

    Bitte melde dich an, um diesen Link zu sehen.

  • Wenn man das so macht, kann man später die ganze Funktionalität in ein Unterprogramm auslagern ...

    Nur eines (!) meiner drei Arduino-Bücher listet im Index "Unterprogramm" auf. Die Erklärung auf der entsprechenden Seite ist......... :(

    Scheint keine Unterprogramme auf dem Arduino zu geben.

    Aber Ähnliche hatte ich vor vioelen Jahren mal mit Linux, da gab es auch keine GUI/grafische Oberfläche - jedenfalls nicht laut

    dem 50 Euro teuren dicken Fachbuch. ;)

    Programmierer, die erklären können sind eh eher selten :D Aber cool was Du da codest - hat das nen größeren Zweck, oder nur so? Hey mit Deinen Kentnissen hätten wir Dich daaamals™ in der "Group" gebrauchen können :thumbup:

  • Ein pups-simples PRINT "HALLO" oder PRINT 34+23 ist einfach "intutiv direkter" erfahrbar als sich erst in irgendwelche Methodenstrukturen einlesen zu müssen. Den direkten Reiz von damalstm kann man mit solchen modernen Projekten kaum mehr erleben. Nicht, dass die alles schlecht sind, ganz im Gegenteil, aber eben anders nicht mehr so "direkt" zur Maschine. ;)

    Sowas macht man Heute in Python, da sind die kleinen auch immer seh schnell mit dabei und das ist ähnlich simpel

  • Nun ja, was Retro-Rentner möchte ist eine Blinkfrequenz von 1 Hz (500ms an, 500ms aus), das Basic-Programm blinkt einfach so schnell es kann.

    Der Arduino ist nicht etwa zu langsam, sondern viel zu schnell, so dass man das An- und Abschalten sofort hintereinander gar nicht als Blinken wahrnehmen würde, geschweige denn ein Blinken in der gewünschten Frequenz. Daher ist es notwendig irgendwie geartete Delays einzubauen, während dieser natürlich fortwährend die Taste abgefragt werden muss. Das müsste das C64-Programm auch tun, tut es aber nicht.

    Nächster Schritt: Statt Blinken die LED per Pulsweitenmodulation langsam heller und dunkler werden lassen, wie das mit der Busy-LED der 1541 auch gemacht wird. :)

  • Ahh verdammt,

    Ich habe nicht den gesamten Queltext gepostet, Schande über mein Haupt.

    Aber genau das mache ich da: Bitte melde dich an, um diesen Link zu sehen.

    Sogar für eine Laufwerks-Led(Stripe), und auch mit Arduino IDE.

    Edit: Wer suchet der findet!

    Hier mal LED-Helligkeit mit Quelltext: Bitte melde dich an, um diesen Link zu sehen.

    Mfg Jood

    Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen.,
    Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen.,
    Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen.

  • Basic auf dem Arduino:

    Bitte melde dich an, um diesen Link zu sehen.

    Wenn es denn sein muss...

  • Basic auf dem Arduino:

    Bitte melde dich an, um diesen Link zu sehen.

    Wenn es denn sein muss...

    Das ist echt ziemlich cool. Kann man dann sogar per serieller Schnittstelle an den C64 hängen und von da aus dann per Terminalprogramm den Arduino in BASIC programmieren. I love it!

    C64C mit 8580, C64 mit 6581 und C64G mit ARMSID,

    C16, VC20, PET3016+32K, 3x1541, 2x1541-II, Pi1541, Philips CM8833-II, 1084S

    Bitte melde dich an, um diesen Link zu sehen.

  • Ein pups-simples PRINT "HALLO" oder PRINT 34+23 ist einfach "intutiv direkter" erfahrbar als sich erst in irgendwelche Methodenstrukturen einlesen zu müssen. Den direkten Reiz von damalstm kann man mit solchen modernen Projekten kaum mehr erleben. Nicht, dass die alles schlecht sind, ganz im Gegenteil, aber eben anders nicht mehr so "direkt" zur Maschine. ;)

    Sowas macht man Heute in Python, da sind die kleinen auch immer seh schnell mit dabei und das ist ähnlich simpel

    "Hello World" auf dem Arduino sieht so aus

    Code
    void setup() { 
      Serial.begin(9600);
      Serial.println("Hello World!");
    }
    
    void loop() {
    }

    wenn man unbedingt immer alles vergleichen will.

    Das ist natürlich ziemlich unspannend auf dem Arduino. Aber mit einem angeschlossenem LC-Display sind es auch nur ein paar Zeilen mehr.

    Schließt mal ein Terminal oder ein LC-Display an den C64 an und zeigt mir den Code, der dafür nötig ist. :D

    In der eigenen Paradedisziplin wird das jeweils andere Systeme immer ziemlich alt aussehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Einmal editiert, zuletzt von detlef (15. Juni 2022 um 18:05)

  • Und hier noch das "Hello World" für ein am Arduino angeschlossenes LC-Display.

    Und jetzt bitte der C64 - auf einem am Userport angeschlossenen LC-Display. :thumbsup:

  • Ich weiss nicht warum du den Vergleich willst. Wenn du für den C64 eine Bibliothek hättest, die den Funktionsumfang von Liquid crystal hätte, dann bräuchtest du auch nur eine ähnliche Anzahl Codezeilen schreiben, wie in deinem Beispiel.

  • Ich weiss nicht warum du den Vergleich willst. Wenn du für den C64 eine Bibliothek hättest, die den Funktionsumfang von Liquid crystal hätte, dann bräuchtest du auch nur eine ähnliche Anzahl Codezeilen schreiben, wie in deinem Beispiel.

    Hätte, hätte, Fahrradkette. "Hätte" zählt nicht, sondern das was verfügbar ist. ;)

    Das ist doch genau der Punkt. Dass ich beim Arduino für alles mögliche eine passende Bibliothek runterladen kann.

    Und wenn der Arduino einen Basic 2 Interpreter hätte, dann könnte man den genauso leicht (aus Sicht der Basic-Programmierer) wie einen C64 programmieren.

    Ich will den Vergleich nicht. Ich will nur zeigen, wie absurd das ist, einen Arduino mit einem C64 zu vergleichen.

  • Da steckt GNU C++ dahinter und das lässt sich mit seinem kompletten Sprachumfang uneingeschränkt nutzen.

    Die ganzen Hardwaretreiber sind alle in reinem C++ geschrieben und auch so ziemlich alle objektorientiert.

    Ich meinte, wenn man auf der vorgesehenen obersten API-Ebene bleibt, mit init(), loop() und den vorgesehenen Treiber-Aufrufen.

    Sobald man in tiefere Ebenen muss, hat man praktisch eher sowas wie BASIC mit SYS auf Maschinensprache-Routinen. :)

    Ne. Da hast du dann einfach normales C++ und kannst alles das nutzen, was der Hersteller des Mikroprozessors auf dem Board vorgesehen hat. Mit Basic-Sys-Maschinenspracheroutinen ist das nicht vergleichbar.

    Nee nee, "Programmierer" aka Anwendungsentwicklung gibt es als normales Ausbildungsfach, und im Informatikstudium an einer Universität weiter oben im Spektrum wird programmieren können vorausgesetzt und optionale Zusatzkurse angeboten, wenn da Aufholbedarf besteht.

    Die Ausbildung "Fachinformatiker Anwendungsentwicklung" gibt es in der Tat schon seit 1997, also 25 Jahre. Im Gegensatz zu Studenten lernen die richtig was. Im Informatikstudium muss man nämlich nicht programmieren können, um durchzukommen. Zumindest seit dem Bachelor-/Master-Geschisse.

    Das H steht für Hochschule, nehm ich an? :) Die wär dann im Spektrum zwischen Ausbildung und Universität. ;)

    Aber mein Punkt ist, Programmieren erfordert kein Studium, und es gibt viele Informatiker, die nicht so wirklich gut programmieren können.

    Eine Universität _ist_ eine Hochschule. Und die RWTH hat seit 1966 den Universitätsstatus. Ich nehme an, du meinst eine Fachhochschule. Seit Bachelor/Master gibt es da prinzipiell fast keine Unterschiede mehr. Fachhochschulen waren in der Vergangenheit allerdings eher praktisch orientiert, weshalb in vielen Bereichen in der Wirtschaft (insbesondere technische) Fachhochschulabsolventen bevorzugt wurden. Die konnten bspw. dann oft wirklich programmieren. :wink: Uni-Absolventen können oft nach ihrem Abschuss erstmal nix außer Theorie. Deshalb eignen sich viele während des Studiums praktische Fähigkeiten an, bspw. durch Praktika oder Studentenjobs.

    Aber es ist wirklich ein Irrglaube, dass ein studierter Informatiker sich immer mit Computern auskennen würde oder programmieren könnte.

    Sowas macht man Heute in Python, da sind die kleinen auch immer seh schnell mit dabei und das ist ähnlich simpel

    Den Python Hype verstehe ich nicht. Ich habe damit auch eine Zeit lang was gemacht, aber es gibt da Dinge, die mich einfach nerven. Für Programmieranfänger gibt es so viele bessere Sprachen. Ich würde ja immer dazu raten, einfaches C zu lernen. Daraus kann man dann für andere Sprachen sehr viel ableiten.

    Ich will den Vergleich nicht. Ich will nur zeigen, wie absurd das ist, einen Arduino mit einem C64 zu vergleichen.

    Das ist genau das was ich meine. Daher volle Zustimmung.

  • Aber es ist wirklich ein Irrglaube, dass ein studierter Informatiker sich immer mit Computern auskennen würde oder programmieren könnte.

    Programmierer war früher ein Lehrberuf. Das waren die, die die Bänder und Lochkartenstapel geschleppt und eingelegt haben. Und die durften auch mal ein Systemscript schrieben. Das war dann die Programmierarbeit. Ist doch klar, dass ein Informatiker sich nicht auf dieses Niveau begibt. ;)

    Diplom-Informatik, wie ich es noch kenne, war eigentlich mehr ein Mathematikstudium. Das ging es um Algorithmen und Zahlentheorie usw. Programmieren war eher Handwerkszeug, das man braucht um die Sachen umzusetzen. Das wird bei einem Informatiker vorrausgesetzt, dass er das dann auf die Kette bekommt.

    Und wenn im Informatikstudium tatsächlich mal programmiert wurde, dann musste man sich erst mal eine eigene Sprache definiert und einen Compiler dafür erstellt. :D

    Mann sollte tatsächlich programmieren nicht mit Informatik gleichsetzen.

  • Aber cool was Du da codest - hat das nen größeren Zweck, oder nur so?

    Hey mit Deinen Kentnissen hätten wir Dich daaamals™ in der "Group" gebrauchen können :thumbup:

    Ja, das wird ein "Trink-Erinnerungstimer" für mein Radtourenprojekt.

    Und wehe, jemand sagt "Geht doch heutzutage auch mit ner Sportuhr"!

    Das ist Generation Smartphone, Konsum, China-Käufer, Fertgkonsumiererei!

    Sowas ist unsportlich! ;)

    Welche Kentnisse? Aktuell habe ich ja das Problem, es eben NICHT coden zu können. *Lach*

    Aber das wird noch - wenn ich mal Zeit habe. *NochmehrLach*

    Heute kam der "echte" Arduino samt Piezo an. Der Fortschritt (oder hiess es "der Wahnsinn"?) lässt sich nicht aufhalten! :)

  • Den Python Hype verstehe ich nicht. Ich habe damit auch eine Zeit lang was gemacht, aber es gibt da Dinge, die mich einfach nerven. Für Programmieranfänger gibt es so viele bessere Sprachen. Ich würde ja immer dazu raten, einfaches C zu lernen. Daraus kann man dann für andere Sprachen sehr viel ableiten.

    Das ist genau das was ich meine. Daher volle Zustimmung.

    Ich auch nicht, für ne dynamische sprache gibts mir da viel zu viel unterschiede zwischen datentypen die ich aber gar nicht kenne ohne die doku gelesen zu haben, und einige sachen sind wirklich merkwürdig gelöst.

    Das ist aber sehr häufig die Sprache der wahl bei vielen jungs hacker veranstaltungen und es kommt gut an, eben mit dem "einfach mal eben" faktor.