Sketch per C# auf Adruino spielen

hallo miteinander,

ich habe mal wider eine Verrückte Idee.

Angenommen mein Arduino Mega ist immer mit dem PC Verbunde
da die Hardware Steuerung ausgelagert ist und das Arduino und mein PC
Kommunizieren über die Serielle Schnittstelle miteinander.

Dann kann ich recht einfach eine Abfrage in mein Sketch eine Abfrage einbauen
damit mein PC erfährt ob das richtige Sketch auf dem Arduino ist,
wenn das nicht der Fall ist dann soll mein PC damit nicht arbeiten
das ist recht einfach.

meine Idee ist nun wenn ich also weis das mein Arduino das Falsche oder garkein
Sketch hat dann soll mein C# Programm das richtige auf das Arduino laden.

Meine Frage ist also wenn das Sketch für das Arduino Fertig ist kann ich das dann
irgend wie so in mein C# einbauen das ich es von dort aus auf das Arduino laden kann?
gerne kann das Sketch ja vorher in ein anders Datenformat gewandelt werden
das es ermöglicht das schneller hoch zu laden.

Was müsste ich wie machen? (bitte vergesst nicht ich bin leihe) :wink:

gruß Mücke

Hallo Mücke,
sollte prinzipiell gehen.
Nachdem der Scetch übersetzt ist liegt er ja als HEX-File irgendwo auf der Platte.
Arduino überträgt das ja nur seriell.

Ich versuche da morgen mal mehr rauszufinden.

Grüße,
Jürgen

Muecke:
hallo miteinander,

ich habe mal wider eine Verrückte Idee.

Hattest du nicht schon mal sowas vor?

Muecke:
Angenommen mein Arduino Mega ist immer mit dem PC Verbunde
da die Hardware Steuerung ausgelagert ist und das Arduino und mein PC
Kommunizieren über die Serielle Schnittstelle miteinander.

Versteh ich nicht. Bei dem Arduino lagerst du die Hardware Steuerung nicht auf dem PC aus, wenn du das so meinst.

Muecke:
Dann kann ich recht einfach eine Abfrage in mein Sketch eine Abfrage einbauen
damit mein PC erfährt ob das richtige Sketch auf dem Arduino ist,
wenn das nicht der Fall ist dann soll mein PC damit nicht arbeiten
das ist recht einfach.

Besteht kein Problem. Mach eine Anfrage (iwas senden), wenn Antwort != dem erwarteten kommt, soll nichts gemacht werden

Muecke:
meine Idee ist nun wenn ich also weis das mein Arduino das Falsche oder garkein
Sketch hat dann soll mein C# Programm das richtige auf das Arduino laden.

Wird nicht so einfach und das C# Programm macht es nicht einfacher. Was du brauchst ist avrdude oder ähnliches um schnell zu flaschen.

Muecke:
Meine Frage ist also wenn das Sketch für das Arduino Fertig ist kann ich das dann
irgend wie so in mein C# einbauen das ich es von dort aus auf das Arduino laden kann?
gerne kann das Sketch ja vorher in ein anders Datenformat gewandelt werden
das es ermöglicht das schneller hoch zu laden.

Schneller wird da nichts. Jedes Programm/Sketch muss du kompilieren ehe es auf dem Arduino landet. In dieser kompilierten Datei kannst du nachher nicht mehr ändern, auch nicht mal eben ein zwei Abfragen verändern. Dafür brauchst du immer wieder deinen org. Sketch.

Muecke:
Was müsste ich wie machen? (bitte vergesst nicht ich bin leihe) :wink:

gruß Mücke

Nichts. Die Idee ist verrückt und bring mM garnichts. Schau dir mal avrdude an oder ähnliches.

AVRdude mit den korrekten Parametern in C# starten

Das geht über System.Diagnostics mit der Start() Methode der Process Klasse:

Hallo Mücke,
sollte prinzipiell gehen.
Nachdem der Scetch übersetzt ist liegt er ja als HEX-File irgendwo auf der Platte.
Arduino überträgt das ja nur seriell.

Ich versuche da morgen mal mehr rauszufinden.

Grüße,
Jürgen

Ich bin immer für Ideen offen.

Hattest du nicht schon mal sowas vor?

was eine verrückte Idee? :wink:
ja hatte ich, leider kann ich das in meinen Rissen Haufen nicht wiederfinden :frowning:
und konnte es damals aus zeit gründen nicht weiter verfolgen.

Versteh ich nicht. Bei dem Arduino lagerst du die Hardware Steuerung nicht auf dem PC aus, wenn du das so meinst.

habe mich glaube ich unglücklich ausgedrückt, ich meine das mein Hardware Steuerung nicht auf dem PC ist sondern auf dem Arduino.

Wird nicht so einfach und das C# Programm macht es nicht einfacher. Was du brauchst ist avrdude oder ähnliches um schnell zu flaschen.

mein c# soll später eine richtige EXE sein also.
das avrdude werde ich mir aber mal anschauen.

Schneller wird da nichts. Jedes Programm/Sketch muss du kompilieren ehe es auf dem Arduino landet. In dieser kompilierten Datei kannst du nachher nicht mehr ändern, auch nicht mal eben ein zwei Abfragen verändern. Dafür brauchst du immer wieder deinen org. Sketch.

Richtig da mein Programm ja eine Exe ist ist da nichts mehr mit ändern, und das Sketch ist auch immer das selbe !
da das Arduino jedoch etwas vergesslich ist was mein Sketch anbelangt würde ich das gerne als "kompilierte Datei" bereithalten um es falls das Arduino mal wider "Wochenende hatte" Vergesslich wurde das Sketch hochzuladen.

Nichts. Die Idee ist verrückt und bring mM garnichts. Schau dir mal avrdude an oder ähnliches.

he he, nicht nur die Idee ist verrückt ich auch :grin:

AVRdude mit den korrekten Parametern in C# starten

Das geht über System.Diagnostics mit der Start() Methode der Process Klasse:
Process.Start Method (System.Diagnostics) | Microsoft Learn

Das schaue ich mir gleich mal an.

um es falls das Arduino mal wider "Wochenende hatte" Vergesslich wurde das Sketch hochzuladen.

AVR machen keinen Urlaub.....
Manchmal schlafen sie, aber nach dem Wecken, geht es weiter ....

Code vergessen?
ca. 10 Jahre bei über 80°C
Je kühler desto länger halten sie.

  • das Datenblatt gibt genauere Auskunft*

Und nach den über 10 Jahren ist dann auch der Bootloader weg.
Wüsste nicht, warum der länger halten soll..... ;):wink:

Richtig da mein Programm ja eine Exe ist ist da nichts mehr mit ändern, und das Sketch ist auch immer das selbe !
da das Arduino jedoch etwas vergesslich ist was mein Sketch anbelangt würde ich das gerne als "kompilierte Datei" bereithalten um es falls das Arduino mal wider "Wochenende hatte" Vergesslich wurde das Sketch hochzuladen.

Da ist dann aber ein Wurm im Arduino oder in der Stromversorgung. Ein Controller vergißt die Programmierung über Jahre nicht.

Für das Upladen genügt eigentlich der Aufruf von AVRdude mit einigen Parametern und das HEX-File des Sketches. Beides erfährst Du wenn Du in IDE Darei-Einstellung-Ausführliche Ausgabe anzeigen aktivierst und Uploadest.

Grüße Uwe

also jetzt mal im ernst mein Arduino vergisst wirklich alles.

so gehe ich vor.

  1. Arduino mit MAC verbinden
  2. Arduino IDE Starten
  3. Sketch Laden
  4. Sketch auf Arduino Spielen
  5. Sketch Prüfen über den Seriellen Monitor
  6. Arduino vom Mac Trennen
  7. WIN Starten
  8. Arduino IDE Starten
  9. Arduino mit WIN verbinden
  10. Arduino IDE Oben rechts auf Seriellen Monitor Klicken
  11. Über Seriellen Monitor Prüfen ob Sketch noch da ist

Und hier ist immer das Sketch weg :frowning:

auch wenn ich das Sketch unter WIN aufspiele und das Arduino wider vom PC trenne und erneut anstecke
ist das Sketch weg.

IST das bei euch nicht so?
warum ist das bei mir so?
Das Arduino ist ein Original!!

Und hier ist immer das Sketch weg :frowning:

Verblüffend!
Nein, das Problem ist mir fremd.

Wie bemerkst du das?
In welcher Form ist das dann "weg"?

wenn ich über den Seriellen Monitor den Befehl:
"get_name" sende dann antwortet das Arduino mit dem Namen des Sketch
mit dem Befehl
"get_firmware" sende dann antwortet das Arduino mit der Firmware Nr.

so kann ich es prüfen ob es noch vorhanden ist oder nicht.

Kann es vielleicht an CR / NL liegen? Arduino IDE (Serial Monitor) muss unter Windows und Mac nicht identisch eingestellt sein.

Es wäre ja doof, wenn du, sobald das Board absteckst, keinen Sketch mehr drauf hast. Dann würde ja auch kein Blink Sketch mehr funktionieren sobald du einmal abstöpelst.

das mit dem "CR / NL" habe ich kontrolliert.
wenn ich es dann neu Hoch geladen habe dann geht es ja wider.

Was mich verwundet schon seit beginn an, das ist nicht immer so manchmal
kann es auch sein das das Sketch noch vorhanden ist.

Dachte immer das das Normal ist und habe mir da auch nicht groß die Gedanken darüber gemacht.
und auf das Phänomen geachtet.

und da ich das Phänomen bei mir habe dachte ich mir das es eine Gute Idee ist das Sketch per C# neu hoch zu laden wenn es nicht da ist.
da alle Einstellungen über das c# Programm vorgenommen werden können.

Nur macht dann dein geschriebenes C Programm nichts anderes als was avrdude selber auch macht :smiley:

Hört sich bei dir sehr merkwürdig an. Ich glaube, hier machst du irgendwo einen kleinen Denkfehler. Wo der aber genau liegt, puh, keine Ahnung. Hab sowas noch nie gehabt.

Wenn der Arduino seinen Sketch verlieren sollten, hätte ich dir letztens auch nicht das Bild des GLCD zeigen können mit dem Text. Der Uno lag ein paar Monate in einer Kiste.

Läuft den der Rest des Programms noch, oder ist es nur die Kommunikation die nicht funktioniert?

Vielleicht mal an einem Pin eine LED anstecken (muss ja nicht permanent verlötet sein) und diese blinken lassen.

das soll es ja auch nicht, es soll das Sketch ja einfach nur auf das Arduino machen :slight_smile:

wie meinst du das mit Denkfehler?
Denkfehler mit dem das das Sketch hoch geladen wird?
oder mit dem wie ich das Sketch Prüfen?

stimmt da hast du was gesagt das es noch drauf war.

Arrrrrr.... warum ist bei mir immer alles anderst wie bei andern?

EDIT:

Serenifly:
Läuft den der Rest des Programms noch, oder ist es nur die Kommunikation die nicht funktioniert?

Vielleicht mal an einem Pin eine LED anstecken (muss ja nicht permanent verlötet sein) und diese blinken lassen.

Es handelt sich dabei um mein Sketch für die Tropfenbox, dort ist auch eine Abfolge hinterlegt wann ein Ventil Blitz Kamera ausgelöst werden soll wenn man die Taste Drückt, das macht es auch nicht.

Kann es sein dass der Controller keinen richtigen Reset macht?

Serenifly:
Kann es sein dass der Controller keinen richtigen Reset macht?

wie kann ich den Sehen? oder einleiten?

Ich wette dass lediglich deine Überprüfung nicht hinhaut.
Wie schon gesagt wurde: so einfach "vergisst" ein Controller sein, mal raufgespieltes, Programm definitiv nicht.

Also mach folgendes: bau in dein Programm einfach irgendein Blinkmuster ein für die auf dem Board befindliche LED-das geht, zu Testzwecken, allemal nebenbei. Und wenn die dann nach nem Tag immer noch das tut, was sie sollte, weisst du: dein Programm ist nach wie vor da. Falls du die LED nicht benutzen kannst/willst kannst du auch einmal pro Sekunde irgendwas zum PC schicken (ohne es anfordern zu müssen, also von alleine!).
Dann liegt der Fehler irgendwo in deinem seriellen Ein-oder Ausgabe-Kram. Da gibts allerdings sehr viele Möglichkeiten....

Ich würde vorschlagen, du machst einen Extra-Thread mit einem aussagekräftigen Threadtitel auf. Unter "Mega verliert Programm" schauen vermutlich mehr Leute rein, die ein solches Problem schon mal gesehen haben und vermutlich selber lösen konnten, als "Sketch per C# auf Arduino spielen".

Das Ziel sollte es sein, garnicht erst ein solches C# Programm zu schreiben, da das Problem hier nicht das Übertragen als solches ist. Ich für meinen Teil speicher alle funktionierden Sketche (vorwiegend AVR-GCC) immer auf der Dropbox ab. Auf externe Libary verzichte ich. Falls doch mal Libary nicht in den Standard Paketen vom Compiler dabei sind, so portiere ich die mit in mein Projektverzeichnis. Denn es wäre fatal, einen Sketch abzuspeichern und Jahre später zu merken, dass dieser nicht mehr IDE kompatibel ist, da sich einige Sachen geändert haben. (WProgram.h > Arduino.h).

Wer hat noch die Platine von dir im Einsatz oder hast du noch ein Referenzboard?

ich werde das mit der LED mal Testen und schauen was dann passiert.

habe leider kein Referenz Bord. =(

die Platinen haben im Einsatz:

  • gloob
  • Eisebaer
  • Helmuth
    und dann noch jemand kann aber den Unser Namen nicht mehr finden =(

EDIT: meinst du das es was mit den Sketch Zutun hat? oder mit der Platine?
denn das Bord vergisst auch ohne die zusätzliche Platine.
ich meine das war auch zu beginn bei dem Blinkenden LED Beispiel so.