Putting a String datatype in EEPROM Arduino UNO ISSUE!


making rfid reader door buzzer , putting string datatype in eeprom comparison upon power loss well.

code: [select]

#include <wire.h>
#include <spi.h>
#include <adafruit_pn532.h>
#include <eeprom.h>

#define pn532_sck  (2)
#define pn532_mosi (3)
#define pn532_ss   (4)
#define pn532_miso (5)

#define ledred (9)
#define ledgreen (10)
#define buzzer (11)
#define door (12)

adafruit_pn532 nfc(pn532_sck, pn532_miso, pn532_mosi, pn532_ss);

string registeredcodes;
void setup(void) { 
 
 
  serial.begin(115200);
  serial.println("hello!");

  pinmode(ledred, output);
  pinmode(ledgreen, output);
  pinmode(buzzer, output);
  pinmode(door, output);   
 
  nfc.begin();

  uint32_t versiondata = nfc.getfirmwareversion();
  if (! versiondata) {
    serial.print("didn't find pn53x board");
    while (1); // halt
  }
  // got ok data, print out!
  serial.print("found chip pn5"); serial.println((versiondata>>24) & 0xff, hex);
  serial.print("firmware ver. "); serial.print((versiondata>>16) & 0xff, dec);
  serial.print('.'); serial.println((versiondata>>8) & 0xff, dec);
     
     
 
 
  // configure board read rfid tags
  nfc.samconfig();
   
  delay(500);
 
  serial.println("waiting card ...");
}

 
void loop(void) {
 
  registeredcodes = eeprom.get(0, registeredcodes); 
  serial.println("registeredcodes:" + registeredcodes);
 
  uint8_t readsuccess;
  uint8_t unregisteredreadsuccess; 
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // buffer store returned uid
  uint8_t uidlength;                        // length of uid (4 or 7 bytes depending on iso14443a card type)
   
  readsuccess = nfc.readpassivetargetid(pn532_mifare_iso14443a, uid, &uidlength);
 
  if(readsuccess) {
    string uidchar ="";
      ( int = 0; < 3; i++ ) {
        uidchar +=  uid[i];
       }
       serial.println("id:"+uidchar);       
    // card read indication.
     for(int i=0; i<3; = i+1) {
      digitalwrite(ledgreen, high);
      digitalwrite(ledred, high);
      digitalwrite(buzzer, high);
      delay(150);   
      digitalwrite(ledgreen, low);
      digitalwrite(ledred, low);   
      digitalwrite(buzzer, low);
      delay(150);
    }
   
    if (uidchar == "53197251") {
       serial.println("mastercard found");
       digitalwrite(ledgreen, high);
       digitalwrite(ledred, high);
       digitalwrite(buzzer, high);
       digitalwrite(door, high);
       delay(250);
       digitalwrite(door, low);       
       serial.println("door unlocked");
           delay(1000);
           serial.println("waiting new card programmed...");
           delay(500);
           uint8_t uidtwo[] = { 0, 0, 0, 0, 0, 0, 0 };
           uint8_t uidlengthtwo;
           unregisteredreadsuccess = nfc.readpassivetargetid(pn532_mifare_iso14443a, uidtwo, &uidlengthtwo);
           
           if(unregisteredreadsuccess){                   
             digitalwrite(ledgreen, low);
             digitalwrite(ledred, low);
             digitalwrite(buzzer, low);             
                string uidchartwo ="";           
                  ( int = 0; < 3; i++ ) {
                    uidchartwo +=  uidtwo[i];           
                   }             
             serial.println("id:"+uidchartwo);
             if(uidchartwo == "53197251"){               
                for(int i=0; i<6; = i+1){
                    digitalwrite(ledgreen, high);
                    digitalwrite(ledred, high);
                    digitalwrite(buzzer, high);
                    delay(100);   
                    digitalwrite(ledgreen, low);
                    digitalwrite(ledred, low);   
                    digitalwrite(buzzer, low);
                    delay(100);
                      }
                      delay(500);
                      registeredcodes = "";                     
                      eeprom.put(0, registeredcodes);
                    digitalwrite(ledgreen, high);                     
                    digitalwrite(ledred, high);
                    digitalwrite(buzzer, high);
                    delay(1500);
                    digitalwrite(ledgreen, low);
                    digitalwrite(ledred, low);
                    digitalwrite(buzzer, low);     
                    serial.println("master-reset completed!");               
                 } else {     
                    delay(500);                   
                    digitalwrite(ledgreen, high);
                    digitalwrite(ledred, high);
                    digitalwrite(buzzer, high);
                    delay(250);
                    digitalwrite(ledgreen, low);
                    digitalwrite(ledred, low);
                    digitalwrite(buzzer, low);
                    delay(500);
                    registeredcodes += uidchartwo;
//                    registeredcodes += ", ";
                    eeprom.put(0, registeredcodes);
                    digitalwrite(ledgreen, high);
                    digitalwrite(buzzer, high);
                    delay(1500);
                    digitalwrite(ledgreen, low);
                    digitalwrite(buzzer, low);
                    serial.println("new card registered!");
                 }
           }                     
           delay(500);             
         
         serial.println("mastercardfunctionended");
    } else if (uidchar == registeredcodes) {   
    // access granted! unlocking door...
      digitalwrite(ledgreen, high);   
    serial.println("access granted");   
      delay(300);       
      digitalwrite(door, high);     
      delay(250);
    serial.println("door unlocked!");
      digitalwrite(door, low);
      delay(300);
      digitalwrite(ledgreen, low);
    }   
    else {     
    // access denied!
    serial.println("access denied");
      digitalwrite(ledred, high);
      digitalwrite(buzzer, high);
      delay(1500);
      digitalwrite(ledred, low);
      digitalwrite(buzzer, low);
    }       
    // delay till next read   
    delay(3000);   
  }
}


the issue eeprom.get messes string. see attached photo serial out.

now see why ask use code tags when posting code?

please edit post add code tags.
here, i've got spare pair - can use these [code][/code]

btw, thread title says "string", description says "string" - there's big difference.


Arduino Forum > Development > Other Software Development > Putting a String datatype in EEPROM Arduino UNO ISSUE!


arduino

Comments