Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Progetto allarme con app blynk

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Progetto allarme con app blynk

Messaggioda Foto Utentelupoalberto74it » 13 ago 2021, 14:16

Salve, sono di nuovo alle prese con il mio arduino e la shield ethernet w5100, spero che mi possiate aiutare anche questa volta.
Ho trovato in rete un progetto di allarme che mi piace molto, però nello sketch viene utilizzata un'app creata dall'ideatore del progetto che vorrei eliminare e utilizzare l'app blink per visualizzare le seguenti info:
LCD: quello che viene stampato sul display 16x2 ic2 vorrei viasualizzarlo anche sull'app blink
LED: notifica del pir da visualizzare sull'app
Attivare e disattivare l'allarme dall'app.
Confido in un vostro aiuto. Questo è lo sketch:
Codice: Seleziona tutto
/**
* Centrale antifurto costruita con Arduino. Materiali:
* Arduino UNO, Ethernet Shield chip w5100, display 16x2 con convertitore seriall I2C, lettore RFID RC522, sensore Pir, 2 led colorati, 2 resistenze da 220 ohm ed una da 10 kohm,
* un pulsante, un modulo relè 2 canali, un  buzzer (opzionale).
* Importante, collegare il lettore RFID ai pin di Arduino come segue:
* MOSI: Pin 11 / ICSP-4
* MISO: Pin 12 / ICSP-1
* SCK: Pin 13 / ISCP-3
* SDA: Pin 9
* RST: Pin 8
*/
#include <SPI.h>
#include <RFID.h>
#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Ethernet.h>

#define SS_PIN 9
#define RST_PIN 8

// ***IMPORTANTE*** Inserire il codice della propria chiave master.
#define masnum0 170
#define masnum1 222
#define masnum2 159
#define masnum3 26
#define masnum4 241

#define sensorePir1 6 // Ingresso sensore 1
#define releSirena 7 // Contatto pulito a cui collegare una sirena esterna autoalimentata
#define ledRosso 3 // E' il led che indica lo stato della centrale
#define ledGiallo 4 // E' il led che indica lo stato del sensore 1
#define resetKey 5 // pulsante di reset e visualizzazione memoria di allarme
#define dispositivo1 14 // Uscita relè dispositivo 1

RFID rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27,16,2);

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xAD, 0x54 }; // mac address della ethernet shield
byte ip[] = { 192 ,168 ,1 ,100 }; // indirizzo ip statico locale da assegnare ad arduino
byte gateway[] = { 192 ,168 ,1 ,1 }; // indirizzo ip del router
byte subnet[] = { 255 ,255 ,255 ,0 }; // subnet di default
EthernetServer server(80); // porta da aprire sul router per la comunicazione remota
String readString = String(30);

boolean statoAntifurto = 0; // Variabile antifurto attivo
boolean statoAllarme = 0; // Variabile centrale in allarme
boolean statoSirena = 0; // Variabile di stato del relè sirena
boolean statoPir1 = 0; // Variabile di stato del sensore 1
boolean statoDispositivo1 = 0; // Variabile di stato on/off del relè dispositivo 1
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 zona = 0; // Variabile che memorizza la zona che ha innescato l'allarme
int timerIngUsc = 0; // Variabile utilizzata per scandire i secondi trascorsi durante i tempi di ingresso o uscita
int faseIngUsc = 0; // Variabile che memorizza se si è nella fase di ingresso (1) o uscita (2)
unsigned long previousMillisSirena = 0; // Variabile utilizzata per gestire i millisecondi del tempo di suono della sirena.
unsigned long currentMillisSirena;
unsigned long previousMillisTempi = 0; // Variabile utilizzata per gestire i millisecondi del tempo di ingresso/uscita.
unsigned long currentMillisTempi;

int sernum0;
int sernum1;
int sernum2;
int sernum3;
int sernum4;

