">id="quote"> Questa per me è stata la base di partenza, una sorta di "messaggio all'accensione"... Adesso ho aggiunto un lettore rfid, questo è lo stato attuale del mio step:
quote:Risposta al messaggio di macrocd inserito in data 13/02/2015 20:18:41 (> Grazie Macrocd per il tuo interessamento, avevo già visto quel link ed ho anche già iniziato a giocarci... ho già letto i 4 byte identificativi dei due tag e della mastercard, non riesco però a compilare lo sketch in modo da gestire l'inserimento e il disinserimento dell'allarme, come base di partenza sto seguendo questo esempio:Visualizza messaggio in nuova finestra
)>
https://www.youtube.com/watch?v...
Sono giorni che cerco di modificare il suo sketch per vedere di adattarlo al mio Hardware, ma non ne vengo fuori....quote:/** * Centrale antifurto costruita con Arduino. Materiali: * Arduino Mega, lettore RFID RC522, contatto magnetico, 3 led colorati, * un pulsante, un modulo relè. * Importante, collegare il lettore RFID ai pin di Arduino come segue: * MOSI: Pin 51 / ICSP-4 * MISO: Pin 50 / ICSP-1 * SCK: Pin 52 / ISCP-3 * SDA: Pin 53 * RST: Pin 5 */ #include <SPI.h> #include <RFID.h> #include <EEPROM.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define SS_PIN 5 #define RST_PIN 53 // Codice della mia chiave master da sostituire con il vostro. #define masnum0 70 #define masnum1 43 #define masnum2 191 #define masnum3 180 #define masnum4 102 #define sensorePir1 5 // Ingresso sensore 1 #define releSirena 7 // A questo pin si può collegare ad esempio un relè che comanda una sirena esterna autoalimentata #define ledRosso 15 // E' il led che indica lo stato della centrale #define ledGiallo 14 // E' il led che indica lo stato del sensore 1 #define resetKey 6 // pulsante di reset e visualizzazione memoria di allarme #define dispositivo1 3 // Uscita dispositivo 1 #define pausa 5000 // Costante che definisce il tempo di ingresso, in questo caso 5 secondi. Il tempo di uscita è possibile modificarlo qualche istruzione più in fondo. RFID rfid(SS_PIN, RST_PIN); LiquidCrystal_I2C lcd(0x27,16,2); String readString = String(30); boolean statoAntifurto = 0; // Variabile antifurto attivo boolean statoAllarme = 0; // Variabile centrale in allarme boolean statoPir1 = 0; // Variabile di stato del sensore 1 boolean statoDispositivo1 = 0; // Variabile di stato on/off del dispositivo boolean cardMaster = 0; // Variabile modalità chiave master boolean memoriaAllarme = 0; // Variabile per gestire la memoria di allarme boolean tastoPremuto = 0; // Variabile che controlla la pressione prolungata del tasto reset int slave; // Contatore di chiavi salvate int lamp; // Variabile per il lampeggio nel tempo di uscita int sernum0; int sernum1; int sernum2; int sernum3; int sernum4; void setup() { lcd.begin(); SPI.begin(); rfid.init(); Serial.begin(9600); pinMode(ledRosso, OUTPUT); pinMode(releSirena, OUTPUT); pinMode(ledGiallo, OUTPUT); pinMode(dispositivo1, OUTPUT); pinMode(sensorePir1,INPUT); pinMode(resetKey, INPUT); digitalWrite(ledRosso, LOW); digitalWrite(ledGiallo, LOW); digitalWrite(dispositivo1, HIGH); standby(); } void loop() { // Inizio blocco per la gestione locale della centrale // Rileva un tag... if (rfid.isCard()) { // Legge il seriale... if (rfid.readCardSerial()) { sernum0 = rfid.serNum[0]; sernum1 = rfid.serNum[1]; sernum2 = rfid.serNum[2]; sernum3 = rfid.serNum[3]; sernum4 = rfid.serNum[4]; slave = EEPROM.read(0); // Se il seriale letto corrisponde con il seriale Master // attiva o disattiva la modalita Memorizzazione chiavi // e in più visualizza il numero di chiavi salvate... if (sernum0 == masnum0 && sernum1 == masnum1 && sernum2 == masnum2 && sernum3 == masnum3 && sernum4 == masnum4) { if (statoAntifurto == 0) { lcd.backlight(); if (cardMaster==0) { lcd.clear(); lcd.print("CARD MASTER"); delay(2000); lcd.clear(); lcd.print("GESTIONE CHIAVI"); cardMaster = 1; lcd.setCursor(0, 1); lcd.print("Chiavi slave: "); lcd.setCursor(15, 1); lcd.print(slave); delay(3000); } else { cardMaster = 0; lcd.setCursor(0, 1); lcd.print("Annullata "); delay(3000); standby(); } } } // Se invece il seriale letto corrisponde con uno dei tre gruppi // di chiavi memorizzate allora attiva o disattiva l'allarme. else if ((sernum0 == EEPROM.read(1) && sernum1 == EEPROM.read(2) && sernum2 == EEPROM.read(3) && sernum3 == EEPROM.read(4) && sernum4 == EEPROM.read(5)) || (sernum0 == EEPROM.read(6) && sernum1 == EEPROM.read(7) && sernum2 == EEPROM.read(8) && sernum3 == EEPROM.read(9) && sernum4 == EEPROM.read(10)) || (sernum0 == EEPROM.read(11) && sernum1 == EEPROM.read(12) && sernum2 == EEPROM.read(13) && sernum3 == EEPROM.read(14) && sernum4 == EEPROM.read(15))) { lcd.backlight(); if (cardMaster==0) { if (statoAntifurto == 0) { statoAntifurto = 1; lcd.clear(); lcd.print("CHIAVE VALIDA"); delay(2000); lcd.clear(); lcd.print("TEMPO DI USCITA"); lamp=1; for (lamp; lamp <= 10; lamp++) { //Sostituire il 10 con il numero di secondi che si desidera per il tempo di uscita. digitalWrite(ledRosso, HIGH); delay(500); digitalWrite(ledRosso, LOW); delay(500); } attiva(); } else { statoAntifurto = 0; statoAllarme = 0; lcd.clear(); lcd.print("CHIAVE VALIDA"); delay(2000); disattiva(); } } } // Se il seriale letto è diverso dal master e nemmeno presente in memoria, // e se è attiva la modalita Memorizzazione chiavi, salva il seriale in memoria // come slave1, slave2 o slave3. else if (cardMaster == 1 && slave == 0) { lcd.clear(); lcd.print("Chiave rilevata!"); EEPROM.write(0, 1); EEPROM.write(1, sernum0); EEPROM.write(2, sernum1); EEPROM.write(3, sernum2); EEPROM.write(4, sernum3); EEPROM.write(5, sernum4); cardMaster = 0; delay(1000); lcd.setCursor(0, 1); lcd.print("Slave 1 salvata!"); delay(3000); standby(); } else if (cardMaster == 1 && slave == 1) { lcd.clear(); lcd.print("Chiave rilevata!"); EEPROM.write(0, 2); EEPROM.write(6, sernum0); EEPROM.write(7, sernum1); EEPROM.write(8, sernum2); EEPROM.write(9, sernum3); EEPROM.write(10, sernum4); cardMaster = 0; delay(1000); lcd.setCursor(0, 1); lcd.print("Slave 2 salvata!"); delay(3000); standby(); } else if (cardMaster == 1 && slave == 2) { lcd.clear(); lcd.print("Chiave rilevata!"); EEPROM.write(0, 3); EEPROM.write(11, sernum0); EEPROM.write(12, sernum1); EEPROM.write(13, sernum2); EEPROM.write(14, sernum3); EEPROM.write(15, sernum4); cardMaster = 0; lcd.setCursor(0, 1); lcd.print("Slave 3 salvata!"); delay(3000); standby(); } } } rfid.halt(); // Se l'infrarosso rileva un movimento accende il led giallo if (digitalRead(sensorePir1) == HIGH) { digitalWrite(ledGiallo, HIGH); statoPir1=1; } else { digitalWrite(ledGiallo, LOW); statoPir1=0; } // Se l'infrarosso rileva un movimento e l'antifurto e attivo // e quindi non in allarme, attiva l'allarme e memorizza la zona corrispondente. if (digitalRead(sensorePir1) == HIGH && statoAntifurto == 1 && statoAllarme == 0){ allarme(); if (memoriaAllarme == 0) { memoriaAllarme = 1; EEPROM.write(16, 1); // Con questa istruzione salva la zona numero 1 in memoria, } } // Se è stata attivata con la card Master la modalità "Memorizzazione chiavi", // premendo il pulsante di reset si azzera il database // delle chiavi salvate fino a quel momento. if (digitalRead(resetKey) == HIGH && cardMaster == 1) { cardMaster = 0; for (int i=0; i<16; i++){ EEPROM.write(i, 0); } lcd.backlight(); lcd.clear(); lcd.print("Reset chiavi..."); delay(3000); standby(); } // Se si preme il tasto reset mentre la centrale e in standby si potrà visualizzare l'ultima memoria di allarme // se si mantiene premuto invece si effettua un reset if (digitalRead(resetKey) == HIGH && statoAntifurto == 0) { tastoPremuto=1; delay(1000); if (digitalRead(resetKey) == HIGH && statoAntifurto == 0 && tastoPremuto == 1) { tastoPremuto=0; EEPROM.write(16, 0); lcd.backlight(); lcd.clear(); lcd.print("Memoria Allarme:"); lcd.setCursor(0, 1); lcd.print("Reset"); delay(3000); standby(); } else { tastoPremuto=0; lcd.backlight(); lcd.clear(); lcd.print("Memoria Allarme:"); lcd.setCursor(0, 1); if (EEPROM.read(16) > 0) { lcd.print("Zona "); lcd.setCursor(5, 1); lcd.print(EEPROM.read(16)); } else { lcd.print("Nessuna Memoria"); } delay(3000); standby(); } } } void standby() { lcd.clear(); lcd.print("AllarmDuino 2.0"); delay(1000); lcd.noBacklight(); } void allarme() { delay(pausa); statoAllarme = 1; digitalWrite(releSirena,HIGH); lcd.backlight(); lcd.clear(); lcd.print(" ALLARME! "); delay(1000); lcd.noBacklight(); } void attiva() { statoAntifurto=1; digitalWrite(ledRosso, HIGH); lcd.backlight(); lcd.clear(); lcd.print(" ANTIFURTO "); lcd.setCursor(0, 1); lcd.print(" ATTIVO "); delay(1000); lcd.noBacklight(); } void disattiva() { statoAntifurto=0; statoAllarme=0; memoriaAllarme = 0; digitalWrite(ledRosso, LOW); digitalWrite(releSirena, LOW); lcd.backlight(); lcd.clear(); lcd.print(" ANTIFURTO "); lcd.setCursor(0, 1); lcd.print(" DISATTIVO "); delay(2000); standby(); }>>
quote:Risposta al messaggio di macrocd inserito in data 13/02/2015 23:35:16 (Visualizza messaggio in nuova finestra)>> Ho gia letto i numeri della carta, quindi per un ipotetico A1B2C3D4 dovrei mettere cosi?: #define masnum A1B2C3D4 oppure cosi?: #define masnum0 A1 #define masnum1 B2 #define masnum2 C3 #define masnum3 D4