Хранение настроек
- Войдите на сайт для отправки комментариев
Вс, 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, удаленно через проводной интерфейс и т.п.