Mega 2560+ rfid+RTC+SD
- Войдите на сайт для отправки комментариев
Всех приветствую!
Использую железо Mega 2560+ rfid(rdm6300)+RTC+SD
Задача : приложив rfid метку, на sd карту ведется запись кода метки и текущего времени.
На просторах Интернета нашел множество примеров, из которых соорудил такой код
#include <DS1307new.h> #include <Wire.h> unsigned char buffer[21]; // buffer array for data recieve over serial port int count=0; // counter for buffer array const int chipSelect = 53; void setup() { Serial2.begin(9600); // the SoftSerial baud rate Serial.begin(9600); pinMode(led, OUTPUT); if(RTC.isPresent()){ // обнаружен ли модуль? Serial.println("RTC Ready"); // все хорошо } else { Serial.println("Error RTC Module not found"); // сообщаем о проблеме while(1); // и останавливаем скетч } } void loop() { if (Serial2.available()>0) // if date is comming from softwareserial port ==> data is comming from SoftSerial shield { while(Serial2.available()) // reading data into char array { RTC.getTime();// получить время от модуля printTimeToSerial(); // выводим полученное время buffer[count++]=Serial2.read(); // writing data into array if(count == 21)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array count = 0; // set counter of while loop to zero Serial.println(); } } void clearBufferArray() // function to clear buffer array { for (int i=0; i<count;i++) { buffer[i]=NULL; } // clear all index of array with command NULL } // Выводит текущие время в Serial void printTimeToSerial(){ byte static prevSecond=0; // тут будем хранить, сколько секунд было при прошлом отчете if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись Serial.print(RTC.hour); // часы Serial.print(":"); // разделитель Serial.print(RTC.minute); Serial.print(":"); Serial.print(RTC.second); prevSecond=RTC.second; // запомнили когда мы "отчитались" } }
Время в модуль часов я залил заранее.
Все работает, в консоль льется время и номер карты.
После курения мануалов по SD получилось следующее:
Карта нормально инициализируется, создается файл, но в него пишется не совсем то, что нужно, а именно
6:35:56,,53
Две запятые- это для разделения времени и метки карты. Время я писал на SD карту так :
File dataFile = SD.open("datalog4.txt", FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.print(RTC.hour); // часы dataFile.print(":"); // разделитель dataFile.print(RTC.minute); dataFile.print(":"); dataFile.print(RTC.second); dataFile.close();
Вопрос : как мне записать после времени метку карты? Может создать переменную некоторого типа test, и сохранять в нее номер карты,который модуль RFID передает в serial2, а потом делать
dataFile.println(test);
Ткните носом, что именно сделать!
Задача срочная, будет оплачена!
shutlpole@mail.ru
Проверяйте, если все норм - жду оплаты, реквизиты на почте.
Да, все работает. Только если карту чуть дольше подержать, то записывается несколько строк (очень быстро идет считывание). Куда добавить паузу в считывании? 1-2 секунды.
А так же зажигался светодиод, например на 6 пине при записи строки на карту памяти.
Проверил, задержка есть, но не то.
Дело вот в чем : надо считывать , например 1 раз, и сделать паузу в 2-3 секунды.
Тут получается немного не так : на карте и в консоли вот что
Попробуйте так:
Отлично, спасибо!
написал на почту!
А вы работаете с рамкой идущей в комплекте с платой, или устанавливаете отдельный покупной считыватель?
Использую вот такой : http://imall.iteadstudio.com/im120618002.html