Un caro saluto a tutti voi.
Ho acquistato da poco Arduino 1 e sto man mano provando tutti i progetti.
Me ne sono inventato uno.
Ho un selettore rotativo codificato a 16 posizioni (PT65103L508), l'ho collegato sui pin digitali 2 3 4 e 5 di Arduino.
Seguendo altre discussioni del forum, sono arrivato a compilare il seguente codice:
const int P1 = 2; // ingressi selettore rotativo
const int P2 = 3; // ingressi selettore rotativo
const int P4 = 4; // ingressi selettore rotativo
const int P8 = 5; // ingressi selettore rotativo
int numero, R1,R2,R4,R8;
void setup() {
Serial.begin (9600);
pinMode (P1, INPUT_PULLUP); // ingressi selettore rotativo
pinMode (P2, INPUT_PULLUP); // ingressi selettore rotativo
pinMode (P4, INPUT_PULLUP); // ingressi selettore rotativo
pinMode (P8, INPUT_PULLUP); // ingressi selettore rotativo
digitalWrite (P1, HIGH);
digitalWrite (P2, HIGH);
digitalWrite (P4, HIGH);
digitalWrite (P8, HIGH);
}
void loop() {
int R1 = digitalRead (2);
int R2 = digitalRead (3);
int R4 = digitalRead (4);
int R8 = digitalRead (5);
int numero = 0;
if (R1 == LOW) {int numero = (numero+1);}
if (R2 == LOW) {int numero = (numero+2);}
if (R4 == LOW) {int numero = (numero+4);}
if (R8 == LOW) {int numero = (numero+8);}
Serial.print ("Il numero selezionato è:");
Serial.println (numero);
delay (1000);
}
Ma non mi funziona. Resta fisso sul numero 0.
Cosa sbaglio?
Si.
Ho controllato le tensioni, ho controllato uno per uno tutte le commutazioni, ho ricontrollato i collegamenti e che il tutto combaciasse col software.
Niente non mi va.
Ho solo un dubbio sul fatto che le tensioni di uscita siano tutte a 4,83 volt, ma non credo sia un problema, perché in commutazione vanno a 0.
Credo che sia una questione di software.
Ma come "strano"??? Non glielo hai detto tu stesso?
Quando fa:
if (R1 == LOW) {int numero = (numero+1);}
if (R2 == LOW) {int numero = (numero+2);}
if (R4 == LOW) {int numero = (numero+4);}
if (R8 == LOW) {int numero = (numero+8);}
all'interno di ogni "if" viene creata una nuova variabile locale chiamata "numero", gli assegna un valore e poi quella variabile "muore" appena esce dall'if! Quindi visualizza il valore della variabile globale "numero" che sarà sempre zero!
Deve fare così:
const int P1 = 2; // ingressi selettore rotativo
const int P2 = 3; // ingressi selettore rotativo
const int P4 = 4; // ingressi selettore rotativo
const int P8 = 5; // ingressi selettore rotativo
int numero, R1,R2,R4,R8;
void setup() {
Serial.begin (9600);
pinMode (P1, INPUT_PULLUP); // ingressi selettore rotativo
pinMode (P2, INPUT_PULLUP); // ingressi selettore rotativo
pinMode (P4, INPUT_PULLUP); // ingressi selettore rotativo
pinMode (P8, INPUT_PULLUP); // ingressi selettore rotativo
}
void loop() {
R1 = digitalRead (P1);
R2 = digitalRead (P2);
R4 = digitalRead (P4);
R8 = digitalRead (P8);
numero = 0;
if (R1 == LOW) numero += 1;
if (R2 == LOW) numero += 2;
if (R4 == LOW) numero += 4;
if (R8 == LOW) numero += 8;
Serial.print ("Il numero selezionato è:");
Serial.println (numero);
delay (1000);
}
Rieccoci.
Buongiorno.
Si effettivamente ho fatto un mega casino. A volte ci si concentra su una cosa e te ne scappano altre 100.
Non capivo perché @Datman diceva che i digitalwrite erano inutili. Poi ho cercato in giro ed ho scoperto il perché.
Ho apportato le varie correzioni ed ora funziona.
Grazie!!!