Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Lettore tag rfid rc522

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[21] Re: Lettore tag rfid rc522

Messaggioda Foto UtenteThEnGi » 30 apr 2023, 19:06

teletommy ha scritto:Puoi indicarmi come fare per far andare il pin a livello "low" anzichè "High" per 1 secondo circa (non è poi così importante il tempo di low)


Codice: Seleziona tutto
//Nella zona di setup
pinMode(PIN, OUTPUT);
digitalWrite(PIN, HIGH); // Porto il pin a 1 (stato normale)
....
....
....
....
//Nel loop o nella tua funzione
digitalWrite(PIN, LOW); //Pin a 0
dealy(1000); // Aspetta 1 Sec, Bloccante !
digitalWrite(PIN, HIGH); //Pin a 1


Da implementare nel tuo codice, se non devi fare altro puoi usare delay !
Non sono un fan di delay, ma per una cosa così può anche andare bene, sappi che se uno passa un'altra carta mentre il programma è all'interno della funzione delay non recepisci l'input
O_/
Ultima modifica di Foto UtenteThEnGi il 30 apr 2023, 19:21, modificato 3 volte in totale.
Avatar utente
Foto UtenteThEnGi
2.230 3 6 9
Expert EY
Expert EY
 
Messaggi: 2228
Iscritto il: 6 ott 2022, 18:43

0
voti

[22] Re: Lettore tag rfid rc522

Messaggioda Foto UtenteGioArca67 » 30 apr 2023, 19:10

Tutti i led? Anche quello rosso?

Se sì :
Nel setup subito dopo
Codice: Seleziona tutto
   pinMode(greenLedPins[i], OUTPUT);

e prima della graffa chiusa
aggiungi
Codice: Seleziona tutto
   digitalWrite(greenLedPins[i], HIGH);

Idem subito dopo quella del led rosso
Codice: Seleziona tutto
   digitalWrite(RED_LED_PIN, HIGH);

così imposti le uscite alte.

Poi nella blinkLed scambi HIGH e LOW
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

1
voti

[23] Re: Lettore tag rfid rc522

Messaggioda Foto UtenteGioArca67 » 30 apr 2023, 19:14

Foto UtenteThEnGi forse al posto di [code] hai usato [quote]
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

0
voti

[24] Re: Lettore tag rfid rc522

Messaggioda Foto UtenteThEnGi » 30 apr 2023, 19:15

:oops: :oops:
EDIT: Mancava anche un ";"
Avatar utente
Foto UtenteThEnGi
2.230 3 6 9
Expert EY
Expert EY
 
Messaggi: 2228
Iscritto il: 6 ott 2022, 18:43

0
voti

[25] Re: Lettore tag rfid rc522

Messaggioda Foto UtenteGioArca67 » 30 apr 2023, 19:33

... e come ha giustamente fatto ThEnGi puoi togliere il secondo delay

Fai attenzione che la blinkLed viene chiamata con un parametro (duration) che non usi.
Potrebbe essere utile sostituire il 1000/2 nel delay con duration, e quando chiami la funzione metti nel secondo parametro il tempo in cui ti serve il pin basso.
Inoltre ormai cambierei il nome alla funzione blinkLed ed ai pin LED...
Avatar utente
Foto UtenteGioArca67
4.580 4 6 9
Master EY
Master EY
 
Messaggi: 4592
Iscritto il: 12 mar 2021, 9:36

0
voti

[26] Re: Lettore tag rfid rc522

Messaggioda Foto Utenteteletommy » 1 mag 2023, 11:09

Grazie amici, ci provo in giornata e faccio sapere. Spero di aver capito tutto. Grazie ancora a voi
Avatar utente
Foto Utenteteletommy
955 1 1 7
New entry
New entry
 
Messaggi: 65
Iscritto il: 1 mag 2012, 16:29

0
voti

[27] Re: Lettore tag rfid rc522

Messaggioda Foto Utentedjnz » 1 mag 2023, 18:16

