Wie kann ich diesen Sketch Besser verarbeiten

Hallo zusammen,

Ich habe einen Sketch und weis genau ich könnte diesen mit Variablen handeln aber ich komm nicht drauf wie :)...

    radio.stopListening();                                    // First, stop listening so we can talk.
   
    bool up = digitalRead(6);  // store current state of pin 12
    bool down = digitalRead(7);  // store current state of pin 12
    bool fast = digitalRead(8);  // store current state of pin 12
   
    if (up == LOW){
      if (!radio.write( "1111" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }
    }
    else if(down == LOW){
      if (!radio.write( "1234" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }
    }
    else if(fast == LOW){
      if (!radio.write( "3333" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }
    }
    else{
      if (!radio.write( "0000" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }
    }

Und zwar kann ich den Befehl:

      if (!radio.write( "0000" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }

sicherlich nur unter die Abfrage schreiben und eine Variable setzen

Worum geht es? Ich sehe kein Entprellen von den Tastern. Desweiteren bietet *.write nur die Möglichkeit ein Byte/Char zu versenden. *.print wäre das was du brauchst.

Bitte alle Informationen nachreichen und vorallem um welche Lib es sich handelt.

Sorry es geht um den NRF24L01+ Und ich je nach dem welcher eingang kommt soll eine Zeichenfolge gesendet werden

Nun habe ich ja das senden in jedem IF block aber geht doch sicher das ich in den IF blöcken eine Variable setze und dann am schluss einfach die Variable sende

z.b.

    radio.stopListening();                                    // First, stop listening so we can talk.
   
    bool up = digitalRead(6);  // store current state of pin 12
    bool down = digitalRead(7);  // store current state of pin 12
    bool fast = digitalRead(8);  // store current state of pin 12
   
    if (up == LOW){
   sendstring = "0000"
    }
    else if(down == LOW){
       sendstring = "1111"
    }
    else if(fast == LOW){
      sendstring = "2222"
    }
    else{
      if (!radio.write( "3333" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }
    }     
      if (!radio.write( "0000" , sizeof(unsigned long) )){
        Serial.println(F("failed"));
      }

@sschultewolter zur Info:
http://arduino.cc/en/Serial/Write
Es gibt auch write( buffer, len) was schnibbli hier gefunden hat.
Die Länge von “0000” und sizeof(long) sind zwar gleich, aber warum er das so schreibt, weiss ich nicht.

aber geht doch sicher das ich in den IF blöcken eine Variable setze und dann am schluss einfach die Variable sende

aber sicher geht das ( wenn du die Semikolons passend setzt ) :wink:

Kannst du mir das ganze kurz bei diesem Beispiel erklären?

    if (!radio.write( buffer, len)){
      Serial.println(F("failed"));
    }

Mit der deklaration ect? :s

"das ganze" = eine Variable zuweisen und später ausgeben ? Oder Variablendeklarationen ?

#define PRESSED LOW  // Bei Tastern mit pullup Widerstand
typedef enum {none, up, down, fast} ButtonState;

const char NONEMSG[] = "0000";
const char FASTMSG[] = "3333";
const char DOWNMSG[] = "1234";
const char UPMSG[] = "1111";


HardwareSerial& radio=Serial;  // was immer das in Wirklichkeit ist ( das wichtigste fehlt )

void setup() {}
void loop() {
 static ButtonState lastState;
 ButtonState actState;
 if (digitalRead(6) == PRESSED) actState = up;
 else if (digitalRead(7) == PRESSED ) actState = down;
 else if (digitalRead(8) == PRESSED ) actState = fast;
 else actState = none;
 if (actState != lastState)
 {
   const char* msg;
    // nur bei Änderung
    switch (actState)
    {
      // Hier nur Variablenzuweisung
      case none: msg =NONEMSG; break;
      case up:   msg =UPMSG;   break;
      case down: msg =DOWNMSG; break;
      case fast: msg =FASTMSG; break;
    }
    
    radio.write(msg);  // hier Verwendung der Variablen
    
    lastState = actState;
    delay(2); // entprellen
 } 
}

Keine Ahnung, ob das so ist wie du willst, da ich nicht weiss was bei dir radio ist...