Go Down

Topic: [Risolto] Combinazione Pulsanti (Read 1 time) previous topic - next topic

leo72

L'errore è qui:
Code: [Select]
int pinPulsanti[] = {13,12,11,10};
int sequenza[] = {13,12,11,10};

Crei un vettore che contiene i numeri 13, 12, 11 e 10. Non lo stato dei pulsanti D13, D12, D11 e D10.
Te lo aveva già suggerito Uwe

uwefed

Code: [Select]
for(int indice = 0; indice < 4; indice++)  {
    codice[5] = digitalRead(pinPulsanti[indice]);
    if (codice[indice] == sequenza[indice]) { del pulsante?
     digitalWrite(led, HIGH);
}}


scrivi il valore letto fuori dal Array ( l' array di 5 elementi ha gli elementi da 0 a 4) e percui sovvrascrivi la variabile che é memorizzata nella Ram dopo l# array (non so dirti quale é)
Il secondo errore é che scrivi il pulsante in un elemento fisso che alla fine non viene confrontato col array di riferimento.

Altro consiglio metti una funzione a temp ( per esempio 5 secondi entro il quale il codice deve essere inserito senó si svuota il array di ricezione (codice)). In questo modo quando hai sbagliato a inserire il codice riparte dopo 5 secondi da zero.

Questa logica di leggere i pin non funziona come vorresti. Devi immettere il codice in qualche microsecondo perché la lettura dei pulsanti avviene con questa velocitá.
La lettura deve avvenire con una logica diversa.

Devi leggere tutti 4 pulsanti.
Controlli se non sono premuti 2 pulsanti in contemporanea. se sí la lettura viene scartata
Se un pulsante é premuto scrivi il relativo numero nel array pulsanti premuti
Incrementi l' indice dell array pulsanti premuti
Aspetti che il pulsante sia stato rilasciato
Se l'array pulsanti premuti é pieno ( premuti il numero di pulsanti correspondenti alla lunghezza del  codice segreto) fai il controllo dell'array pulsanti premuti.  Accendi il led e svuoti l' array pulsanti premuti premuta e azzeri l'indice dell'array pulsanti premuti.
Se é passato il tempo utile per immettere la sequenza svuoti l' array pulsanti premuti premuta e azzeri l'indice dell'array pulsanti premuti.
Riparti con questo ciclo.

Ciao Uwe

Hertz

Ho provato con quest' altro codice ma mi da errore nella compilazione
Code: [Select]

int led = 12;
int sequenza[] = {10,9,8,7};
int pulsantiPremuti[4];

int button1 = 10;
int button2 = 9;
int button3 = 8;
int button4 = 7;

int i = 0;

void setup() {
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  pinMode(led, OUTPUT);
 
void loop()  {
  digitalRead(button1);
  digitalRead(button2);
  digitalRead(button3);
  digitalRead(button4);
 
  if (button1 == HIGH) {
    codice[1] = 10;
    i++;
  if (button2 == HIGH) {
    codice[2] = 9;
    i++;
  if (button3 == HIGH) {
    codice[3] = 8;
    i++;
  if (button4 == HIGH) {
    codice[4] = 7;
    i++;
   
if (i == 4) {
   if (pulsantipremuti[] == sequenza[]) {
     digitalWrite(led, HIGH);
     }
     }
     }
     }
     }
     }
     }
     }

Uwe ha detto che il codice deve essere inserito in qualche microsecondo, ma come non so come fare.
Scusate ma sono alle prime armi con Arduino.

uwefed


Uwe ha detto che il codice deve essere inserito in qualche microsecondo, ma come non so come fare.

Intendevo dire che il Sketch era scritto in moco che Tu dovevi inserire da tastiera il codice in velocitá supersonica.

Ti da problemi in compilazione perché
if (pulsantipremuti[] == sequenza[]) {
mancano gli indici.

Il Sketch fa illuminare il LED se schiacci tutti i 4 pulsanti in contemporanea.
Ciao Uwe

Hertz

Grazie a tutti per le risposte.
Alla fine ci sono riuscito! Ora per migliorare il progetto avevo pensato di immettere la sequenza con un telecomando a infrarossi con il ricevitore
IRM-3638.
Cosa ne pensate?

Go Up