Apriporta RFID con arduino uno

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto Utentexyz, Foto UtenteWALTERmwp

Avatar utente
Foto Utentenicsergio
4.701 3 9 13
Master
Master
Messaggi: 938
Iscritto il: 1 gen 2020, 15:42
Contatta:

Messaggio da Foto Utentenicsergio »

GioArca67 ha scritto:poco male

mfrc522.uid.size*sizeof(int)

:D :twisted: :D
non ci siamo ancora, non basta allargare l'area di confronto :D
le aree di memoria non sono confrontabili, con mfrc522.uid.uidByte hai i valori in byte contigui, con code invece no
Avatar utente
Foto UtenteGioArca67
4.600 4 6 9
Master EY
Master EY
Messaggi: 4606
Iscritto il: 12 mar 2021, 8:36

Messaggio da Foto UtenteGioArca67 »

Eh! Sì, avevo letto tutto int...
Avatar utente
Foto Utentelupoalberto74it
10 3
Messaggi: 42
Iscritto il: 4 ago 2021, 14:39

Messaggio da Foto Utentelupoalberto74it »

Grazie a tutti per le risposte, dopo vari tentativi sono riuscito a inserire le righe di comando che mi avete scritto. Ora funziona bene come volevo io :ok:
Avatar utente
Foto UtenteGioArca67
4.600 4 6 9
Master EY
Master EY
Messaggi: 4606
Iscritto il: 12 mar 2021, 8:36

Messaggio da Foto UtenteGioArca67 »

Prego.
Però cambierei da int a byte il tipo dell'array code, e corrispondente dove serve a seguire (es. il casting a int nel controllo)
Avatar utente
Foto Utentelupoalberto74it
10 3
Messaggi: 42
Iscritto il: 4 ago 2021, 14:39

Messaggio da Foto Utentelupoalberto74it »

Ciao...sono ritornato di nuovo su questo argomento perché ho dei problemi con il relè che ho sostituito ne ho messo uno low level trigger. Il problema è il seguente:

dando corrente all'arduino il relè mi rimane sollecitato, quindi fa passare corrente e rimane così, se invece gli passo una volta il tag rfid non fa passare corrente e rimane così, se invece gli passo una terza volta il tag fa il suo lavoro (quindi sollecita il relè e poi smette per il tempo che gli ho impostato).

Quello che vorrei io è che quando la corrente che alimenta l'arduino dovesse mancare e poi ripristinarsi il relè sia spento e non subito acceso. Come posso fare per ovviare questo inconveniente?
ps.: ho provato a intervenire su:

Codice: Seleziona tutto

              digitalWrite (rele, LOW); 
              delay (700);     
              digitalWrite (rele, HIGH);
Ma senza risultato...
Avatar utente
Foto UtenteGioArca67
4.600 4 6 9
Master EY
Master EY
Messaggi: 4606
Iscritto il: 12 mar 2021, 8:36

Messaggio da Foto UtenteGioArca67 »

Ma se non posti il codice come facciamo?
Avatar utente
Foto Utentelupoalberto74it
10 3
Messaggi: 42
Iscritto il: 4 ago 2021, 14:39

Messaggio da Foto Utentelupoalberto74it »

Scusate...mi sono dimenticato... :(

Codice: Seleziona tutto

#include <SPI.h> 

#include <MFRC522.h>

#include <Wire.h> 

#include <LiquidCrystal_I2C.h>


#define SS_PIN 10 

#define RST_PIN 9 


#define LED_DENIED_PIN 7

#define LED_ACCESS_PIN 6

#define LED_AUTORIZED_PIN 4

#define rele 2

#define MAXSCHEDE 5

LiquidCrystal_I2C lcd(0x27,16,2);

MFRC522 mfrc522(SS_PIN, RST_PIN); 


int code[MAXSCHEDE][4] = {{xx,xxx,xx,xx},
{xx,xxx,xx,xxx},
{xxx,xx,xxx,xxx},
{xxx,xxx,xx,xxx},
{xx,xxx,xx,xx}};

int codeRead = 0;

void setup() {

   Serial.begin(9600);
   
   SPI.begin();       

   mfrc522.PCD_Init(); 

   Serial.println("Arduino RFID reading UID");



   pinMode( LED_DENIED_PIN , OUTPUT); 

   pinMode( LED_ACCESS_PIN , OUTPUT);

   pinMode( LED_AUTORIZED_PIN , OUTPUT);

   pinMode(rele, OUTPUT); 
         


   lcd.init();

  

  lcd.backlight();

  lcd.setCursor(0,0);

  lcd.print("IT Benvenuto");
  Serial.println("IT Benvenuto");
  lcd.setCursor(0,1);

  lcd.print("ES Bienvenidos");
  Serial.println("ES Bienvenidos");
}
void loop() {

  

if ( mfrc522.PICC_IsNewCardPresent())

    {

        if ( mfrc522.PICC_ReadCardSerial())

        {

           lcd.clear();

           Serial.print("Tag UID:");

           lcd.setCursor(0,0);

           lcd.print("Tag UID:");

           lcd.setCursor(0,1);


           for (byte i = 0; i < mfrc522.uid.size; i++) {  

                  Serial.print(mfrc522.uid.uidByte[i] < 0x27 ? " 0" : " "); 

                  Serial.print(mfrc522.uid.uidByte[i], HEX);

                  

                  lcd.print(mfrc522.uid.uidByte[i] < 0x27 ? " 0" : " ");

                  lcd.print(mfrc522.uid.uidByte[i], HEX);

                //  lcd.print(" ");

            }
 int i = 0;

            boolean match = false;
        for(int sch=0;sch<MAXSCHEDE&&!match;sch++)
        {
            int i=0;
            match = true;
            while(i<mfrc522.uid.size)
            {
                if(!(int(mfrc522.uid.uidByte[i]) == int(code[sch][i])))
                  {
                     match = false;
                   }
                  i++;
}
}

            delay(2000);

           lcd.clear();

           lcd.setCursor(0,0);

           

           

           if(match)

           {

              digitalWrite( LED_ACCESS_PIN , HIGH);
              
              lcd.print("Accesso Valido");
              lcd.setCursor(0,1);
              lcd.print("Porta Aperta");

              Serial.println("\Accesso Valido");

              digitalWrite( LED_AUTORIZED_PIN, HIGH);

              digitalWrite (rele, LOW); 
              delay (1000);     
              digitalWrite (rele, HIGH); 

              digitalWrite( LED_AUTORIZED_PIN, LOW);
 }else{

              digitalWrite( LED_DENIED_PIN , HIGH);
              
              lcd.print("Carta Errata");
              lcd.setCursor(0,1);
              lcd.print("Accesso Negato"); 

             Serial.println("\Carta Errata");

           }

             

             Serial.println("============================");

            

             mfrc522.PICC_HaltA();
             



             delay(1000); 

             reset_state();

       }

  }

 }

 void reset_state()

 {

    lcd.clear();

    lcd.setCursor(0,0);

    lcd.print("IT Benvenuto");
    Serial.println("IT Benvenuto");
    lcd.setCursor(0,1);
    lcd.print("ES Bienvenidos");
    Serial.println("ES Bienvenidos");
    

    digitalWrite( LED_ACCESS_PIN , LOW);

    digitalWrite( LED_DENIED_PIN , LOW);

 }
Avatar utente
Foto UtenteLorisP
390 1 3 5
Stabilizzato
Stabilizzato
Messaggi: 304
Iscritto il: 10 ago 2021, 17:43

Messaggio da Foto UtenteLorisP »

Discussione interessantissima :ok:

Ringrazio e mi inserisco, in punta di piedi, per imparare qualcosa di più su Arduino
O_/
Avatar utente
Foto Utentenicsergio
4.701 3 9 13
Master
Master
Messaggi: 938
Iscritto il: 1 gen 2020, 15:42
Contatta:

Messaggio da Foto Utentenicsergio »

È sufficiente inizializzare il comando del relè all'avvio, appena prima della configurazione del pin di uscita, nella funzione setup() :

Codice: Seleziona tutto

digitalWrite(rele, HIGH);
pinMode(rele, OUTPUT);
Avatar utente
Foto Utentelupoalberto74it
10 3
Messaggi: 42
Iscritto il: 4 ago 2021, 14:39

Messaggio da Foto Utentelupoalberto74it »

Grazie ho risolto...Io avevo provato ma mettendo LOW al posto di HIGH e per quello che non riuscivo...grazie di nuovo :ok:
Rispondi

Torna a “Arduino”