void setup()
{
  lcd.init();
  SPI.begin();
  rfid.init();Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);
  pinMode(ledRosso, OUTPUT);
  pinMode(releSirena, OUTPUT);
  pinMode(ledGiallo, OUTPUT);
  pinMode(sensorePir1,INPUT);
  pinMode(resetKey, INPUT);
  pinMode(dispositivo1, OUTPUT);
  digitalWrite(ledRosso, LOW);
  digitalWrite(ledGiallo, LOW);
  digitalWrite(releSirena, HIGH);
  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'antifurto.
                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) {
                             // Se l'antifurto non è inserito, lo attiva ed aggiorna a 2 la variabile "faseIngUsc",
                             // indicando che si è nella fase di uscita. 
                             if (statoAntifurto == 0) { 
                                      statoAntifurto = 1;
                                      faseIngUsc = 2;
                                      lcd.clear();
                                      lcd.print("CHIAVE VALIDA");
                                      delay(2000);
                                      lcd.clear();
                                      lcd.print("     TEMPO      ");
                                      lcd.setCursor(0, 1);
                                      lcd.print("     USCITA     ");
                             }
                             else {
                                   if (faseIngUsc != 0) {
                                      timerIngUsc = 0;
                                      faseIngUsc = 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();

// Inizio blocco per la gestione remota della centrale e dei dispositivi               
EthernetClient client = server.available();
if (client) {
      while (client.connected()) {
                    if (client.available()) {
                               char c = client.read();
                               if (readString.length() < 30) {
                                            readString = readString + c;
                               }
                               if (c == '\n') {
                                         Serial.print(readString); 
                                         client.println("HTTP/1.1 200 OK");
                                         client.println("Content-Type: text/html");
                                         client.println();
                                         // Con il seguente comando la centrale spegne il relè del dispositivo 1.
                                         if(readString.startsWith("GET /?disp1&stato=0")) {
                                                       Serial.print("\n DISP1 OFF \n");
                                                       client.print("DISP1OFF");
                                                       digitalWrite(dispositivo1, HIGH);
                                                       statoDispositivo1=0;
                                         }
                                         // Con il seguente comando la centrale accende il relè del dispositivo 1.
                                         if(readString.startsWith("GET /?disp1&stato=1")) {
                                                       Serial.print("\n DISP1 ON \n");
                                                       client.print("DISP1ON");
                                                       digitalWrite(dispositivo1, LOW);
                                                       statoDispositivo1=1;
                                         }
                                         // Con il seguente comando la centrale disattiva l'antifurto.
                                         if(readString.startsWith("GET /?antifurto&stato=0")) {
                                                       Serial.print("\n ANTIFURTO OFF \n");
                                                       client.print("ANTIOFF");
                                                       disattiva();
                                         }
                                         // Con il seguente comando la centrale attiva l'antifurto.
                                         if(readString.startsWith("GET /?antifurto&stato=1")) {
                                                       Serial.print("\n ANTIFURTO ON \n");
                                                       client.print("ANTION");
                                                       attiva();
                                         }
                                         // Con il seguente comando la centrale risponde con lo stato generale dell'antifurto, quindi anche lo stato delle zone.
                                         if(readString.startsWith("GET /?stato=antifurto")) {
                                                       Serial.print("\n STATO ANTIFURTO \n");
                                                       client.print("Cameretta, ");
                                                       client.print(statoPir1);
                                                       client.print(", ");
                                                       client.print(statoAllarme);
                                                       client.print(", ");
                                                       client.print(statoAntifurto);
                                         }
                                         // Con il seguente comando la centrale risponde solo con lo stato dei sensori
                                         if(readString.startsWith("GET /?stato=sensori")) {
                                                       Serial.print("\n STATO SENSORI \n");
                                                       client.print("Cameretta, ");
                                                       client.print(statoPir1);
                                         }             
                                         // Con il seguente comando la centrale risponde con lo stato generale della centrale e quindi dei dispositivi.
                                         if(readString.startsWith("GET /?stato=centrale")) {
                                                       Serial.print("\n STATO CENTRALE \n");
                                                       client.print("Luce camera, ");
                                                       client.print(statoDispositivo1);
                                                       client.print(", ");
                                                       client.print("Cameretta, ");
                                                       client.print(statoPir1);
                                                       client.print(", ");
                                                       client.print("Stato Antifurto, ");
                                                       client.print(statoAntifurto);
                                                       client.print(", ");
                                                       client.print("Stato Allarme, ");
                                                       client.print(statoAllarme);
                                          }
readString="";
client.stop();
}
}
}
}

// Questa istruzione serve a far capire alla funzione "tempoIngressoUscita" in quale fase ci troviamo.
if ((faseIngUsc == 1) || (faseIngUsc == 2)) {
    tempoIngressoUscita(faseIngUsc);
}
         
  // Quando la centrale va in allarme si attiverà il relè della sirena per X secondi, 60 di default.
if (statoSirena == 1) {
          attivaSirena();
}
// 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, memorizza la zona corrispondente ed aggiorna a 1 la variabile "faseIngUsc",
  // indicando che si è nella fase di ingresso.   
if (digitalRead(sensorePir1) == HIGH && statoAntifurto == 1 && statoAllarme == 0 && faseIngUsc == 0){
          faseIngUsc = 1;
          lcd.clear();
          lcd.print("     TEMPO      ");
          lcd.setCursor(0, 1);
          lcd.print("    INGRESSO    ");
          zona = 1;
}
     
// 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) {
         delay(100);
         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("Antifurto TEC.");
  lcd.setCursor(0, 1);
  lcd.print("Progetto Casa");
  delay(1000);
  lcd.backlight();
}
void allarme() {
  statoAllarme = 1;
  statoSirena = 1;
  if (memoriaAllarme == 0) {
      memoriaAllarme = 1;
      EEPROM.write(16, zona);
  } 
  lcd.backlight();
  lcd.clear();
  lcd.print("    ALLARME!    ");
  delay(1000);
  lcd.backlight();
}
void attiva() {
  statoAntifurto = 1;
  digitalWrite(ledRosso, HIGH);
  lcd.backlight();
  lcd.clear();
  lcd.print("   ANTIFURTO    ");
  lcd.setCursor(0, 1);
  lcd.print("    ATTIVO      ");
  delay(1000);
  lcd.backlight();
}

void disattiva() {
  statoAntifurto = 0;
  statoAllarme = 0;
  memoriaAllarme = 0;
  statoSirena = 0;
  zona = 0;
  digitalWrite(releSirena, HIGH);
  digitalWrite(ledRosso, LOW);
  lcd.backlight();
  lcd.clear();
  lcd.print("   ANTIFURTO    ");
  lcd.setCursor(0, 1);
  lcd.print("   DISATTIVO    ");
  delay(2000);
  standby();
}

void attivaSirena() {
  currentMillisSirena = millis();
  if(currentMillisSirena - previousMillisSirena >= 60000) { // Di default la sirena suonerà per 60 secondi (60 x 1000). Modifica con il numero di secondi che desideri.
       previousMillisSirena = currentMillisSirena;   
       if (digitalRead(releSirena) == HIGH){
            digitalWrite(releSirena, LOW);
       }
       else {
            digitalWrite(releSirena, HIGH);
            statoSirena = 0;
       }
  }   
}

void tempoIngressoUscita(int fase) {
  if (timerIngUsc < 10) {  // Di default i tempi di ingresso/uscita sono impostati a 10 secondi. Modifica con il numero di secondi che desideri.
      currentMillisTempi = millis();
      if(currentMillisTempi - previousMillisTempi >= 500) {
           previousMillisTempi = currentMillisTempi;
           if (digitalRead(ledRosso) == HIGH){
                digitalWrite(ledRosso, LOW);
           }
           else {
                timerIngUsc++;
                // Se desideri avere un beep sonoro che scandisse i secondi, collega al pin 2 un buzzer
                // e de-commenta la riga seguente.
                // tone(2, 1047, 500);
                digitalWrite(ledRosso, HIGH);
           }
       }
  }
  else {
    // Una volta trascorsi i secondi impostati, se si è nella fase di ingresso fa scattare l'allarme,
    // mentre se si è nella fase di uscita attiva l'antifurto.
       faseIngUsc = 0;
       timerIngUsc = 0;
       if (fase == 1) {
         allarme();
       }
       else if (fase == 2) {
         attiva();
       }
         
  }
}
Avatar utente
Foto Utentelupoalberto74it
0 2
 
Messaggi: 16
Iscritto il: 4 ago 2021, 14:39

0
voti

[2] Re: Progetto allarme con app blynk

Messaggioda Foto Utentelelerelele » 14 ago 2021, 16:02

Credo che devi postare il probema, od i singoli problemi, da qua si potrà forse intervenire, difficilmente qualcuno si leggerà l'intero listato che hai postato, ci ho provato ma mi sono arrreso prima della fine.

Inoltre devi pensare che per te sarà tutto chiaro, per un altro utente che non lo conosce, significa impararsi nei particolari il flusso, il che non è molto agevole.

saluti.
Avatar utente
Foto Utentelelerelele
2.872 3 7 9
Expert EY
Expert EY
 
Messaggi: 3280
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[3] Re: Progetto allarme con app blynk

Messaggioda Foto Utentelupoalberto74it » 14 ago 2021, 23:52

Grazie della tua risposta, penso che questo pezzo di codice dovrebbe essere modificato o eliminato e aggiunto quello per far dialogare l'app blynk.

Codice: Seleziona tutto
// Inizio blocco per la gestione remota della centrale e dei dispositivi               
EthernetClient client = server.available();
if (client) {
      while (client.connected()) {
                    if (client.available()) {
                               char c = client.read();
                               if (readString.length() < 30) {
                                            readString = readString + c;
                               }
                               if (c == '\n') {
                                         Serial.print(readString);
                                         client.println("HTTP/1.1 200 OK");
                                         client.println("Content-Type: text/html");
                                         client.println();
                                         // Con il seguente comando la centrale spegne il relè del dispositivo 1.
                                         if(readString.startsWith("GET /?disp1&stato=0")) {
                                                       Serial.print("\n DISP1 OFF \n");
                                                       client.print("DISP1OFF");
                                                       digitalWrite(dispositivo1, HIGH);
                                                       statoDispositivo1=0;
                                         }
                                         // Con il seguente comando la centrale accende il relè del dispositivo 1.
                                         if(readString.startsWith("GET /?disp1&stato=1")) {
                                                       Serial.print("\n DISP1 ON \n");
                                                       client.print("DISP1ON");
                                                       digitalWrite(dispositivo1, LOW);
                                                       statoDispositivo1=1;
                                         }
                                         // Con il seguente comando la centrale disattiva l'antifurto.
                                         if(readString.startsWith("GET /?antifurto&stato=0")) {
                                                       Serial.print("\n ANTIFURTO OFF \n");
                                                       client.print("ANTIOFF");
                                                       disattiva();
                                         }
                                         // Con il seguente comando la centrale attiva l'antifurto.
                                         if(readString.startsWith("GET /?antifurto&stato=1")) {
                                                       Serial.print("\n ANTIFURTO ON \n");
                                                       client.print("ANTION");
                                                       attiva();
                                         }
                                         // Con il seguente comando la centrale risponde con lo stato generale dell'antifurto, quindi anche lo stato delle zone.
                                         if(readString.startsWith("GET /?stato=antifurto")) {
                                                       Serial.print("\n STATO ANTIFURTO \n");
                                                       client.print("Cameretta, ");
                                                       client.print(statoPir1);
                                                       client.print(", ");
                                                       client.print(statoAllarme);
                                                       client.print(", ");
                                                       client.print(statoAntifurto);
                                         }
                                         // Con il seguente comando la centrale risponde solo con lo stato dei sensori
                                         if(readString.startsWith("GET /?stato=sensori")) {
                                                       Serial.print("\n STATO SENSORI \n");
                                                       client.print("Cameretta, ");
                                                       client.print(statoPir1);
                                         }             
                                         // Con il seguente comando la centrale risponde con lo stato generale della centrale e quindi dei dispositivi.
                                         if(readString.startsWith("GET /?stato=centrale")) {
                                                       Serial.print("\n STATO CENTRALE \n");
                                                       client.print("Luce camera, ");
                                                       client.print(statoDispositivo1);
                                                       client.print(", ");
                                                       client.print("Cameretta, ");
                                                       client.print(statoPir1);
                                                       client.print(", ");
                                                       client.print("Stato Antifurto, ");
                                                       client.print(statoAntifurto);
                                                       client.print(", ");
                                                       client.print("Stato Allarme, ");
                                                       client.print(statoAllarme);
                                          }
readString="";
client.stop();
}
}
}
}

Io ho provato con gli esempi di blynk ad esempio quello del display copiando parte del codice ma non riesco a capire quali comandi devo usare per inserirlo. In pratica questo:
Codice: Seleziona tutto
void standby() {
  lcd.clear();
  lcd.print("Antifurto TEC.");
  lcd.setCursor(0, 1);
  lcd.print("Progetto Casa");
  delay(1000);
  lcd.backlight();
}

dovrebbe apparire anche sull'app blynk. Oppure:
Codice: Seleziona tutto
if (digitalRead(sensorePir1) == HIGH) {
          digitalWrite(ledGiallo, HIGH);
          statoPir1=1;
}
else {
           digitalWrite(ledGiallo, LOW);
           statoPir1=0;
     }

Il led giallo che lampeggi anche sull'app blynk.
Sto diventando pazzo con questa app... :? :(
Vi ringrazio per la pazienza.
Avatar utente
Foto Utentelupoalberto74it
0 2
 
Messaggi: 16
Iscritto il: 4 ago 2021, 14:39

0
voti

[4] Re: Progetto allarme con app blynk

Messaggioda Foto Utentelupoalberto74it » 15 ago 2021, 15:44

Sono riuscito finalmente a venire a capo di qualcosa. Sono riuscito a far funzionare la visualizzazione sull'app blynk del display solo che non riesco a far visualizzare anche sul display fisico (LCD16x2 ic2) perché i comandi del blynk sono diversi da quelli del LiquidCrystal_I2C.
Esempio blynk:
Codice: Seleziona tutto
lcd.clear();
lcd.print(0, 0, "CHIAVE VALIDA");
delay(2000);


Esempio LiquidCrystal_I2C:
Codice: Seleziona tutto
lcd.clear();
lcd.print("     TEMPO      ");
lcd.setCursor(0, 1);
lcd.print("     USCITA     ");


Se inserisco tutti e 2 i comandi vanni in conflitto, come potrei fare per far coesistere le 2 serie di comandi?
Avatar utente
Foto Utentelupoalberto74it
0 2
 
Messaggi: 16
Iscritto il: 4 ago 2021, 14:39

1
voti

[5] Re: Progetto allarme con app blynk

Messaggioda Foto UtenteGioArca67 » 15 ago 2021, 17:09

Mi sembra tu stia confondendo oggetto e variabile.

lcd dell'esempio blynk è una istanza di WidgetLCD:
Codice: Seleziona tutto
WidgetLCD lcd(V1);

mentre nell'esempio della centrale allarme è istanza di LiquidCrystal_I2C:
Codice: Seleziona tutto
LiquidCrystal_I2C lcd(0x27,16,2);

per cui non funziona se non cambi nome ad una variabile (es. quella per blynk la chiami lcd_b) e quindi fai:
Codice: Seleziona tutto
WidgetLCD lcd_b(V1);

ed ovviamente usi di conseguenza le variabili corrette in tutti i punti che ti servono:
Codice: Seleziona tutto
lcd.clear();
lcd.print("     TEMPO      ");
lcd.setCursor(0, 1);
lcd.print("     USCITA     ");

lcd_b.clear();
lcd_b.print(0, 0, "CHIAVE VALIDA");
delay(2000);
Avatar utente
Foto UtenteGioArca67
820 3 6
Expert
Expert
 
Messaggi: 620
Iscritto il: 12 mar 2021, 9:36

0
voti

[6] Re: Progetto allarme con app blynk

Messaggioda Foto Utentelupoalberto74it » 15 ago 2021, 23:04

Grazie GioArca67...mi hai salvato dalla pazzia... :D :ok:
Ora faccio delle prove anche con la visualizzazione del led. Per quanto riguarda invece avere delle notifiche sull'app blynk di quando l'antifurto scatta si può?...
Avatar utente
Foto Utentelupoalberto74it
0 2
 
Messaggi: 16
Iscritto il: 4 ago 2021, 14:39

0
voti

[7] Re: Progetto allarme con app blynk

Messaggioda Foto UtenteGioArca67 » 15 ago 2021, 23:17

Fra gli esempi di blynk ci sono notifiche push
Avatar utente
Foto UtenteGioArca67
820 3 6
Expert
Expert
 
Messaggi: 620
Iscritto il: 12 mar 2021, 9:36

0
voti

[8] Re: Progetto allarme con app blynk

Messaggioda Foto Utentelupoalberto74it » 20 ago 2021, 19:22

Sono riuscito ad avere le notifiche quando il sensore pir rileva un movimento. Ora l'ultima cosa che vorrei aggiungere per completare il progetto è attivare e disattivare l'antifurto bypassando l'inserimento delle chiavi dall' RFID, premendo un pulsante da blynk. E fattibile? Avete qualche suggerimento?
Come sempre grazie in anticipo. :D
Avatar utente
Foto Utentelupoalberto74it
0 2
 
Messaggi: 16
Iscritto il: 4 ago 2021, 14:39

0
voti

[9] Re: Progetto allarme con app blynk

Messaggioda Foto UtenteGioArca67 » 20 ago 2021, 20:08

Si
Usa le funzioni attiva() e disattiva()
Avatar utente
Foto UtenteGioArca67
820 3 6
Expert
Expert
 
Messaggi: 620
Iscritto il: 12 mar 2021, 9:36

0
voti

[10] Re: Progetto allarme con app blynk

Messaggioda Foto Utentelupoalberto74it » 26 ago 2021, 12:04

Esiste già una parte di codice attiva e disattiva devo modificare quella?
Codice: Seleziona tutto
void attiva() {
  statoAntifurto = 1;
  digitalWrite(ledRosso, HIGH); // cambiare in HIGH
  lcd.backlight();
  lcd.clear();
  lcd.print("   ANTIFURTO    ");
  lcd.setCursor(0, 1);
  lcd.print("    ATTIVO      ");
  lcd_b.clear();
  lcd_b.print(0, 0, "   ANTIFURTO    ");
  lcd_b.print(0, 1, "    ATTIVO      ");
  digitalWrite(ledRosso, LOW);
  delay(1000);
  lcd.backlight();
}

void disattiva() {
  statoAntifurto = 0;
  statoAllarme = 0;
  memoriaAllarme = 0;
  statoSirena = 0;
  zona = 0;
  digitalWrite(releSirena, HIGH);
  digitalWrite(ledRosso, LOW);
  lcd.backlight();
  lcd.clear();
  lcd.print("   ANTIFURTO    ");
  lcd.setCursor(0, 1);
  lcd.print("   DISATTIVO    ");
  lcd_b.clear();
  lcd_b.print(0, 0, "   ANTIFURTO    ");
  lcd_b.print(0, 1, "   DISATTIVO    ");
  delay(2000);
  standby();
}
Avatar utente
Foto Utentelupoalberto74it
0 2
 
Messaggi: 16
Iscritto il: 4 ago 2021, 14:39

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti