Live-Daten von Computer

Hallo miteinander!

Ich bastle etwas mit meinem Arduino 2009 herum und da kam mir die Idee, mit auf dem Computer liegenden Daten zu arbeiten. Um was es konkret geht, ist nicht allzu wichtig. Sagen wir vereinfacht, in einer .txt Datei auf dem Computer liegt mit 1 und 0 codiert der Rhytmus, in welchem eine LED blinken soll. :slight_smile:

Der Arduino ist mit USB zum Computer verbunden. Mir fehlt nun etwas der Ansatz, wie ich mit dem Code auf den Computer zugreifen kann. Darum weiss ich auch nicht so recht nach was googlen :blush:

Danke!

Zugreifen wird nicht funktionieren, Du musst ein Programm auf dem Computer laufen haben, dass die Daten an den Arduino "füttert".

Oder Du packst die Datei auf ein SD-Shield welches Du mit dem Arduino verbindest und greifst direkt zu.

Vielen Dank für deine Antwort.

Da diese Datei vom Computer verändert wird ist das SD-Shield leider keine Option. In diesem Fall lautet mein gesuchtes Stichwort GUI so wie ich das sehe? :slight_smile: Mal schauen was es da schon so gibt. Danke!

Dein Stichwort "GUI" ist so weit gefasst, dass man da keine allgemeingültige Aussage treffen kann. :wink: Fakt ist, dass du die Daten vom Rechner übergeben musst, somit fällt also auch eine PC-seitige Programmierung an. Ob das als grafische Benutzeroberfläche gestaltet ist oder als automatisierter Prozess ohne Benutzerschnittstelle hängt einfach vom Anwendungsfall ab. Und da zeihst du es ja vor, dich auszuschweigen.

Er schweigt, weil er mit seiner Idee die Welt verändern wird :wink:

GUI bedeutet graphical user interface und ist bestimmt nicht der Begriff der für die Übermittlung von Daten vom PC zum Arduino Verwendung findet.

Nachdem man nur seriell mit dem Arduino kommunizieren kann, benötigst du eine Möglichkeit vom Hostsystem Daten an die Schnittstelle des Arduinos zu übemitteln. Für das von dir verwendete Beispiel, den Inhalt einer Datei an den Arduino zu senden, reicht ein Aufruf von z.B. "type meinetextdatei.txt > COM3" (Wenn der Arduino auf z.B. COM3 eingestellt ist). Das kann man unter der Eingabeaufforderung machen, oder einfach per Start->Ausführen (Windowstaste-r). Oder als Batchdatei (.bat, .cmd etc) oder als Scheduled Task oder oder oder. Unter Linux und am mac verhält es sich ähnlich, nur dass dort "cat" oder "tail" statt type benutzt wird und die schnittstelle z.B. /dev/ttys0 heißt.

Ich weiß jetzt nicht welche Daten der PC ändern muß, aber es ist auch möglich einen Internetserver auf dem PC laufen zu haben (auch zb PHP mit Datenbank) und vom Arduino die Daten übers Netzwerk und Intranet zu holen.

Ansonsten brauchst Du ein Programm das die Daten (auf anfrage von Arduino) über die serielle Schnittstelle an den Arduino schickt.

Grüße Uwe

Ich weiß jetzt nicht welche Daten der PC ändern muß, aber es ist auch möglich einen Internetserver auf dem PC laufen zu haben (auch zb PHP mit Datenbank) und vom Arduino die Daten übers Netzwerk und Intranet zu holen.

Aber nur wenn er auch ein Ethernetshield etc o.Ä. hat.

Hallo zusammen, danke für eure Antworten.

Dass ein GUI tatsächlich graphisch sein muss, wusste ich nicht. Ich dachte, das wäre sozusagen das Interface. Mein "Projekt" habe ich nur "verschwiegen" weil ich, denke ich es nur Verwirrung stiften würde. Es handelt sich um eine Spielerei im Haushalt.
Auf dem Computer habe ich eine Software, welche RSS-Feeds ausliest und dann daraus (so habe ich mir das vorgestellt) Zahlenreihen aus 0 und 1 generiert. Der Arduino soll dann daraus lesen dass er LED 1 anschalten soll, LED 2 aus etc. Da diese Software aber nicht immer läuft/laufen soll, habe ich mir gedacht, dass sie eben den aktuellen "Stand" für den Arduino zwischenspeichert, bis sie wieder gestartet wird. Und dieser aktuelle Stand soll eben ausgelesen werden.

Dass das so einfach mit der Kommunikation am serial port geht, habe ich mir nicht gedacht. Ich werde mir einmal die Möglichkeit mit der Batch-Datei anschauen.

