Salve, ripubblico questo topic che ho pubblicato ieri nella sezione Hardware, avendo sbagliato sezione nel quale pubblicare il topic non ho avuto molti suggerimenti, quindi ho deciso di ripubblicarlo qui.Chiedo scusa per il disagio, se un moderatore puo' eliminare il vecchio topic ne sarò felice, grazie e ancora scusa. Bene, arrivo al dunque: devo realizzare un circuito che attraverso un tastierino 4x4 mi riconosca un codice di accesso esatto dagli altri, immesso il codice giusto mi deve fare la cosa che io voglio, all'inizio uso un led. Mi sono documentato su vecchi topic presenti su questo forum, ho preso spunto e ho cominciato a scrivere il programma e funziona, mi riconosce il codice corretto e mi accende il led. Ho deciso di aggiungere oltre al led anche un piccolo sistema d'allarme, ovvero un fotoresistore sul quale c'è un led rosso fisso, nel caso in cui il fascio luminoso venga interrotto scatta un buzzer. Ho provato lo sketch del piccolo sistema d'allarme separatamente dal precedente sketch e funziona. Adesso ho deciso di fondere insieme i due sketch, ma ho alcuni problemi. All'inizio ho inserito il sistema d'allarme in un if else all'interno del programma del keypad, ma quando inserivo il codice esatto partiva il buzzer e non si spegneva neanche se c'era il fascio luminoso sul fotoresistore. Ho chiesto ad una persona che ne capisce più di me e mi ha consigliato di togliere quell'if...else perchè fa conflitto con l'if del programma base e quindi non va. Ho provato a cercare un'istruzione che andasse bene per il mio programma e ho deciso di usare lo switch-case , ma non so se è adeguato. Quindi ho cambiato inizialmente il mio programma nel seguente:
#include <Keypad.h>
#define LED 13
#define fotor 0
#define buzzer 7
int valfotor;
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] = {
2, 3, 4, 5 }; // Connessione delle righe: Riga0, Riga1, Riga2 e Riga3 ai pins di Arduino.
byte colPins[COLS] = {
8, 9, 10, 11 }; // Connessione delle colonne: Colonna0, Colonna1 , Colonna2 e Colonna3 ai pins di Arduino.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Creazione della tastiera
char code [4];
char i;
void setup() {
Serial.begin(9600);
pinMode (LED, OUTPUT);
pinMode (buzzer,OUTPUT);
}
void loop()
{
valfotor = analogRead(fotor);
Serial.print("DIGITA CODICE:");
for (i=0; i<4; i++) {
code[i] = keypad.waitForKey();
Serial.print("Tasto numero ");
//Serial.print(i);
//Serial.print(" - valore ");
Serial.println(code[i]);
if((code[0] == '1') && (code[1] == '2') && (code[2] == '3') && (code[3] == 'A')) {
digitalWrite (LED, HIGH);
Serial.print ("CODICE ESATTO!");
Serial.print("LED ACCESO");
}
switch(valfotor){
case(valfotor <=1000): {
digitalWrite(buzzer,HIGH);
}
case(valfotor >1000): {
digitalWrite(buzzer,LOW);
}
}
if((code[0] == '7') && (code[1] == '9') && (code[2] == '3') && (code[3] == 'B')) {
digitalWrite(LED,LOW);
Serial.println("LED SPENTO");
}
}
}
Però mi dava questi errori nella compilazione: sketch_feb24a.ino: In function 'void loop()':
sketch_feb24a.ino:59:10: error: 'valfotor' cannot appear in a constant-expression
sketch_feb24a.ino:62:12: error: 'valfotor' cannot appear in a constant-expression
Errore durante la compilazione
Quindi ho modificato ancora una volta il programma nel seguente:
#include <Keypad.h>
#define LED 13
#define fotor 0
#define buzzer 7
int valfotor;
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] = {
2, 3, 4, 5 }; // Connessione delle righe: Riga0, Riga1, Riga2 e Riga3 ai pins di Arduino.
byte colPins[COLS] = {
8, 9, 10, 11 }; // Connessione delle colonne: Colonna0, Colonna1 , Colonna2 e Colonna3 ai pins di Arduino.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Creazione della tastiera
char code [4];
char i;
void setup() {
Serial.begin(9600);
pinMode (LED, OUTPUT);
pinMode (buzzer,OUTPUT);
}
void loop()
{
valfotor = analogRead(fotor);
Serial.print("DIGITA CODICE:");
for (i=0; i<4; i++) {
code[i] = keypad.waitForKey();
Serial.print("Tasto numero ");
//Serial.print(i);
//Serial.print(" - valore ");
Serial.println(code[i]);
if((code[0] == '1') && (code[1] == '2') && (code[2] == '3') && (code[3] == 'A')) {
digitalWrite (LED, HIGH);
Serial.print ("CODICE ESATTO!");
Serial.print("LED ACCESO");
}
switch(fotor){
case(fotor <=1000): {
digitalWrite(buzzer,HIGH);
}
case(fotor >1000): {
digitalWrite(buzzer,LOW);
}
}
if((code[0] == '7') && (code[1] == '9') && (code[2] == '3') && (code[3] == 'B')) {
digitalWrite(LED,LOW);
Serial.println("LED SPENTO");
}
}
}
Grazie a tutti per l'aiuto.