Вам виднее. У меня мнение относительно char сложилось из за имеющегося кода, в нем не нужно лишних блоков прописывать - достаточно только номера карт вписать. Но тот код только для замка, а мне нужно именно присутствие карт на считывателе.
старайтесь выражаться яснее. Каких блоков, куда прописывать?
Логика того, почему байты проще - байтов в номере карты всего 4, а когда вы переведете их в символы - в зависмотсти от записи их станет от 12 до 15. И как, по Вашему, проще сравнивать?
Кстати, еще проще записывать номер карты как 32битное число. Там вообще сравнение в одно действие будет
Вам виднее. У меня мнение относительно char сложилось из за имеющегося кода, в нем не нужно лишних блоков прописывать - достаточно только номера карт вписать. Но тот код только для замка, а мне нужно именно присутствие карт на считывателе.
старайтесь выражаться яснее. Каких блоков, куда прописывать?
Логика того, почему байты проще - байтов в номере карты всего 4, а когда вы переведете их в символы - в зависмотсти от записи их станет от 12 до 15. И как, по Вашему, проще сравнивать?
Кстати, еще проще записывать номер карты как 32битное число. Там вообще сравнение в одно действие будет
мне нужно. чтобы не сложно было добавить новый номер карты. Под "блоками" я имел ввиду, что как в текущем коде, при добавлении нового ключа нужно заново прописывать
if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()){
организуйте карты в массив и читайте их в цикле - и не надо будет для каждой новой карты прописывать столько кода, длина программы от числа карт зависеть не будет вообще.
Я смотрю, вы упорно не желаете исправлять ошибку, на которую я указал. Имеете что-то возразить? :)
организуйте карты в массив и читайте их в цикле - и не надо будет для каждой новой карты прописывать столько кода, длина программы от числа карт зависеть не будет вообще.
Вы про этот массив? Делаю по такому сценарию, вторая карта не реагирует
погодите, мало просто обратится к двумерному массиву, надо перебрать его значения в цикле. А цикла в вашем коде вовсе нет, так что я про двумерность пока помолчу.
Старайтесь разбираться сами. У нас на форуме принято только подсказывать направление, а не делать задачу за новичка.
погодите, мало просто обратится к двумерному массиву, надо перебрать его значения в цикле. А цикла в вашем коде вовсе нет, так что я про двумерность пока помолчу.
Старайтесь разбираться сами. У нас на форуме принято только подсказывать направление, а не делать задачу за новичка.
Если бы знал как решить задачу, разве отвлекал бы вас.
Запутался уже просто))
погодите, мало просто обратится к двумерному массиву, надо перебрать его значения в цикле. А цикла в вашем коде вовсе нет, так что я про двумерность пока помолчу.
Старайтесь разбираться сами. У нас на форуме принято только подсказывать направление, а не делать задачу за новичка.
Если бы знал как решить задачу, разве отвлекал бы вас. Запутался уже просто))
Тут есть два варианта - в зависимости от того, какого хотите добиться результата.
1. Если хотите научиться, отложите эту задачу и возьмите задачу попроще - с которой можете справиться.
2. Если нужна реализация конкретного проекта - то это только в коммерческий раздел "Ищу исполнителя".
Попробовал идти другим путем, но опять проблема с идендификацией карты - либо не реагирует, либо если закоментировать строку 59 - все подряд карты пропускает. Не пойму, что делать
[code]
/*
RFID_RC522 RST -> 9 (RST_pin)
SDA(SS)-> 10 (SDA_pin)
MOSI -> 11 (MOSI_pin)
MISO -> 12 (MISO_pin)
SCK -> 13 (SCK_pin)
3,3В -> 3,3В
GND -> GND
Card UID: BA 6B FE BE карта №1
CC B8 C1 38 карта №2
*/
//#1
/*byte uidCard[][4] = {
{0xBA, 0x6B, 0xFE, 0xBE},
{0xCC, 0xB8, 0xC1, 0x38},
};*/
uint32_t Card;
uint32_t Card1 = 0xBA6BFEBE; //карта 1
uint32_t Card2 = 0xCCB8C138; //карта 2
//
#include <SPI.h>
#include <MFRC522.h>
const int SDA_pin = 10;
const int RST_pin = 9;
const int LOCK = 6; // подключаем реле
uint8_t lamp_ON = 0; // лампа горит 1/ 0 нет
uint8_t rfid_OK = 0; // опознование успешно 1/ 0 нет
MFRC522 rfid(SDA_pin, RST_pin); // Instance of the class
//
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
pinMode(LOCK, OUTPUT); //объявляем пин как выход.
digitalWrite(LOCK, HIGH); //выключаем реле
Serial.println("Поднесите карту к считывателю");
}
//
void loop() {
static uint32_t MILLIS ;
MILLIS = millis() ;
if (! rfid_OK && lamp_ON) {
lamp_ON = 0;
digitalWrite(LOCK, HIGH); //Выключаем реле
Serial.println("CARD_OFF");
}
static uint32_t past_1_1 = 0 ; // время в течении которого идет сброс флага успеш опознования
if (rfid_OK && (MILLIS - past_1_1 >= 100)) rfid_OK = 0; // если в течении 100 миллисек не было успешного опознования
static uint32_t past_1 = 0 ;
if (MILLIS - past_1 >= 20) { // опрос карточки идет каждые 20 миллисек
past_1 = MILLIS ;
if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Card = ((rfid.uid.uidByte[0] * 0x100 + rfid.uid.uidByte[1]) * 0x100 + rfid.uid.uidByte[2]) * 0x100 + rfid.uid.uidByte[3];
if (Card == Card1) {
rfid_OK = 1;
past_1_1 = MILLIS ;
if ( ! lamp_ON) {
lamp_ON = 1;
Serial.println("Card1");
digitalWrite(LOCK, LOW); // Включаем реле
}
if (Card == Card2) {
rfid_OK = 1;
past_1_1 = MILLIS ;
if ( ! lamp_ON) {
lamp_ON = 1;
Serial.println("Card2");
digitalWrite(LOCK, LOW); // Включаем реле*/
}
}
}
}
}
}
[/code]
Вам виднее. У меня мнение относительно char сложилось из за имеющегося кода, в нем не нужно лишних блоков прописывать - достаточно только номера карт вписать. Но тот код только для замка, а мне нужно именно присутствие карт на считывателе.
старайтесь выражаться яснее. Каких блоков, куда прописывать?
Логика того, почему байты проще - байтов в номере карты всего 4, а когда вы переведете их в символы - в зависмотсти от записи их станет от 12 до 15. И как, по Вашему, проще сравнивать?
Кстати, еще проще записывать номер карты как 32битное число. Там вообще сравнение в одно действие будет
Вам виднее. У меня мнение относительно char сложилось из за имеющегося кода, в нем не нужно лишних блоков прописывать - достаточно только номера карт вписать. Но тот код только для замка, а мне нужно именно присутствие карт на считывателе.
старайтесь выражаться яснее. Каких блоков, куда прописывать?
Логика того, почему байты проще - байтов в номере карты всего 4, а когда вы переведете их в символы - в зависмотсти от записи их станет от 12 до 15. И как, по Вашему, проще сравнивать?
Кстати, еще проще записывать номер карты как 32битное число. Там вообще сравнение в одно действие будет
мне нужно. чтобы не сложно было добавить новый номер карты. Под "блоками" я имел ввиду, что как в текущем коде, при добавлении нового ключа нужно заново прописывать
Мне кажется,что где то здесь и есть проблема.
организуйте карты в массив и читайте их в цикле - и не надо будет для каждой новой карты прописывать столько кода, длина программы от числа карт зависеть не будет вообще.
Я смотрю, вы упорно не желаете исправлять ошибку, на которую я указал. Имеете что-то возразить? :)
Я смотрю, вы упорно не желаете исправлять ошибку, на которую я указал. Имеете что-то возразить? :)
Вы про эту ошибку?
организуйте карты в массив и читайте их в цикле - и не надо будет для каждой новой карты прописывать столько кода, длина программы от числа карт зависеть не будет вообще.
Вы про этот массив? Делаю по такому сценарию, вторая карта не реагирует
в строке 13 вы карты прописали в двумерном массиве, а в строке 51 читаете одномерный
в строке 13 вы карты прописали в двумерном массиве, а в строке 51 читаете одномерный
Как я понимаю строка 13 верно написана теперь, а что с 51 нужно сделать, чтобы стала двухмерной?
погодите, мало просто обратится к двумерному массиву, надо перебрать его значения в цикле. А цикла в вашем коде вовсе нет, так что я про двумерность пока помолчу.
Старайтесь разбираться сами. У нас на форуме принято только подсказывать направление, а не делать задачу за новичка.
погодите, мало просто обратится к двумерному массиву, надо перебрать его значения в цикле. А цикла в вашем коде вовсе нет, так что я про двумерность пока помолчу.
Старайтесь разбираться сами. У нас на форуме принято только подсказывать направление, а не делать задачу за новичка.
Если бы знал как решить задачу, разве отвлекал бы вас.
Запутался уже просто))
сорри, у меня пока нет времени расписывать подробно.
сорри, у меня пока нет времени расписывать подробно.
Вот так?
rfid.uid.uidByte[0] == uidCard[][0] &&
rfid.uid.uidByte[1] == uidCard[][1] &&
rfid.uid.uidByte[2] == uidCard[][2] &&
rfid.uid.uidByte[3] == uidCard[][3] ) {
погодите, мало просто обратится к двумерному массиву, надо перебрать его значения в цикле. А цикла в вашем коде вовсе нет, так что я про двумерность пока помолчу.
Старайтесь разбираться сами. У нас на форуме принято только подсказывать направление, а не делать задачу за новичка.
Тут есть два варианта - в зависимости от того, какого хотите добиться результата.
1. Если хотите научиться, отложите эту задачу и возьмите задачу попроще - с которой можете справиться.
2. Если нужна реализация конкретного проекта - то это только в коммерческий раздел "Ищу исполнителя".
У меня желание научиться. Поэтому вроде как выбран не какой нибудь супер сложный проект с кучей датчиков, двигателей и т.д.
ну а цикл-то где?
ну а цикл-то где?
Попробовал идти другим путем, но опять проблема с идендификацией карты - либо не реагирует, либо если закоментировать строку 59 - все подряд карты пропускает. Не пойму, что делать
вы код методом тыка пишете?
вы понимаете, что такое тип uint32_t? вот это что такое у вас? почему множители у каждого байта одинаковые?
и, кстати, это никакой не "другой путь" - у вас опять для каждой карты свой повторяющийся кусок кода.
А если у вас будет 10 карт - так и будете писать 10 условий if (Card == Card1) ... и для каждой копию всех действий?
Отложите проект, почитайте что-нибудь про массивы и циклы, вы пока просто не готовы писать правильно.
Спасибо. Обязательно займусь самообразованием, тем более что это интересно.
Кое что, все таки получилось выжать - работает. Понимаю. что не совсем правильно и удобно, но пока хотя бы так.
Просто примеров как таковых не смог найти, чтобы как вы советуете сделать - не писать по 10 условий.
Ткните хоть примерно.
А тут, то что получилось..
Просто примеров как таковых не смог найти, чтобы как вы советуете сделать - не писать по 10 условий.
Ткните хоть примерно.
Не примеры нужно искать, а учебник читать.