Хранение настроек
- Войдите на сайт для отправки комментариев
Вс, 05/07/2015 - 13:07
Здравсвуйте!
Есть простой счет для работы с 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
Но если использовать карту памяти, то тот кто ее вытащит будет иметь доступ к id каждой карты.
Погуглите "Arduino EEPROM".
спасибо, не знаю почему но раньше думал что при отключении устройства даная память обнуляеться.
Гугл знает )))
Также продумайте, как Arduino будет узнавать об изменениях в списке карточек. Через подключение к компьютеру, удаленно через Ethernet, WiFi, Bluetooth, удаленно через проводной интерфейс и т.п.