riconoscere input arduino

Ciao, vi sembrerà una cosa banale ma ho qualche problema con il riconoscere input. lato hardware ho semplicemente un pulsante con un resistenza da 20Kohm mentre per la parte software ho modificato l'esempio debounce per riconoscere gli input ma non funziona come vorrei

//+++++++++paramentri input
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;
//++++++++++
int readInputState(int buttonPin)
{
  /*int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastButtonState = reading;
    return reading;
  } 
  return -1;*/
    int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) 
  {
    buttonState = reading;
    return buttonState;
  }
  lastButtonState = reading;
  return -1;
}

e poi quando chiamo la funzione utilizzo

int state2 = readInputState(2);
  if(state2 != -1)
  {
    Serial.print("read: ");
    Serial.print(state2);
    Serial.println();
  }

quello che vorrei realizzare è una funzione che ritorni lo stato 0-1 solo quando cambia dallo stato precedente e altrimenti -1

avete qualche consiglio da darmi?

Dacci il codice completo e non pezzettini. Ciao Uwe

ecco qui

#include "WiFly.h"
//#include <WString.h>
#include "string.h"
#include "Servo.h"
//#include "Credentials.h"
Servo myservo5;
Servo myservo6;
int pos5=90;
int pos6=90;
int pin2=0;

//+++++++++paramentri input
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;
//++++++++++

void setup() 
{

 Serial.begin(9600);
 SpiSerial.begin();

 myservo5.attach(5);
 myservo6.attach(6);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(2, INPUT);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(3,LOW);

}

String myString= String(100);
boolean dataReceiving = false;
String readString = String(100);

boolean led1 = false;
boolean led2 = false;
int serInIndx = 0;
void loop () {
  //simple feedback from Arduino
  
  //read the serial port and create a string out of what you read
  //readSerialString(serInString, serInIndx);
  if(readSerialString())
  {
    if (myString.equals("0"))
           {
             if(led1)
             {
               digitalWrite(3,LOW);
               led1 = false;
             }
             else
             {
               digitalWrite(3,HIGH);
               led1 = true;
         
             }
             SpiSerial.print("0");
           }
           if (myString.equals("10"))
           {
              if(led2)
             {
               digitalWrite(7,LOW);
               led2 = false;
             }
             else
             {
               digitalWrite(7,HIGH);
               led2 = true;
         
             }
             SpiSerial.print("10");
           }
  }
  
  printSerialString();
  //lettura input da pin 2a
  int state2 = readInputState(2);
  if(state2 != -1)
  {
    Serial.print("read: ");
    Serial.print(state2);
    Serial.println();
  }  
  myservo5.write(0);
  //slows down the visualization in the terminal
}

int readInputState(int buttonPin)
{
  /*int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastButtonState = reading;
    return reading;
  } 
  return -1;*/
    int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) 
  {
    buttonState = reading;
    return buttonState;
  }
  lastButtonState = reading;
  return -1;
}

boolean readSerialString () 
{
    boolean dataRead = false;
    if(SpiSerial.available()) 
    { 
       while (SpiSerial.available())
       { 
          char c = SpiSerial.read();
          //read char by char HTTP request
          Serial.print(c);
          if(c=='+') //se trovo + inizia la comuinicazione abilito datareceiving
          {
               dataReceiving = true;
               Serial.print("start comunication\n");
               readString = "";
          }
          else if ((readString.length() < 100) && (dataReceiving))
          {
             //store characters to string
             if(c=='-') //se a comunicazione attiva ricevo - significa che la comunicazione non è attiva
             {
               dataReceiving = false;
               Serial.print("end comunication\n");
             }
             else
             { 
                 serInIndx++;
                 if(c == '!')//carattere di inizio corsa quando lo trovo la mia stringa è completa e quindi la posso processare
                 {
                   //readString.concat(c);
                   myString = "";
                   serInIndx = 0;
                   //Serial.print("start string\n");
                     
                 }
                 else if(c == '

)//carattere di fine corsa quando lo trovo la mia stringa è completa e quindi la posso processare
                {
                  //readString.concat(c);
                  myString = readString;
                  readString = “”;
                  dataRead = true;
                  serInIndx = 0;
                   
                }
                else
                {
                  readString.concat(c);
                }
            }
          }
      }
    }
    return dataRead;
}

//print the string all in one time
//this func as well uses global variables
void printSerialString()
{
  if( serInIndx > 0) {
      Serial.print("Arduino said: ");   
      //loop through all bytes in the array and print them out
      Serial.print(myString);
      /*for(serOutIndx=0; serOutIndx < serInIndx; serOutIndx++) {
          Serial.print( serInString[serOutIndx] );
         
          //print out the byte at the specified index
          //serInString[serOutIndx] = “”;            //optional: flush out the content
      }  */     
      //reset all the functions to be able to fill the string back with content
      Serial.println();
  }
}