...poi bisognerebbe sostituire le stringhe dinamiche C++ (oggetti String) con "normali" stringhe C (array di char null terminated), per evitare la frammentazione della (poca) memoria e il conseguente blocco imprevedibile di Arduino sul medio/lungo periodo :roll:

Se non ho sbagliato qualcosa questo potrebbe essere un modo:

Codice: Seleziona tutto
#include <MFRC522.h>
const uint8_t RED_LED_PIN = 1;
const uint8_t GREENLEDS[] = { 2, 3, 4, 5, 6, 7, 8 };
const uint8_t MAXBUF = 15;     // lunghezza chiavi + 1
const uint8_t USERSNUM = 7;    // quantita`chiavi conosciute
char readUid[MAXBUF] = { 0 };  // uid ricevuto
MFRC522 rfid(10, 9);

// array chiavi conosciute
const char users[USERSNUM][MAXBUF] = { "0475d5b8700000",
                                       "049abab6700000",
                                       "04b9bab6700000",
                                       "04d9bab6700000",
                                       "04f7bab6700000",
                                       "04c3c0b6700000",
                                       "04e2c0b6700000" };

//--------------------------------------------------------------

void setup()
{
  uint8_t i;

  SPI.begin();
  rfid.PCD_Init();
  pinMode(RED_LED_PIN, OUTPUT);
  for (i = 0; i < USERSNUM; i++)
    pinMode(GREENLEDS[i], OUTPUT);
}

//--------------------------------------------------------------

void loop()
{
  int8_t n;

  if (rfid.PICC_IsNewCardPresent() &&
      rfid.PICC_ReadCardSerial())
  {
    getUID(readUid);
    rfid.PICC_HaltA();
    n = checkUID(readUid);
    if (-1 == n)
      blinkLed(RED_LED_PIN, 250, 8);
    else
      blinkLed(GREENLEDS[n], 1000, 1);
  }
  delay(50);
}

//--------------------------------------------------------------

void getUID(char u[])
{
  uint8_t j = 0;
  uint8_t i;
  uint8_t n;

  for (i = 0; i < rfid.uid.size; i++)
  {
    n = rfid.uid.uidByte[i];
    u[j] = toHex(n >> 4);
    j += j < (MAXBUF - 1);
    u[j] = toHex(n & 15);
    j += j < (MAXBUF - 1);
  }
  u[j] = 0;
}

//--------------------------------------------------------------

char toHex(uint8_t n)
{
  return (n < 10)  ?  n + '0'  :  n - 10 + 'a';
}

//--------------------------------------------------------------

int8_t checkUID(char u[])
{
  uint8_t i;

  for (i = 0; i < USERSNUM; i++)
    if (0 == strcmp(users[i], u))
      return i;
  return -1;
}

//--------------------------------------------------------------

void blinkLed(uint8_t led, uint16_t duration, uint8_t repeat)
{
  uint8_t n;

  for (n = 0; n < repeat; n++)
  {
    digitalWrite(led, HIGH);
    delay(duration);
    digitalWrite(led, LOW);
    if (n < repeat-1)
      delay(duration);
  }
}

//--------------------------------------------------------------
Una domanda ben posta è già mezza risposta.
Avatar utente
Foto Utentedjnz
1.590 1 4 7
Master
Master
 
Messaggi: 709
Iscritto il: 26 lug 2020, 14:52

0
voti

[28] Re: Lettore tag rfid rc522

Messaggioda Foto Utenteridiculouslab » 17 mag 2023, 19:10

Buongiorno a tutti.
Se può essere di spunto ho usato lo stesso rc522 con un microcontrollore PIC.
Sul mio sito a questo link puoi scaricare il codice in c..
https://www.ridiculouslab.com/arguments/iot/rfid/rfid.php

Il codice non sarà molto bello ma funge..
Avatar utente
Foto Utenteridiculouslab
10 1
 
Messaggi: 9
Iscritto il: 19 mag 2020, 22:21

Precedente

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti