Serial-Daten aufspalten


hallo zusammen,

wie in meinem letzten thread schon gesagt, werde ich mich jetzt auf die entwicklung von hard- und software konzentrieren.
da die hardware ja schon halbwegs abgeschlossen ist (zumindest für's erste) und ich jetzt auf die platinen warte, hab ich mich schon mal den code gesetzt um die einzelnen "bestandteile" zu lernen.

beim serial bin ich da schon auf ein problem gestoßen:

ich hab ja vor, einige daten vom steuergerät (master) auf die terminals (slave) zu lasen. ich such gerade nach dem richtigen weg, diese daten zu schicken.
mein aktueller versuchsaufbau:
arduino uno (hatte ganz vergessen, dass ich den mal gekauft hab *hust*), lcd-display, isp-programmer und usb-konverter.
Über den isp-programmier hab ich die stromversorgung und programmier den uno. diesem ist auch der lcd angeschlossen. den usb-konverter benutze ich, um vom pc (arduino ide) über den serial monitor daten den uno zu schicken, der die erhaltenen daten auf dem display anzeigen soll.

um die geplante struktur des datenversands mal kurz zu erläutern:
es geht nur um zahlen. diese sollen in unterschiedlich großen blöcken verschickt werden, ja nach info. diese blöcke haben zwischen 1 und 3 ziffern (mit einer ausnahme: ein block soll "--xxx" sein (xxx für jeweils eine ziffer)).
ich dachte, die blöcke über trennzeichen anzeigen zu können (z. b.: --xxx;xx;xxx;xx;xxx;xx;xx;xxx;xx;xx;xxx;xx;xx;xxx[...]), da jeder block entweder ein befehl oder daten sind. es muss aber nicht dieses muster sein. ebenso gut könnte es auch: --xxx;xx sein - je nach befehl.

ich bin bisher noch nicht dahinter gekommen, wie ich die geschickten daten aufsplitten kann.

für den versuch hatte ich folgenden sketchansatz:

code: [select]
#include <wire.h>
#include <liquidcrystal_i2c.h>

liquidcrystal_i2c lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, positive);

char befehl[50];
char stopp_zeichen[] = {";"};
int new_data = 0;

void setup()
{
  serial.begin(9600);
 
    lcd.begin(16,2);
  (int = 0; i< 2; i++)
  {
    lcd.backlight();
    delay(500);
    lcd.nobacklight();
    delay(500);
  }
  lcd.backlight();
 
  lcd.setcursor(0,0);
  lcd.print("test");
  delay(2500);
  lcd.clear();
  lcd.setcursor(0,0);
}

void loop()
{
  if (serial.available() > 0)
  {
   
    serial.readbytesuntil(stopp_zeichen[0], befehl, 50);
    new_data = 1;
  }
  if (new_data == 1)
  {
    lcd.clear();
    lcd.setcursor(0,0);
    lcd.print(befehl);
    new_data = 0;
  }
}


hab ich jetzt in serial monitor "hallo;bye  " eingegeben, wurde zuerst "hallo" angezeigt und eine sekunde "bye". meinem verständnis durch diese seite sollte er aber doch nur "hallo" einlesen und den rest verschmeißen, oder in nen anderen teil von der variable befehl speichern?

ich hoffe, ihr könnt mir hier ein wenig weiter helfen.

vielen dank schon mal.

lg

fipsi

quote
hab ich jetzt in serial monitor "hallo;bye  " eingegeben, wurde zuerst "hallo" angezeigt und eine sekunde "bye".

ist ja auch richtig so, hallo ist ein befehlt und bye ist ein befehl.
alle befehle die du eingibst, werden angezeigt. die befehle die nicht sein sollen, werden ja auch nicht eingegeben, logisch :d


Arduino Forum > International > Deutsch (Moderator: uwefed) > Serial-Daten aufspalten


arduino

Comments

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support