befehle an Arduino senden

vor 2 years 27 weeks von twinflyer

Hi Leute......
ich hab es jetzt endlich gewagt einen LED-Cube zu bauen :)
funktioniert auch alles bestens, und der Würfel blinkt munter sein eingestelltes Programm runter.
Jetzt möchte ich ein 2. Programm für den Würfel schreiben, bei dem ich per PC befehle wie z.B. ein, ebene1, reihe2, led3, an den arduino senden und er schaltet dann die entsprechende LED ein/aus, je nach befehl.
Ich hatte mir das so vorgestellt:

Dem Arduino bringe ich bei welcher befehl was bewirken soll, so könnte ich z.B. auch ganze "Bilder" per PC ein und ausschalten.

Das alles wäre auch kein Problem wenn ich wüsste wie man daten an den arduino sendet, und der arduino diese dann ausließt.

Gibt es vllt. irgendwo ein Tutorial zu diesem Thema oder kann mir jemand kurz erklären wie ich soetwas anstelle.

Wäre wirklich dankbar dafür, sodass ich endlich sachen per PC beeinflusen kann :)

Gruss Max

Ähnliche Posts

9 Antworten auf “befehle an Arduino senden”


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
  1. Jan II sagt:

    Das ist nicht so schwierig: Du kannst dem Arduino über die serielle Schnittstelle (die in diesem Fall über die USB-Verbindung emuliert wird) Daten übergeben. Dazu musst du im Programm eine solche Verbindung per Serial.begin(geschwindigkeit) initialisieren, für geschwindigkeit einfach 9600 eingeben, das ist die Standard-Datenrate. Serial.print(befehl) sendet Daten an die Schnittstelle, Serial.read liest einen Byte von der Schnittstelle (d.h., der Arduino liest Daten - somit kannst du entsprechende Reaktionen darauf programmieren). Mehr dazu auch im Buch "Getting Started with Arduino" oder unter http://arduino.cc/en/Reference/Serial. Viel Erfolg.

    Login or register to post comments

  1. Daniel sagt:

    Ist zwar nicht für die Ardunio-Plattform, sondern für den Standard-GCC aber eventuell hilft es ja. Pastebin

    Login or register to post comments

  1. twinflyer sagt:

    danke euch 2 für die Hilfe.
    Leider funktioniert die Sache nicht wie sie sollte....soll heißen, es funktioniert einfach garnichts.
    Ich wollte in meinem LED-Cube versuchen jede LED einzen ein und auszuschalten.
    Das hat nicht funktioniert, desshalb habe ich versucht eine einzelne LED mit den Befehlen "1" und "0" zu schalten, leider hat auch das nicht funktioniert.

    Dürfen in den Befehlen auch Leerzeichen enthalten sein?

    Wie auch immer...ich werde auch nächste woche wenn ich wieder zuhause bin mal meinen Quellcode schicken, vllt. hilft das ja weiter.

    Gruss max

    Login or register to post comments

  1. Jan II sagt:

    Es gibt keine eingebauten Befehle! Die musst du schon selbst programmieren, nach dem Motto:

    val = Serial.read();

    if (val == soundso) {
    soundso;
    }

    (ohne gewähr)

    Login or register to post comments

  1. Benni sagt:

    Über die Arduino-IDE Konsole können Daten (Text/Zahlen) damit gesendet werden. Das Ende wird mit ";" markiert, so kann man das Empfangene weiterverwenden!

    Einmal bitteschön:

    char incomingByte;             
    char buffer[80];
    int count = 0;
     
     
    void setup() {
      Serial.begin(9600);
    }
     
    void clear_buffer(char *buffer, char length);
     
     
    void loop(){
      if (Serial.available () > 0)
        {
          incomingByte = Serial.read();
          // 10 = return
          // 13 = LineFeed
          // 59 = ;
          if (incomingByte == 10 || incomingByte == 59)
            {
    // Mach was mit buffer! val = atoi(buffer) etc.
    //          Serial.println(buffer);  //debug
              clear_buffer(buffer,80);
              count = 0;
            }
          else {
              buffer[count] = incomingByte;
              count++;
            }
        }
    }
     
    void clear_buffer(char *buffer, char length) {
      char ctr;
      for(ctr = 0; ctr <= (length-1); ctr++) {
        buffer[ctr] = 0;
      }
    }

    Login or register to post comments

  1. twinflyer sagt:

    Sorry.....ich war lange nichtmehr aktiv, ich hatte einfach keine Zeit!

    Also ich hab jetzt nochmal versucht eine einzelne LED über die Befehle 1 und 0 zu schalten. Die LED hängt an pin 13.

    ***********************************

    char val;
    int led = 13;

    void setup() {
    Serial.begin(9600);
    pinMode (led, OUTPUT);

    }

    void loop()
    {
    val = Serial.read();
    if (val == 1);
    {
    digitalWrite(led, HIGH);
    }
    if (val == 0);
    {
    digitalWrite(led, LOW);
    }
    }

    ***********************************

    So sieht das ganze Momentan aus, es lässt sich auch wunderbar hochladen, ohne Fehler.
    Das Problem: Die LED leutet dauerhaft, ich kann sie nicht schalten.
    wenn ich "0" eingebe und denen klicke passiert nichts, wenn ich "0;" eingebe passiert auch nichts.
    Was ist falsch ?
    muss ich etwas anderes eingeben und senden, oder stummt der Quellcode nicht ?

    Ich hoffe ich bekomme nocheinmal Hilfe.....wäre echt cool wenn ich sacher per PC steuern könnt :)

    Gruss Max

    [EDIT]
    Ich habe jetzt eunfach mal noch ein Serial.println befehl mit eingebracht um zu sehen was passiert.
    Der Serial Monitor zeigt jetzt immer:

    Die LED ist jetzt an!
    Die LED ist jetzt aus!
    die LED ist jetzt an!
    die LED ist jetzt aus!

    Und die LED Blinkt oO
    Irgendwas kann da ja nicht stimmen.

    Gruss Max

    [EDIT]
    So..ich hab jetzt das Bsp. von Benni benutz, und jetzt kann ich die LED schalten :D.
    Blöderweise schaltet sie sich nach seht kurzer Zeit selbstständig wieder aus, sodass es nur ein kurzes aufblitzen gibt, das wars dann.
    Ich kann eingeben was ich will, solang ein ";" am ende ist blinkt die LED auf.....also doch nich so richtiges Schalten.

    Login or register to post comments

  1. Peter Ikier sagt:

    Zunächst mal solltest du überprüfen, ob auf der Seriellen überhaupt ein Zeichen für dich bereitliegt:

    if (Serial.available() > 0) {
      // ...
    }

    Nur wenn das der Fall ist liefert Serial.read() einen vernünftigen Wert.
    Dann solltest du die Werte nicht als Zahlen betrachten, sondern als Bytes - und diese Bytes wiederum als Zeichen.

    Dann lautet deine Abfrage z.B so:

    int inByte = Serial.read();
    switch (inByte)
    {
      case '0': // hier wird das gelesene Byte mit dem Zeichen '0' verglichen, nicht mit der Zahl 0
        digitalWrite(led, LOW);
      break;
      case '1':
        digitalWrite(led, HIGH); 
      break;
      default:
        // mach gar nichts
      break;
    }

    Die Case-Anweisung kannst du jetzt um weitere Zeichen ergänzen, z.B. um 'x' um die LED umzuschalten ((zu toggeln).

    Gruß
    pi

    Login or register to post comments

  1. Peter Ikier sagt:

    Zunächst mal solltest du überprüfen, ob auf der Seriellen überhaupt ein Zeichen für dich bereitliegt:

    if (Serial.available() > 0) {
      // ...
    }

    Nur wenn das der Fall ist liefert Serial.read() einen vernünftigen Wert.
    Dann solltest du die Werte nicht als Zahlen betrachten, sondern als Bytes - und diese Bytes wiederum als Zeichen.

    Dann lautet deine Abfrage z.B so:

    int inByte = Serial.read();
    switch (inByte)
    {
      case '0': // hier wird das gelesene Byte mit dem Zeichen '0' verglichen, nicht mit der Zahl 0
        digitalWrite(led, LOW);
      break;
      case '1':
        digitalWrite(led, HIGH); 
      break;
      default:
        // mach gar nichts
      break;
    }

    Die Case-Anweisung kannst du jetzt um weitere Zeichen ergänzen, z.B. um 'x' um die LED umzuschalten ((zu toggeln).

    Gruß
    pi

    Login or register to post comments

  1. twinflyer sagt:

    juhuuuuuuuuuuu vielen Dank für deine Hilfe, jetzt funktioniert alles so wie ich es wollte, und das experimentieren kann beginnen......aber auch erst morgen ;)

    Gute Nacht und Adiö.....

    Max

    Login or register to post comments