INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Lesen des seriellen Datenstroms
25.10.2014, 23:28
Beitrag #1
Lesen des seriellen Datenstroms
Hallo. In einem Teilprojekt sende ich einige Daten von einem Programm über den seriellen Port an den Arduino, wo diese Daten wiederum ausgewertet werden sollen. Hier ist Beispielcode, was die seriellen Daten sendet:
Code:
_CommSendByte(Asc("G"))
_CommSendByte(GUICtrlRead($slGreen))

Der Arduinocode, der diese Daten auswertet, ist der folgende:
Code:
//rgb_led

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
#include <Adafruit_NeoPixel.h>

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN_vorne            9


// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      6

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels_vorne = Adafruit_NeoPixel(NUMPIXELS, PIN_vorne, NEO_GRB + NEO_KHZ800);

int incomingByte = 0;   // for incoming serial data
int rot = 0;
int gruen = 0;
int blau = 0;

//------------------------------------------------------------------------------------------------
void setup() { //Beginn des Setups
  pixels_vorne.begin(); // This initializes the NeoPixel library.

  //pinMode(rx_signal_pin_throttle, INPUT);
  Serial.begin(9600);    // initalisierung der seriellen Schnittstelle  
}
//------------------------------------------------------------------------------------------------

void loop() {    //hauptschleife
  if (Serial.available() > 0) {
          // read the incoming byte:
    incomingByte = Serial.read();
   }

   pixels_vorne.setPixelColor(2, pixels_vorne.Color(rot, gruen, blau)); // Hier müsste die Farbe gesetzt werden, die per Serial.read() (dem gesendeten String) gesendet wird.
   pixels_vorne.show(); // This sends the updated pixel color to the hardware.
  
  
  if (Serial.available() > 0) { // werden Daten empfangen?
    switch(Serial.read()) { // Serial auslesen + Switch  
      case 'R': // wenn R dann
        while (Serial.available() < 1) ;
          rot = incomingByte;
        break;
      case 'G': // wenn R dann
        while (Serial.available() < 1) ;
          gruen = incomingByte;
        break;
      case 'B': // wenn R dann
        while (Serial.available() < 1) ;
          blau = incomingByte;
        break;
        
      
    }
}
}
Die Funktion dieses Skriptes ist die folgende: Das erste Skript sendet RGB-Werte über den seriellen Port an den Arduino. Bevor der Wert (0 - 255) gesendet wird, wird z. B. "R" für die Farbe Rot vorangeschickt. Das Arduinoskript liest den seriellen Strom und weist einer Variable dann diesen Wert zu. Ich habe das Skript fast so wie ich es oben eingefügt habe, im Internet gefunden und habe es für meinen Zweck so modiziziert, wie ich es brauche. Es funktioniert, wie es soll. Allerdings kann ich nicht nachvollziehen, wie. Wie kommen die Daten, gesendet aus dem ersten Skript, über den seriellen Port beim Arduino an? Wie werden die seriellen Daten gelesen, Byte für Byte? Wenn ich zwei Byte sende und einen Hauptschleifendurchgang im Sketch habe, wird dann bei einem serial.read() an verschiedenen Stellen immer der komplette serielle Strom, also in meinem Fall, zwei Byte gelesen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  wie Parameter der seriellen Schnittstelle anpassen? avoid 6 484 29.04.2016 16:44
Letzter Beitrag: avoid
  Alles nur im seriellen Monitor, nicht LCD? malsehen 23 1.322 26.02.2016 19:18
Letzter Beitrag: malsehen
  Ins eeprom schreiben/lesen anwo 10 1.791 07.02.2016 20:05
Letzter Beitrag: rpt007
  Pro Mini ADC Kanal 8 lesen Bitklopfer 8 620 30.12.2015 20:27
Letzter Beitrag: Bitklopfer
  Variablen Typ double, char, long aus ext. EEPROM lesen SternGucker 8 1.538 02.04.2015 08:10
Letzter Beitrag: SternGucker
  Daten von File auf SD Card (formatiert) schreiben+lesen u.a.m. HaWe 19 3.664 16.02.2015 19:50
Letzter Beitrag: HaWe
  Serielle Schnittstelle lesen - merkwürdiges Problem Waishon 6 1.781 16.12.2014 08:47
Letzter Beitrag: Corvus
  Flash: schnelles Speichern und Lesen "großer" 1-2-dim Arrays und Structures? HaWe 37 5.304 30.11.2014 18:40
Letzter Beitrag: HaWe
  Daten Lesen mit Serial.read() Norbie 0 1.079 29.09.2014 16:00
Letzter Beitrag: Norbie
  I2C Bytes lesen Master Reader/Slave Sender andre35 6 4.176 20.07.2014 14:42
Letzter Beitrag: andre35

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste