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;
}
#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;
//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();
}
}