Accendere led con pulsante dentro ciclo if

Evidentemente Guglielmo ha dimenticato che Arduino è stato ideato per le persone ignoranti in materia come me .!bisognerebbe cacciarlo spero che Banzi se ne renda conto e lo faccia

--- potete legegre la mia risposta QUI, a fine thread :slight_smile: - gpb01

>ToniP: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

Domanda: oltre a quando rilasci il pulsante quando ancora si deve spegnere?
Se la risposta fosse "mai" allora basterebbe mettere alto un secondo pin quando il ckdice é giisto. A quel pin ci colleghi il pulsante e, in serie, il led. Il pulsante deve essere normalmente aperto. E dopo il led vai a massa

mi scuso per non avere inserito correttamente il codice.
grazie per il suggerimento,in pratica il pulsante momentaneamente dovrebbe simulare un sensore PIR credi che sia lo stesso?

ToniP:
mi scuso per non avere inserito correttamente il codice.

ok, ma ... fai quanto ti ho ben spiegato nel mio post #1. Grazie.

Guglielmo

Grazie Silente,facendo come mi hai detto tu funziona,ma collegando in futuro un sensore PIR dovrei trovare un'alternativa,in pratica l'impulso del sensore mi dovra' dare l'impulso per un ipotetica sirena.

Sostituisci il pulsante con il PIR.

Questo quando rileva movimento da tensione. Puoi usare la tensione per azionare un relè che aziona la sirena

Ok.
Allora basta dire che
digitalWrite (secondoled ,(digitalRead(pulsante)&&PasswordCorretta()));
Dove PasswordCorretta é una funzione che restituissce 1 se...indovina.

Quanto alla fattibilità dipende dal livello di conoscenze che si hanno. Comincia a prendere un buon manuale di C e a sfogliare il forum. Troverai da divertirti e da imparare al contempo

Mi piace vedere gente affascinata. Quello che ti ho mostrato é il metodo più veloce che mi é venuto in mente (poi qui ci starebbe una discussione su velocità contro chiarezza, o su se esiste un modo più veloce) cerca di imparare per gradi, però, facendo piccoli passi e sapendoli bene

Allora, visto che pare parlo al vento ...

  1. ToniP o fai quanto richiesto al mio post #1 o chiudo il thread.

  2. NON sono tollerate ulteriori risposte sino a quando non verrà rispettato il regolamento ed il primo post corretto !

Guglielmo

mi scuso ma evidentemente non ho capito come fare,non voglio disturbare nessuno

ToniP:
mi scuso ma evidentemente non ho capito come fare ....

Guarda se leggi ATTENTAMENTE il mio post #1 ti spiega esattamente cosa devi fare ... è piuttosto semplice ...

Guglielmo

ok adesso ci riprovo

#include <Keypad.h>
#include <LiquidCrystal.h>
int stato=0;
int pulsante=11;

const byte ROWS = 4; // Quattro righe
const byte COLS = 4; // Quattro colonne
// Definizione mappa della tastiera
byte keys[ROWS][COLS] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};
byte rowPins[ROWS] = {
 9, 8, 7, 6 };
byte colPins[COLS] = {
 5, 4, 3, 2 };  
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 
char code [4],cod[4]; 
int i;
int sbagli=0;
int sbagli2=0;
LiquidCrystal lcd(14, 15, 16, 17, 18, 19);

int cont;
void setup() {
  cod[0]='1';
  cod[1]='2';
  cod[2]='3';
  cod[3]='A';
 pinMode (13, OUTPUT);
 pinMode (11,INPUT);
pinMode (12,OUTPUT);
//pinMode (12,LOW);
//pinMode (11,LOW);
  lcd.begin(16, 2);
cont=0;
   
}
void loop(){
 lcd.setCursor(1, 0);
   lcd.print("DIGITA CODICE:");
lcd.setCursor(0, 1);
 for (i=0; i<4; i++) {
   code[i] = keypad.waitForKey();
   lcd.print('*');
 }
  delay(500);
   if((code[0] == cod[0]) && (code[1] == cod[1]) && (code[2] == cod[2]) && (code[3] == cod[3]) and stato==0){
    // digitalWrite(13,HIGH);
     digitalWrite(12,HIGH);
 lcd.clear(); 
 sbagli2=0;
 stato=1;
 lcd.print (" attivo ");
 delay(2000);
     lcd.clear();
    
    
     }
           
  else if((code[0] == cod[0]) && (code[1] == cod[1]) && (code[2] == cod[2]) && (code[3] == cod[3]) and stato==1){
    // digitalWrite(13,LOW);
     digitalWrite(12,LOW);
 lcd.clear(); 
 sbagli2=0;
 stato=0;
  lcd.print (" spento ");
   delay(2000);
   lcd.clear();         
}

 if(((code[0] != cod[0]) || (code[1] != cod[1]) || (code[2] != cod[2]) || (code[3] != cod[3]))&&((code[0] != '*') || (code[1] != '*') || (code[2] != '*') || (code[3] != '*'))) { 
         lcd.clear(); 
 sbagli2=0;
   lcd.print ("CODICE ERRATO");
    delay (2000);
    lcd.clear();  
   }
    digitalWrite (13,(digitalRead(11)&&PasswordCorretta()));
    }

adesso è corretto come ho postato lo sketch?

ToniP:
adesso è corretto come ho postato lo sketch?

Allora ... si così è corretto, peccato che ho chiaramente scritto :

gpb01:
>ToniP: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) ...

... e così difficile correggere il primo post ? ? ? :o

Guglielmo

Buonasera a tutti,mi rivolgo a voi perché ho provato dietro suggerimento di Silente a modificare lo sketch,

Silente:
Ok.
Allora basta dire che
digitalWrite (secondoled ,(digitalRead(pulsante)&&PasswordCorretta()));
Dove PasswordCorretta é una funzione che restituissce 1 se...indovina.

Quanto alla fattibilità dipende dal livello di conoscenze che si hanno. Comincia a prendere un buon manuale di C e a sfogliare il forum. Troverai da divertirti e da imparare al contempo

Ma le mie conoscenze sono ancora basse,se potete suggerirmi ancora qualcosa ve ne sarei grato grazie

Visto che NON mi dai ascolto e, nonostante tutte le mie richieste NON hai modificato il tuo primo post correggendolo come ti ho spiegato, mi costringi a fare si che ...

... sino a quando non lo farai, NON saranno permesse ulteriori risposte (qualsiasi risposta, prima della sistemazione del primo post, verrà rimossa).

Guglielmo

Buongiorno a tutti, ho modificato il post come da regolamento , se manco di qualcosa fatemelo sapere

... io NON capisco veramente ... hai preso ed eliminato il codice dal tuo primo post ... e ok, certamente così non viola il regolamento ed è ovviamnete corretto, ma ... ti rendi conto che NON era quello che ti ho detto non so quante volte ?

Dovevi solo editare il post (tramite l'apposito bottone) ed aggiungere [code] prima del codice e [/code] dopo il codice e ... sarebbe andato a posto da solo. Eppure era più che ben descritto nel mio post #1 ... mah ... ::slight_smile:

Guglielmo

Evidentemente si non siamo tutti dei geni
,sei sempre così gentile o ti capita di essere di cattivo umore?