Arduino Mega2560--> Processing2.0 über USB Daten senden zum PC

Hallo,
ich habe ein Problem. Und zwar möchte ich vom Arduino 16 zustände senden. Und mit Processing verarbeiten. Der arduino code sieht wie folgt aus:

Serial.write('H');
bitWrite(Daten,0,VS1);
bitWrite(Daten,1,VS2);
bitWrite(Daten,2,VS3);
bitWrite(Daten,3,VS4);
bitWrite(Daten,4,GAB1);
bitWrite(Daten,5,GAB2);
bitWrite(Daten,6,AHS);
bitWrite(Daten,7,L1);
//----------------
bitWrite(Daten,8,L2);
bitWrite(Daten,9,L3);
bitWrite(Daten,10,L4);
bitWrite(Daten,11,automatik);
bitWrite(Daten,12,autostoer);
bitWrite(Daten,13,GBE1);
bitWrite(Daten,14,GBE2);
bitWrite(Daten,15,1);
Serial.write((Daten));

Ich glaube das mein problem eher im Processingcode liegt, habe aber keine ideen mehr woran das liegt. Die ersten 4 (VS1,2,3,4) die funktionieren. Und was nicht funktioniert sind L1,2,3,4 und GBE1 und GBE2. die anderen kann ich mom nicht testen.
Hier einmal mein Processingcode:

        VS3=false;
        }
      else
        {
        VS3=true;
        }
        
//VS4
        bit=8;//bit nr 1000
        isSet=(val & bit);
        if (isSet ==0)
        {
        VS4=false;
        }
      else
        {
        VS4=true;
        }
//  GAB1 
        bit=16;//bit nr0001 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        GAB1=false;
        }
      else
        {
        GAB1=true;
        }
//  GAB2  
        bit=32;//bit nr0010 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        GAB2=false;
        }
      else
        {
        GAB2=true;
        }
//  AHS
        bit=64;//bit nr0100 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        AHS=false;
        }
      else
        {
        AHS=true;
        }
//  L1
        bit=128;//bit nr1000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        L1=false;
        }
      else
        {
        L1=true;
        }
  
        //----------------------------
       
//  L2
        bit=256;//256;//bit nr 0001 000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        L2=false;
        }
      else
        {
        L2=true;
        }
//  L3
        bit=512;//;//bit nr0010 0000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        L3=false;
        }
      else
        {
        L3=true;
        }
//  L4
        bit=1024;//;//bit nr 0100 0000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        L4=false;
        }
      else
        {
        L4=true;
        }
//  auto
        bit=2048;//;//bit nr 1000 0000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        auto=false;
        }
      else
        {
        auto=true;
        }
//  autostoer
        bit=4096;//;//bit nr 0001 0000 0000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        autostoer=false;
        }
      else
        {
        autostoer=true;
        }


//  GBE1
        bit=8192;//;//bit nr 0010 0000 0000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        GBE1=false;
        }
      else
        {
        GBE2=true;
        }
//  GBE2
        bit=16384;//;//bit nr 0010 0000 0000 0000
        isSet=(val & bit);
        if (isSet ==0)
        {
        GBE2=false;
        }
      else
        {
        GBE2=true;
        }
    
    }
  }  

myPort.clear();//bufferlöschen damit neue daten genommen werden
 .
.
//die verarbeitung der Daten habe ich aus übersichtlichkeits Gründen entfernt
.
.
}

int readArduinoInt()
{
  
  int val=0;
  val = myPort.read();
  //val = myPort.read()+val;
  return val;
}

vlt. kann mir jemand von euch mir da weiter helfen.
mfg rené

aha, Du glaubst also an Hellseher und daß eine unverhältnismäßig hohe Anzahl, gemessen zur Bevölkerung, hier im Forum aktiv sind. :wink: :wink:

Also prinzipiell verschickt Serial.Write nur BYTE (8-bit Zahlen) und keine INT (16 Bit-Zahlen) Du mußt eine INT in 2 Teile und diese getrennt verschicken.
Ich habe auch den Verdacht daß bitWrite() nur bei BYTE-Variablen funktionier (also nur 8-Bit Variablen).

arduino.cc/en/Reference/HighByte
arduino.cc/en/Reference/LowByte

Grüße Uwe

ich hoffe das es Hellseher gibt die mir helfen können;)

danke für den tipp, er ist einleuchtend.

Habe das mas so umgeschrieben wie ich es verstanden habe, aber leider funktioniert es nicht.
habe mir das so gedacht das ich einmal 8Bit sende (Daten) und die mit dem Zeichen H ankündige und mal sende ich DatenH und die kündige ich mit K an. Und im Processing unterscheide ich dan zichen H & K und fange dementsprechend die Daten ab, nur leider ohne erfolg.... bei den DatenH spielt der gelesene Wert verrückt mal 0 dan irgendwas um 1000 rum und springt laufend hin und her, aber halt immer die gleichen Werte. Muss ich da irgendwie noch Zeiten berücksichtigen die mit einlesen zutun habe?
Arduino code:

byte Daten;
byte DatenH;
bitWrite(Daten,0,VS1);
bitWrite(Daten,1,VS2);
bitWrite(Daten,2,VS3);
bitWrite(Daten,3,VS4);
bitWrite(Daten,4,GAB1);
bitWrite(Daten,5,GAB2);
bitWrite(Daten,6,AHS);
bitWrite(Daten,7,L1);
----------------

bitWrite(DatenH,8,L2);
bitWrite(DatenH,9,L3);
bitWrite(DatenH,10,L4);
bitWrite(DatenH,11,automatik);
bitWrite(DatenH,12,autostoer);
bitWrite(DatenH,13,GBE1);
bitWrite(DatenH,14,GBE2);
bitWrite(DatenH,15,1);
Serial.write('H');
Serial.write(lowByte(Daten));
Serial.write(highByte(Daten));
Serial.write('K');
Serial.write(lowByte(DatenH));
Serial.write(highByte(DatenH));
Serial.write(DatenH);

processing code:

int val=0;
int val1=0;
if (myPort.available()>15)
  {
    if(myPort.read()=='H')
    {
      val=readArduinoInt();
       
      println("H" + val);
}
}

if(myPort.read()=='K')
       delay(10);
    {
      if(myPort.available()>=8)
      {
      val1=readArduinoInt1(); 
      println("K" + val1);
}
}
//verarbeitung der daten weggelassen
int readArduinoInt()
{
  int val=0;
  val = myPort.read();
  val = myPort.read()*256+val;
  return val;
}

int readArduinoInt1()
{  
  int val1=0;
  val1 = myPort.read();
  val1 = myPort.read()*256+val1;
  return val1;
}

gruß René