Show Posts
Pages: [1]
1  International / Deutsch / Re: Serial.read() Array mit string füllen und in int umwandeln on: November 20, 2012, 05:17:42 am
Danke !

Funktioniert fürs erste :-)
gruss
vobie
2  International / Deutsch / Re: Serial.read() Array mit string füllen und in int umwandeln on: November 20, 2012, 03:44:37 am
Hallo,

also wenn ich den Serial Monitor auf Neue Zeile(NL) einstelle funktioniert das mit
Code:
if(buffer[bindex] == ',' || buffer[bindex] == '\n'{
Wenn ich jetzt in der shell (Linux)
Code:
echo "4660,1,17\n" > /dev/ttyUSB0
absetze funktioniert das auch :-)
Nun aber habe ich ein neues Problem, meine testfunktion wird 3 mal ausgeführt,
immer wenn dem Array ein neues Element zugewiesen wird.
Eingabe:   4660,1,17
Ausgabe:  4660
              0
              0
              4660
              1
              0
              4660
              1
              17

Die Funktion darf aber nur einmal innerhalb einer Eingabe ausgeführt werden. Also Funktion erst ausführen wenn das Array die Werte 4660
1
17
komplett hat. Danach Array für die nächste Eingabe wieder auf 0 setzen.
Code:
char buffer[10];
int data[3];
int bindex,dindex=0;

void test(int wert0, int wert1, int wert2) {
Serial.println(wert0);
        Serial.println(wert1);
        Serial.println(wert2);
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  while(Serial.available() >0) {
    //aktuelles Zeichen einlesen
    buffer[bindex] = Serial.read();
    //Trenner oder Zeilenende gefunden
    if(buffer[bindex] == ',' || buffer[bindex] == '\n') {
      //Null-Terminierung
      buffer[bindex] = 0;
      //Umwandeln in eine Zahl
      data[dindex] = atoi(buffer);
     
      test(data[0], data[1], data[2]); // testfunktion
     
      //Datenindex rotieren
      dindex = ++dindex % 3;
     
      //Buffer Index zurücksetzen
      bindex = 0;
    } else {
      bindex++;
    }
  } 
}
Wo muss die Funktion "test" hin, damit sie nur einmal ausgeführt wird ?

gruss
vobie
3  International / Deutsch / Re: Serial.read() Array mit string füllen und in int umwandeln on: November 19, 2012, 05:06:19 pm
Hi,

mit
Code:
if(buffer[bindex] == ',' || buffer[bindex] == '\n' || !Serial.available()) {
kommt bei Eingabe von 4660,1,17 leider
Code:
data at index 0 = 0
data at index 1 = 660
data at index 2 = 1
data at index 0 = 1
raus. :-(

gruß
vobie
4  International / Deutsch / Re: Serial.read() Array mit string füllen und in int umwandeln on: November 19, 2012, 04:40:12 pm
vielen Dank, mit dem Komma am Ende kann ich im Augenblick leben.
Auf jeden Fall habe ich erstmal eine Grundlage :-)
gruß
vobie
5  International / Deutsch / Re: Serial.read() Array mit string füllen und in int umwandeln on: November 19, 2012, 10:45:18 am
Das ging ja schnell. :-)

Wichtig ist das die Werte die der Funktion übergeben werden sollen vom Typ Int sind, wann die Umwandlung gemacht wird ist egal.
 
Der Code ist schon auf dem richtigen Weg, aber irgendwie klappt das mit dem 3 Element und dem zurücksetzen nach der ersten Eingabe nicht so richtig.

Hier mal die Ausgabe aus dem Serial Monitor:

1Eingabe: 4660,1,17
 Ausgabe: data at index 0 = 4660
              data at index 1 = 1

2Eingabe: 4660,1,0
 Ausgabe: data at index 2 = -21948
              data at index 0 = 1

gruß
vobie
 
6  International / Deutsch / Serial.read() Array mit string füllen und in int umwandeln on: November 19, 2012, 09:53:34 am
Hallo.

Ich hätte da ein kleines Problem das vermutlich keines für einen „C“ kundigen ist.

Ein Programm sendet z.B. 1234,5,10 (wobei die Länge der Zahlen variabel ist.) seriell an den Arduino.
Nun soll 1234,5,10 mit Serial.read() so in ein Array (mit maximal 66 Elemente Array[66]) eingelesen werden das ich 3 Int Elemente in dem Array habe. Der Trenner soll das Komma sein.
Array[0] = 1234
Array[1] = 5
Array[2] = 10

Diese 3 Elemente werden dann einer Funktion übergeben
z.B. funktion(Array[0],  Array[1],  Array[2]);

Also:
String 1234,5,10 in Array einlesen wobei nach jedem Komma der Index um eine Stelle hochgezählt wird und somit 3 Elemente im Array[0..2] entstehen.

Die String Elemente in Int Werte umwandeln um diese der funktion(Array[0],  Array[1],  Array[2]); zu übergeben.

Ich habe keinen Schimmer wie ich das machen soll, bin noch totaler C Anfänger  smiley-red
bin für jeden Hinweis dankbar.
Gruß
vobie
7  Forum 2005-2010 (read only) / Deutsch / Re: Parameter übergeben ? on: June 10, 2010, 06:59:10 am
Danke

Probiere ich heute Abend gleich mal aus !

vobie
8  Forum 2005-2010 (read only) / Deutsch / Re: Parameter übergeben ? on: June 10, 2010, 05:45:01 am
auf  "} else if ('a' <= c && c <='z') {  // ?" und " case 'f': " würde ich auch verzichten, und gleich nach der Parameter Eingabe die Funktion test ausführen.
Aber wie mach ich das ?
Kommentiere ich das aus funktioniert  der code nicht.

Was macht eigentlich die Multiplikation mit 256 in test(256 * eingabe[0], eingabe[1], wert); ?

"... Damit können nur Werte bis maximal "9" erreicht werden! Besser das nur ein Mal in der "init" machen und ansonsten zurücksetzen, wenn ein Wert verarbeitet wird..."

Bitte etwas genauer für einen C Neuling

danke
vobie






9  Forum 2005-2010 (read only) / Deutsch / Re: Parameter übergeben ? on: June 10, 2010, 05:05:44 am
hi,

so, ich habe da was gefunden verstehe es aber noch nicht 100% was da abläuft. (bin immer noch "C" anfänger !).
Ich habe den code auch ausprobiert, funktioniert soweit
Aber ich würde ihn auch gerne verstehen.
Vielleicht könnte jemand die // ? auflösen.

Code
...
static byte wert, eingabe[25], i; // variable und array initialisieren
....
static void test(word var1, byte var2, byte cmd) { // Funktion test definieren
....
}

// Input Funktion
static void Input (char c) {  //Funktion Input
    if ('0' <= c && c <= '9')      // Zeichen auswerten ?
        wert = 10 * wert + c - '0';   // ?
    else if (c == ',') {          // Wenn Zeichen "," dann... ?
        if (i < sizeof eingabe)    // ?
            eingabe[i++] = wert;   // ?
        wert = 0;
    } else if ('a' <= c && c <='z') {  // Zeichen auswerten ?
        switch (c) {   // Auswahl
            ...................
            ...................
            case 'f':                // Wenn f dann Funktion test
                test(256 * eingabe[0], eingabe[1], wert); // ?
                break;
            .................
            .................
}
        wert = i = 0;  // ?
        memset(eingabe, 0, sizeof eingabe); //?

...
...
void loop() {
    if (Serial.available())
        Input(Serial.read()); // Zeichen von usb an die Input funktion
....
....

danke
vobie
10  Forum 2005-2010 (read only) / Deutsch / Re: Parameter übergeben ? on: June 08, 2010, 09:53:54 am
hi,

Nein, die Parameter fangen nicht immer mit LA.. an.
Die Anzahl der Zeichen ist auf Maximal 40 beschränkt.
Darin sind auch das Trennzeichen ","  und "\0" enthalten.

Ich denke das es mit einem Array das an eine Funktion übergeben wird funktionieren sollte.
Bin aber noch am suchen im I-Net.

vobie
11  Forum 2005-2010 (read only) / Deutsch / Parameter übergeben ? on: June 06, 2010, 06:14:49 pm
Hi,
ich bin absoluter Neuling was den Arduino angeht.
Ist ja ein tolles Teil smiley

Nun mal zu meinem Problem.
Ich möchte dem Arduino Parameter über usb übergeben.
Mit einzelnen Zeichen klappt das ja wunderbar mit serial.read().

Aber wie kann ich folgende Parameter übergeben.
Die Syntax ist:
LA22, 123, 17, 12

Die Parameter sollen nach dem einlesen den entsprechenden
Variablen zugewiesen werden.
LA=LA22
HC=123
AD=17
CM=12

Ich fange auch gerade erst an "c" zu lernen, also bitte habt
etwas Nachsicht.

Danke
vobie

Pages: [1]