Buongiorno, ho utilizzato un Arduino r3 samraza per creare un prototipo di cassaforte. Funziona tutto ma quando ho aggiunto il tastierino 4x4 ho riscontrato un problema. Quando la cassaforte è bloccata mi sembra di avere un intervallo di tipo un secondo ogni 4 per digitare una lettera, invece quando è aperta (la cassaforte) questo ritardo si annulla completamente, diventando super reattivo ( e dovrebbe essere così anche quando è chiusa). Mi domandavo se fosse un problema del codice oppure dovendo controllare il sensore ir, Arduino "rallenta". Tra poco pubblico il codice, grazie in anticipo.
#include <IRremote.h>
#include <Keypad.h>
#include <Servo.h> // libreria
#define PIN_SERVO 2 //pin servomotore
#define pulsante 7 //pin pulsante
IRrecv IR(3);
Servo servo;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {6, 7, 8, 9};
byte colPins[COLS] = {10,11,12,13};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String v_passcode="";
void setup() {
IR.enableIRIn();
servo.write(170);
digitalWrite (A1, HIGH);
servo.attach(PIN_SERVO);
pinMode (pulsante, INPUT);
pinMode (A2, OUTPUT);
pinMode (A1, OUTPUT);
pinMode (5, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key){
Serial.println(key);
}
if (key != NO_KEY){
v_passcode = v_passcode + key;
if(key=='A')
{
Serial.println("Inserisci Password");
v_passcode="";
}
if(key=='D')
{
Serial.println("Password Letta");
//Serial.println(v_passcode);
if (v_passcode=="104D")
{
Serial.println("Accesso Eseguito");
servo.write(75);
digitalWrite (A1, LOW);
digitalWrite (5, HIGH);
digitalWrite (A2, HIGH);
digitalWrite (5, HIGH);
digitalWrite (4, HIGH);
delay (700);
digitalWrite (A2, LOW);
delay (1050);
}
else
{
Serial.println("Accesso Negato");
digitalWrite (A2, HIGH);
delay(100);
digitalWrite (A2, LOW);
delay(100);
digitalWrite (A2, HIGH);
delay(100);
digitalWrite (A2, LOW);
delay(100);
digitalWrite (A2, HIGH);
delay(100);
digitalWrite (A2, LOW);
}
}
}
if (IR.decode()) {
Serial.println(IR.decodedIRData.decodedRawData, HEX);
if (IR.decodedIRData.decodedRawData == 0xFC037F80) {
servo.write(75);
digitalWrite (A1, LOW);
digitalWrite (5, HIGH);
digitalWrite (A2, HIGH);
digitalWrite (5, HIGH);
digitalWrite (4, HIGH);
delay (700);
digitalWrite (A2, LOW);
delay (1050);
}
delay(50);
IR.resume();
}
if (analogRead(A0) < 200) {
delay (260);
digitalWrite (5, LOW);
digitalWrite (4, LOW);
digitalWrite (5, LOW);
servo.write(180);
digitalWrite (A1, HIGH);
delay (900);
}
}