Хранение настроек

alex159
Offline
Зарегистрирован: 01.07.2015

Здравсвуйте! 
Есть простой счет для работы с rfid модулем.

 

#include <SoftwareSerial.h>

#include <avr/pgmspace.h>//Библиотека работы с памятью

prog_char tag_0[] PROGMEM = "565A1132E0CF";//Значение нулевого слота памяти

prog_char tag_1[] PROGMEM = "000000000000";//Значение первого слота памяти

prog_char tag_2[] PROGMEM = "000000000000";//Значение второго слота памяти

prog_char tag_3[] PROGMEM = "000000000000";//Значение третьего слота памяти

prog_char tag_4[] PROGMEM = "000000000000";//Значение четвертого слота памяти

prog_char tag_5[] PROGMEM = "000000000000";//Значение пятого слота памяти

prog_char tag_6[] PROGMEM = "000000000000";//Значение шестого слота памяти

PROGMEM const char *tag_table[] ={tag_0,tag_1,tag_2,tag_3,tag_4,tag_5,tag_6};

SoftwareSerial SoftSerial(2,3);// Подключение RDM6300 к 8 и 9 пинам 

unsigned char buffer[64]; //Описание 64-битного массива буфера

int count=0;//Описание переменной для работы с массивом

char tagNumber[14];

boolean receivedTag;

void setup(){

 SoftSerial.begin(9600);// Запуск RDM6300  

  Serial.begin(9600);//Запуск СОМ-порта

  pinMode(10,OUTPUT);// Указываем порт светодиода "Свой"

  pinMode(11,OUTPUT);}// Указываем порт светодиода "Чужой"

  void loop(){

if (SoftSerial.available()){//Если в RDM6300 есть данные - переписываем из в массив

receivedTag=false;

  while(SoftSerial.available()){//Чтение данных из RDM6300

    int BytesRead = SoftSerial.readBytesUntil(3, tagNumber, 15);

  receivedTag=true;} 

    Serial.print(tagNumber);//Если данных больше нет - записываем значение в порт

     if (checkTag(tagNumber)){// Запрос сравнения значения с тем, что хранится в памяти

      Serial.print(" Svoy");// Если значение есть, значит свой

    digitalWrite(10,HIGH);// Зажигаем диод "Свой"

  delay(1000);// Ждем секунду

  digitalWrite(10,LOW);}// Гасим диод "Свой"

    else{

      Serial.print(" Chuzhoy");// Если значения нет, значит чужой

        digitalWrite(11,HIGH);// Зажигаем диод "Чужой"

  delay(1000);// Ждем секунду

  digitalWrite(11,LOW);}// Гасим диод "Чужой"

    clearBufferArray();//Запуск подпрограммы очистки буфера

    count = 0;//Обнуление переменной массива

    Serial.println();}}//Перевод строки перед записью нового значения

     boolean checkTag(String tag){// Определение значения переменной

   char testTag[14];

   for (int i = 0; i < sizeof(tag_table)/2; i++)

  {strcpy_P(testTag, (char*)pgm_read_word(&(tag_table[i])));

    if(tag.substring(1,13)==testTag){

      return true;// Возвращаем значение "Истина"

      break;}}

   return false;}// Возвращаем значение "Ложь"

void clearBufferArray(){//Подпрограмма очистки буфера

for (int i=0; i<count;i++)

    { buffer[i]=NULL;}}//Обнуление ячейки массива

 

Не удобно то что бы добавить новую карточку нужно перепрограммировать arduino, на ум только приходит работать SD card,  хочеться сделать что то по легче. Есть возможность записи в встроеную флеш память? 

спасибо.

Arduino nano

 

alex159
Offline
Зарегистрирован: 01.07.2015

Но если использовать карту памяти, то тот кто ее вытащит будет иметь доступ к id каждой карты.

Araris
Offline
Зарегистрирован: 09.11.2012

Погуглите "Arduino EEPROM".

alex159
Offline
Зарегистрирован: 01.07.2015

спасибо, не знаю почему но раньше думал что при отключении устройства даная память обнуляеться.

Araris
Offline
Зарегистрирован: 09.11.2012

Гугл знает )))

Также продумайте, как Arduino будет узнавать об изменениях в списке карточек. Через подключение к компьютеру, удаленно через Ethernet, WiFi, Bluetooth, удаленно через проводной интерфейс и т.п.