Il sito per chi ama smanettare con Arduino, Raspberry Pi & Co.
Problemi sensore ma...
 

Problemi sensore magnetico  

   RSS

0

Salve mi sto avvicinando al mondo di Arduino ed avrei bisogno di un aiutino su un progetto sto creando un antifurto  con Keypad e sensore magnetico ma non riesco a farlo funzionare a dovere potreste darmi un consiglio/codice ? questo e il codice e penso che non ci sia bisogno di spiegazioni io vorrei riuscire a far funzionare il codice  in maniera che se viene aperto il contatto del sensore magnetico abbia un certo numero di secondi per inserire il codice e disabilitarlo...

#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define Password_Length 5
int  LED = 10;
int reed_sw = A0;
int reed_status;
int RelayPin = 12;
char Data[Password_Length];
char Master[Password_Length] = "1234";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
int Buzzer = 2;  //Il buzzer è collegato al pin digitale 9
int Nota;  //Variabile in cui è salvato il valore della nota
//unsigned long STARTINGTIME; //GESTIONE TIMER
//const unsigned long TIMEOUT = 2000; //GESTIONE TIMEOUT (2000Ms = 2 Sec)
const byte ROWS = 4;
const byte COLS = 3;
char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
// set the LCD address to "0x27"(or "0x3f") for a 16 chars and 2 line display
// set the LCD address to "0x3f"(or "0x27") for a 16 chars and 2 line display
//LiquidCrystal_I2C lcd(0x3f, 16, 2); 
void setup(){
//  lcd.init();
//  lcd.backlight();
  pinMode(RelayPin, OUTPUT);
  digitalWrite(RelayPin, HIGH);
   Serial.begin(9600);
  Serial.println("Sistema pronto Inserisci La Password....");
  pinMode (Buzzer, OUTPUT);
  pinMode(LED,OUTPUT);
  pinMode(reed_sw,INPUT);
 // attachInterrupt(0, Main,CHANGE );
//  CHANGE fa scattare l’evento di interrupt quando il pin cambia stato
//  RISING fa scattare l’evento di interrupt quando il pin passa da LOW a HIGH
//  FALLING fa scattare l’evento di interrupt quando il pin passa da HIGH a LOW
}
void loop(){
SensoreMagnetico ();
}
void Main(){
  //  lcd.setCursor(0,0);
  //lcd.print("  PASSWORD...");
   customKey = customKeypad.getKey();
   if (customKey =='#'){
    Serial.println("Reset Sistema");
    digitalWrite(RelayPin, HIGH);
      Nota = 10 + 500;  //Calcolo della nota
    tone(Buzzer,Nota);     //suona nota sul pin 12 alla frequenza di 1000Hz
    delay(202);
    noTone(Buzzer);
      customKey = customKeypad.getKey(); 
  }
  if (customKey){
    Data[data_count] = customKey;
   // lcd.setCursor(data_count,1);
    //lcd.print(Data[data_count]);
    // Serial.println(data_count);
      if (customKey){
    Serial.println(customKey);
     Nota = 100 + 500;  //Calcolo della nota
    tone(Buzzer,Nota);     //suona nota sul pin 12 alla frequenza di 1000Hz
    delay(20);
    noTone(Buzzer);   
  }
    data_count++;
    }
  if(data_count == Password_Length-1){
//    lcd.clear();
    if(!strcmp(Data, Master)){
      //lcd.print(" Pass Corretta");
       Serial.println(" Pass Corretta");
      digitalWrite(RelayPin, LOW);
     //... suono
       Nota = 1500 ;  //Calcolo della nota
    tone(Buzzer,Nota,260);
  
    delay(120);
    //noTone(Buzzer);   
        Nota = 800 ;  //Calcolo della nota
    tone(Buzzer,Nota);     //suona nota sul pin 12 alla frequenza di 1000Hz
    delay(18);
    noTone(Buzzer); 
   // return ;
      }
    else{
      //lcd.print("Pass Errata");
  Serial.println("Password errata");
      delay(3000);
      //return ;
      }
   
    //lcd.clear();
    clearData(); 
     //customKey = customKeypad.getKey();
       }
 return;
}
void clearData(){
  while(data_count !=0){
    Data[data_count--] = 0;
  }
  return;
}
void SensoreMagnetico (){
  reed_status = digitalRead(reed_sw);
  if(reed_status ==0){
    digitalWrite(LED,HIGH);//Acceso
    Serial.println(reed_status);
   delay(100);
   digitalWrite(LED,HIGH);
    Main();
 
     }else{
   digitalWrite(LED,LOW);//Spento
    Serial.println(reed_status);
    delay(100);
   digitalWrite(LED,LOW);
  
 }
 
}
1 Answer
0

Ciao, certo uno il codice lo puo' capire guardandolo ma se dai qualche indicazione è più probabile che qualcuno voglia aiutarti visto che gli riduci il lavoro di qualche ordine...

Entra nel forum

Hai un nuovo progetto in mente ma hai dei dubbi su come realizzarlo? Vuoi condividere la tua conoscenza da maker con gli altri? Registrati nella nostra community e potrai chiedere fare la tua domanda o rispondere e condividere la tua conoscenza in internet.

  
Working

Please Login or Registrazione