Funktion - Wie gestalten ?

Hallo zusammen,

ich hab gerade das sprichwörtliche Brett vor dem Kopf. Ich lese in meiner anwendung einen Encoder aus (mit der nachstehenden Funktion

  {
   encoder1_n = digitalRead(encoder1PinA);
   if ((encoder1PinALast == LOW) && (encoder1_n == HIGH)) {
     if (digitalRead(encoder1PinB) == LOW) {
       encoder1Pos-=5;
       encoder1Pos= constrain(encoder1Pos,60,1000);
     } else {
       encoder1Pos+=5;
       encoder1Pos= constrain(encoder1Pos,60,1000);
     }
     //Serial.print (encoder1Pos);
     //Serial.print ("/");
     CH1_Disp_Refresh();
     Encoder1_send();
   } 
   encoder1PinALast = encoder1_n;

Die ausgelesenen Daten werden in einer 7 Segment Anzeige dargestellt und sollen per Bluetooth übertragen werden. Die Herausforderung sehe ich darin keine Datenflut zu erzeugen und die Daten schnell (nahezu Echtzeit) über Bluetooth zu schaufeln. Deshalb möchte ich eine Funktion haben, welche nur versendet, wenn der Encoder nicht mehr gedreht wird und die Daten anders sind als die zuletzt verwendeten.

Ich habe mir dazu folgende Funktion einfallen lassen

void Encoder1_send()
{
  String Value;
  if (encoder1Pos == encoder1Pos & encoder1Pos != CH1_Encoder1Pos_last)
 {
   Value = ";CH1_Pow_Value="; 
   Value = Value + encoder1Pos; 
   Value = Value + "|";
   blueToothSerial.print(Value);
   CH1_Encoder1Pos_last = encoder1Pos;
 } 
}

Ich bin mir aber nicht sicher,ob das wirklich gut ist oder ob Daten verloren gehen.

Was haltet ihr davon? Habt ihr eine bessere Idee?

Das geht garantiert schief. Wenn der Encoder zu lange gedreht wird, dann läuft Dir der Speicher über. Wenn der Encoder so lange gedreht wird, daß der String länger ist als der Ausgabepuffer und dann während des Sendevorgangs gedreht wird, dann verlierst Du Schritte.

Besser wäre in einem Interrupt die absolute Position zu berechnen und alle 10ms oder 100ms die Position - falls sie sich geändert hat - zu senden.

Danke, aber läuft tatsache so und sogar in Echtzeit. Mein Problem heißt momentan Bluetooth reconnect.

Dazu gleich noch ein weiterer Thred.