Salve,
la mia intenzione è quella di comparare due variabili int (btot, bcompare); se diverse bcompare prende il valore di btot ed eseguo un'azione; se uguali non faccio alcunche. Purtoppo sembra che bcompare non acquisisca il valore di btot, restando a 0, e quindi quest'azione viene ripetuta al''infinito. dove sbaglio?
int anemometro = A0; // ingresso analogico (A0) per lettura anemometro
int velocita; // variabile a cui ci si riferirà per la velocità del vento in m/s
const char vchar = 'v'; // variabile per comparazione velocità vento
int foto1 = 2; // fotosensore 1 collegato al PIN 2
int foto2 = 3; // fotosensore 2 collegato al PIN 3
int foto3 = 4; // fotosensore 3 collegato al PIN 4
int foto4 = 5; // fotosensore 4 collegato al PIN 5
int foto5 = 6; // fotosensore 5 collegato al PIN 6
const int b1 = 1; // valore del fotosensore 1 per determinare posizione
const int b2 = 2; // valore del fotosensore 2 per determinare posizione
const int b3 = 4; // valore del fotosensore 3 per determinare posizione
const int b4 = 8; // valore del fotosensore 4 per determinare posizione
const int b5 = 16; // valore del fotosensore 5 per determinare posizione
int btot; // variabile che descrive la somma delle variabili b1..b5
int bcompare; // variabile per comparazione stato fotosensori
int velcompare; // variabile per determinazione valore velocità inviato serialmente
const char bchar = 'b'; // variabile per determinazione valore posizione inviato serialmente
char Ready; // variabile di ritorno dal VBE2010 per determinare il riconoscimento del tipo di valore da inviare (posizione o velocità)
void setup() {
Serial.begin(9600); // inizializzazione porta seriale nativa USB
int btot = 0; // definizione valore iniziale della variabile "btot"
int bcompare = 0; // definizione valore iniziale della variabile "bcompare"
int velocita = 0; // definizione valore iniziale della variabile "velocita"
int velcompare = 0; // definizione valore iniziale della variabile "velcompare"
pinMode(foto1, INPUT); // definizione del modo del PIN 2
pinMode(foto2, INPUT); // definizione del modo del PIN 3
pinMode(foto3, INPUT); // definizione del modo del PIN 4
pinMode(foto4, INPUT); // definizione del modo del PIN 5
pinMode(foto5, INPUT); // definizione del modo del PIN 6
}
void loop() {
if (digitalRead(foto1) == HIGH) { // verifica stato PIN 2; se alto somma il valore che la variabile "btot" ha in quel momento al valore di "b1" restituendo un "btot" modificato.
btot += b1;
}
if (digitalRead(foto2) == HIGH) { // verifica stato PIN 3; se alto somma il valore che la variabile "btot" ha in quel momento al valore di "b2" restituendo un "btot" modificato.
btot += b2;
}
if (digitalRead(foto3) == HIGH) { // verifica stato PIN 4; se alto somma il valore che la variabile "btot" ha in quel momento al valore di "b3" restituendo un "btot" modificato.
btot += b3;
}
if (digitalRead(foto4) == HIGH) { // verifica stato PIN 5; se alto somma il valore che la variabile "btot" ha in quel momento al valore di "b4" restituendo un "btot" modificato.
btot += b4;
}
if (digitalRead(foto5) == HIGH) { // verifica stato PIN 6; se alto somma il valore che la variabile "btot" ha in quel momento al valore di "b5" restituendo un "btot" modificato.
btot += b5;
}
if (btot != bcompare) { // comparazione variabili "btot" e "bcompare"; se diverse si eseguirà quanto segue:
bcompare = btot; // salvataggio valore di "btot" in "bcompare" e
Ready = '0'; // azzeramento variabile "Ready" e
Serial.print(bchar); // invio del carattere determinate il valore della posizione e
if (Serial.available()) { // verifica transito dati in ingresso nella porta seriale USB e
Ready = Serial.read(); // acquisizione dei dati in transito nella porta seriale USB e
if (Ready == 'k') { // verifica che i dati in transito per la porta seriale USB siano la conferma di riconoscimento da parte del VBE2010 del valore da inviare e
Serial.print(bcompare); // invio, tramite seriale USB, del valore di "bcompare" al VBE2010 e
btot = 0; // azzeramento di "btot" in preparazione al nuovo ciclo.
}
}
}
analogRead(anemometro); // lettura valore rilevato nell'ingresso analogico A0 collegato all'anemometro.
velocita = map(anemometro, 0, 1023, 0, 1023); // utilizzo funzione "map" per linearizzazione da valore ingresso analogico a velocità vento in m/s.
if (velocita != velcompare) { // comparazione variabili "velocita" e "velcompare"; se diverse si eseguirà quanto segue:
velcompare = velocita; // salvataggio valore di "velocita" in "velcompare" e
Ready = '0'; // azzeramento variabile "Ready" e
Serial.print(vchar); // invio del carattere determinate il valore della velocità e
if (Serial.available()) { // verifica transito dati in ingresso nella porta seriale USB e
Ready = Serial.read(); // acquisizione dei dati in transito nella porta seriale USB e
if (Ready == 'k') { // verifica che i dati in transito per la porta seriale USB siano la conferma di riconoscimento da parte del VBE2010 del valore da inviare e
Serial.print(velcompare); // invio, tramite porta USB, del valore "velcompare".
}
}
}
}