Problema Memoria?

Buongiorno, ho realizzato un lettore RFID per una elettroseraatura ma ho un problema. Il circuito e lo sketch funzionano abbastanza bene ma dopo un pò di tempo (12 ore circa) sono obbligato a riavviare la scheda (MICRO PRO 5v) per far si che tutto torni a funzionare. Da cosa può dipendere? Grazie Mille

#include <SPI.h>
#include <RFID.h>

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN,RST_PIN);

const int Relay=3;
int serNum[5];
int cards[][5] = {
  {135,115,38,131,81}
  
};



void setup(){

    Serial.begin(9600);
    SPI.begin();
    rfid.init();
    pinMode(Relay, OUTPUT);

}

void loop(){

  digitalWrite (Relay, LOW);
    
    if(rfid.isCard()){
    
        if(rfid.readCardSerial()){
            Serial.print(rfid.serNum[0]);
            Serial.print(" ");
            Serial.print(rfid.serNum[1]);
            Serial.print(" ");
            Serial.print(rfid.serNum[2]);
            Serial.print(" ");
            Serial.print(rfid.serNum[3]);
            Serial.print(" ");
            Serial.print(rfid.serNum[4]);
            Serial.println("");
            
            for(int x = 0; x < sizeof(cards); x++){
              for(int i = 0; i < sizeof(rfid.serNum); i++ ){
                  if(rfid.serNum[i] != cards[x][i]) {
                      access = false;
                      break;
                  } else {
                      access = true;
                  }
              }
              if(access) break;
            }
           
        }
        
       if(access){
    Serial.println("Authorized access");
    Serial.println();
    digitalWrite (Relay, HIGH);
    delay(100);
    digitalWrite (Relay, LOW);
    delay(3000);
           
           
      } else {
             Serial.println (" Access denied");
    digitalWrite (Relay, LOW);
    delay(500);      
       }        
    }
    
    
    
    rfid.halt();

}

In parecchi siti ho letto che i lettori RFID sono a 3,3V possono funzionare con i 5V ma a lungo andare li puoi danneggiare o comunque avere problemi di instabilità. Non solo devi alimentarlo a 3,3V ma anche i segnali tra un arduino a 5V e un apparecchio a 3,3V devono essere "adeguati" con un chip/modulo adattarore di livelli

lol beccato!

come ti ho risposto su fb non sono convinto dei tuoi cicli for mi sa che se l'ultima cifra del code e del rfid combaciano... la porta si apra :slight_smile:

... a prescindere dal tuo problema di blocco

@federik87
c'e' anche un grosso errore. sizeof() da solo ti dice solo quanti byte occupa quella variabile/vettore
NON quanti elementi ci sono nel vettore.
sizeof() la puoi usare di "brutto" su array di char o di byte. Su array di int ritorna il doppio di quello che ti aspetti perchè su Arduino 1 int = 2 byte
Quindi:

for(int x = 0; x < sizeof(cards)/2; x++){

dividi per due oppure

for(int x = 0; x < sizeof(cards)/sizeof(cards[0]); x++){

nid69ita:
c'e' anche un grosso errore. sizeof() da solo ti dice solo quanti byte occupa quella variabile/vettore
NON quanti elementi ci sono nel vettore.

Esatto. Tra l'altro "cards" è a due dimensioni...
Ma dato che lui dimensiona quegli array con 5 elementi, perché usare sizeof e non direttamente la dimensione (anche per evitare sforamenti di indice)???

Una cosa del tipo:

  ...
#define LEN_CODE 5
int serNum[LEN_CODE];
int cards[][LEN_CODE] = {
  {135,115,38,131,81}
};
  ...
            access = false;
            for(int x = 0; x < LEN_CODE; x++){
              for(int i = 0; i < LEN_CODE; i++ ){
                  if(rfid.serNum[i] != cards[x][i])
                      break;
                  else
                      access = true;
              }
              if(access) break;
            }
  ...

Io non ho mai usato gli RFID ma se la dimensione dei codici è fissa, non vedo controindicazioni.

Neanche io ho mai usato gli RFID, per cui ho un po di domande:

  1. ti consiglio di commentare il codice mostrando cosa vorresti far fare alle varie parti, si che anche per un eventuale non esperto (come me) dell'uso degli RFID sia possibile capire cosa stai facendo con i vari pezzi di codice.
  2. cito tue parole: " Il circuito e lo sketch funzionano abbastanza bene ma dopo un pò di tempo (12 ore circa) sono obbligato a riavviare la scheda (MICRO PRO 5v) per far si che tutto torni a funzionare."
    A) Cosa intendi con "abbastanza bene"
    B) Cosa intendi con "perché tutto torni a funzionare"? Come si comporta?
  3. Come fa (funzione e formato) il lettore ad inviare il numero della scheda letta?

Chiedo perdono della mia ignoranza, ma sono molto curioso

Intanto vi ringrazio tutti per le risposte.
Come prima cosa inizierò a fare in modo di alimentare tutti i componenti con il relativo voltaggio per vedere se fosse anche quello il problema, dopo di che seguirò anche il consiglio di rivedere i cicli "for" (anche se il cancello si apre alla perfezione per un tempo limitato).
Grazie per i consigli su "sizeof" e "int" e "array" inizierò a studiarli un pò meglio e seguirò i vostri consigli.

Grazie Silente, per abbastanza bene intendo che il circuito è già montato sul cancello e non appena passo il giusto Tag il cancello si apre perfettamente, poi ho effettuato l'ultima apertura intorno alle 20 e il mattino dopo ancora funzionava ma quando sono tornato all'ora di pranzo non leggeva più il Tag e ho dovuto riavviare Il Mirco Pro