const int sensorePin=A0; //numero pin dedicato all'output analogico del sensore luce ambiente
const int interval=3000; //costante dedicata a definire il limite per variabile "ciclo"
const int TX=12; //numero pin dedicato a simulare il pin di trasmissione dati per comunicazione seriale
const int RX=13; //numero pin dedicato (e non usato) a simulare il pin di ricezione dati per comunicazione seriale
//int sensoreVal=0; //variabile usata per depositare il valore analogico del sensore luce ambienteint timerSTX=0; //variabile usata per conteggio tempo di invio del bit iniziale secondo il protocollo
int timerSTX=0;
int timerTX=0; //variabile usata per conteggio tempo di invio del bit letto dalla variabile "sensoreVal" secondo il protocollo
int bitReadPosition=0; //variabile usata per conteggio quantita' dei bit (8 (1 byte)) da inviare
int stato=0; ////variabile usata come toggle per diverse funzioni
const bool STX=false; //costante di cui valore usato come bit iniziale secondo il protocollo
const bool ETX=true; //costante di cui valore (non) usato come bit finale secondo il protocollo
bool bitVal=false; //variabile usata per depositare valore del bit letto
//---------------------
int timerData=0; //variabile usata per debug
int sensoreVal=77;
//---------------------
void setup() {
pinMode(sensorePin,INPUT); //assegnazione della funzione di input al pin dedicato al sensore
pinMode(TX,OUTPUT); //assegnazione della funzione di output al pin dedicato alla trasmissione seriale
Serial.begin(9600); //istruzione di inizializzazione della comunicazione seriale per feedback
timerData=interval;
}
void loop() {
timerData++;
/*if(ciclo>=interval && !valChange){ ////in fase di trasmissione il valore NON deve cambiare per evitare errori durante la lettura dei bit dal valore
sensoreVal=analogRead(sensorePin);
ciclo=0;
valChange=true;
}*/
if(timerData>interval){
switch(stato){
//case 0:
// stato=1;
//break;
case 0:
if(timerSTX<15){
if(timerSTX==0){
Serial.print(STX);
digitalWrite(TX,STX);
}
timerSTX++;
}
else{
stato++;
timerSTX=0;
Serial.println();
}
break;
case 1:
if(bitReadPosition<8){
if(timerTX<10){
if(timerTX==0){
bitVal=bitRead(sensoreVal,bitReadPosition);
Serial.print(bitVal);
digitalWrite(TX,bitVal);
}
timerTX++;
}
else{
bitReadPosition++;
timerTX=0;
Serial.println();
}
}
else{
timerData=timerData-interval;
stato=0;
bitReadPosition=0;
timerTX=0;
timerSTX=0;
}
break;
}
}
else{
Serial.println(ETX);
digitalWrite(TX,ETX);
}
//Serial.println(sensoreVal);
//delay(1);
delay(1);//cambiobase tempi per scopi di test
}