WIe liest man Bytestreams an Serial ein

ES simuliert ein bestehendes Protokoll:

Eingehende Datenpakete lesen und falls unwichtig zurücksenden ,

Regelmässig den Potiwert senden ,

Identität bzw. noch angeseckt bestätigen ,

Poti ändert sich, sofort senden.

Sich nicht durch die Rückmeldung aufhängen ( Dauerschleife) ( schwierigste Nuss für mich)

Aber ich hab soweit hingebogen, dass es läuft und in den Adriuno rein passt.

Danke nochmals für die bisherige Hilfe!!

Letztes Problem: wie sich byte 7 errechent, siehe anders Posting .

int potipin = (A0);
byte lastpotiwert;
byte potiwert;
int vpoti; 
unsigned long currenttime;
unsigned long lasttime;
unsigned long lasttimepoti;
byte SB[30];
byte SBL; 
byte lastSBL;
byte wert[8] = { 49,5,1,1};
byte start[4] ={ 49,5,1,1};



void setup() {
pinMode( potipin, INPUT);  
Serial.begin(57600);}

void loop() {

currenttime = millis();
vpoti = analogRead(A0);
potiwert = vpoti/4;
byte i = potiwert;
  
if (potiwert != lastpotiwert){
                     if((currenttime -lasttimepoti)  > 50){
                     Serial.write(start, 4);
                     Serial.write(value[i], 4);    
                     for ( int j=4; j<8; j++){
                     wert[j]= value[i][j-4];}
                     lasttimepoti= currenttime;}
                     lastpotiwert = potiwert;}
          
if (( currenttime -lasttime ) > 500){
                       Serial.write(start, 4);
                       Serial.write(value[i], 4);    
                       for ( int j=4; j<8; j++){
                       wert[j]= value[i][j-4];}             
                       lasttime = currenttime ;} 
             
     
if (read_serial( )){
                     if (  SB[0]==49  &&  SB[1]==1   &&  SB[2]==0 &&  SB[3]==0 &&  SB[4]==0 &&  SB[5]==1 &&  SB[6]==0 ){
                         for ( int k = 0; k <(SBL-2); k++) {
                         Serial.write(SB[k]);}
                         Serial.write(5);
                         Serial.write(13);
                         Serial.write(237); //  237MW   243TT nicht fix 
                         Serial.write(50);}  
                                
                     else {int vgl = memcmp(wert, SB, 8);
                         if ( vgl != 0 && (SBL != lastSBL) ){
                         pars_serial();
                         lastSBL = SBL; }
                          } 


          }                                         
  
 }


// True, wenn das Endzeichen erkannt wurde.
bool read_serial() {
  static byte index;
  while (Serial.available() ) {
    byte c = Serial.read();
    if (c == 49) {   // das Starzeichen
      index = 0;
    }
    SB[index] = c;
    index++;
    SBL = index;
    if (c == 50 ) 
   { return true;}
  }
  return false;   // Endzeichen noch nicht erreicht
}






// Array bis zum Endzeichen  ausgeben
void pars_serial() {
  for (int i = 0; i <=SBL; i++) {
    Serial.write(SB[i]);
       if (SB[i] == 50) {
        return;
    }
  }
}