Vielen Dank

Warum speicherst Du nicht im Arduino zwischen? Der muss ja anscheinend sowieso immer laufen?

Hallo,

Ich bin hier zwar noch ganz frisch dabei, versuche mich aber mal einzubringen :wink:

Aber nur wenn er auch ein Ethernetshield etc o.Ä. hat.

Könnte man nicht auch auf dem PC ein Programm schreiben, welches auf dem COM-PORT auf
eine serielle Anfrage wartet, die vom Arduino zu gewünschter Zeit augegeben wird und dann wird die gewünschte Textdatei übertragen ?

mfg

Könnte man machen. :slight_smile:

Warum speicherst Du nicht im Arduino zwischen? Der muss ja anscheinend sowieso immer laufen?

Notfalls im EEProm des ATmega falls die Daten auch nach einem Reset/ Spannungsausfall vorhanden sein sollen.
@Knauf
So wie ich GoingForGold verstanden habe, steuert er Ausgänge des Arduino über ein Programm und die Ausgänge sollen auch ohne PC ihren Zustand beibehalten. Er wollte das Zustandszwischenspeichern auf dem PC realisieren, aber dies ist ohne Probleme auf dem Arduino möglich.

Grüße Uwe

Hui, so viele Ideen und Tipps, danke! :slight_smile:

Wie ich es jetzt genau realisiere, weiss ich noch nicht. Ich muss jetzt als erstes einmal rausfinden, was beim Arduino ankommt, sprich wie ich denn weiter verfahre wenn ich "type date.txt > COM6" ausführe :wink:

Danke!

Edit: ja, Ethernet ist auch noch eine Idee. Aber ich glaube, das wird Schritt 2 :wink: Habe auch noch kein Shield.

du kannst auch echo "010101110000101 oder irgenteinanderer text" > COM6 machen. Das > COM6 leitet lediglich die Ausgabe des vorangestellten Befehls auf den angegebenen Port um. Da der bei Windows bereits auf 8N1 eingestellt ist, musst du nur darauf achten, dass kein anderes Porgramm (z.B. der SerialMonitor in der Arduino IDE) auf den Port ugreift, da er sonst gesperrt ist.

Die Bibliothek FIRMATA hast Du Dir schon angeschaut?

Grüße Uwe

schön, dass du es ansprichst - kannst du mir erklären, was man damit macht, was man nicht mit bordmittel auch machen kann?

Ich missbrauche mal diesen Thread für eine zwar zugehörige Frage aber eben andere Seite :wink:

Die einfache Variante in der Eingabeaufforderung werde ich noch testen, schlussendlich brauche ch aber eh ein Skript. Ich wollte jetzt in VBS ein Code schreiben, welcher einfach eine Variable an den COM6 übermittelt. So wie ich das sehe, gibts dazu zwei Möglichkeiten. Entweder verwende ich die MSCommLib oder nimm das TextFile API. MSCommLib gibt bei mir die Meldung zurück, dass keine Lizenz vorhanden ist. Nunja, dann sei das halt so. Wenn ich aber, wie in vielen Tutorials beschrieben Folgendes benutzen will:

Set fso = CreateObject("Scripting.FileSystemObject")
Set com = fso.OpenTextFile("COM6:9600,N,8,1", 1)

Dann bekomme ich ein "Datei nicht gefunden" zurück. Ich habe bis jetzt auch bei Google nichts dazu gefunden. Wo könnte das Problem begraben sein?

Könnte sein dass der Port bei Dir nicht Com6 heißt. Schau mal im Gerätemanager nach, bei eingestecktem und eingeschaltetem Arduino.

Hi Joghurt

Vielen Dank für diesen Tipp, ich hatte ihn tatsächlich nicht mehr eingesteckt. Jetzt bekomme ich allerdings einen anderen Fehler "ungültiger Dateimodus". Mal schauen was das heisst..:smiley:

So, perfekt! Hab das Problem gefunden und ich kann nun über ein .vbs Skript eine LED an- und abschalten.

Jetzt bin ich aber kurz an ein anderes Problem gestossen, und ich bin mir sicher, ich übersehe etwas, darum kein neues Thema wert:

void setup() {
  int LED = 10;
  pinMode(LED,OUTPUT);
}
void loop() {
  digitalWrite(LED,HIGH);
}

Auf das bekomme ich dann "error: 'LED' was not declared in this scope". Wenn ich die Deklaration im loop wiederhole, klappt es. Das will ich aber nicht (ist ein vereinfachtes Beispiel), da die Variable einen einmal veränderten Wert beibehalten soll.

Wo liegt mein Fehler? Danke!