Здравствуйте дорогие. Сразу же скажу что у меня есть и в чем проблема. Вот у меня Arduino Uno,RFID модуль (MFRC522),2 метки для модуля,светодиод. Моя задача: 1. когда Arduino получает 10 импульсов и на модуле первая метка - отправить на светодиод 11 импульсов. 2. когда Arduino получает 10 импульсов и на модуле вторая метка - отправить на светодиод 12 импульсов. 3. когда Arduino получает 10 импульсов и на модуле нет метки - отправить на светодиод 10 импульсов. Варианты 1 и 2 у меня работают,но а когда на модуле нет никокой метки,получает импульсы но не отправляет. Как обьяснить Arduino,что дорогой,если на модуле нет никокой метки,сколько импульсов получаешь столько и отправь на светодиод ?? Помогите пожалуйста если можете) Код (C++): #include <SPI.h> #include <MFRC522.h> MFRC522 rfid(10, 9); // пины SDA, RST unsigned long Key, KeyTemp; // для храниения № ключа const int buttonPin = 6; // номер входа, подключенный к кнопке const int ledPin = 7; // номер выхода светодиода boolean lastButten = LOW; // предыдущее состояние кнопки boolean currentButten = LOW; // текущее состояние кнопки int status = 0; // текущий статус void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); // скорость порта SPI.begin(); // инициализация SPI rfid.PCD_Init();} // инициализация rfid модуля boolean debvance (boolean last) //убираем дребизг { boolean current = digitalRead (buttonPin); // считываем данные с кнопки if (last != current) // Если текущее состояни еотличететься от предыдущего { delay (5); // Ждем 5 милисек. current = digitalRead (buttonPin); // Присваеваем текущее состояние кнопки return current; } } void tas(){ currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет { status = ++status; // инвертируем Статус } lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки if (status == 10) //если статус 5 { for (int i=0; i<11; i++){ digitalWrite(ledPin,HIGH); delay(500); digitalWrite(ledPin,LOW); delay(500); } status = 0; } else // усди нажали не 5 раз выключаем светодиод { digitalWrite(ledPin,LOW); delay(20); // Ждем } } void qsan(){ currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет { status = ++status; // инвертируем Статус } lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки if (status == 10) //если статус 5 { for (int i=0; i<12; i++){ digitalWrite(ledPin,HIGH); delay(500); digitalWrite(ledPin,LOW); delay(500); } status = 0; } else // усди нажали не 5 раз выключаем светодиод { digitalWrite(ledPin,LOW); delay(20); // Ждем } } void loop() { if ( ! rfid.PICC_IsNewCardPresent()) {return;}// Поиск нового ключа if ( ! rfid.PICC_ReadCardSerial()) {return;}// Выбор ключа Key = 0; for (byte i = 0; i < rfid.uid.size; i++){// Выдача серийного № ключа KeyTemp = rfid.uid.uidByte[i]; Key = Key * 256 + KeyTemp;} Serial.print("Card №: "); Serial.println(Key); // Выводим № ключа в консоль if( Key == 515280555){ tas(); } if( Key == 1459297918){ qsan(); } }
Код (C++): void loop() { Key = 0; if ( ! rfid.PICC_IsNewCardPresent()) {goto empty;}// Поиск нового ключа if ( ! rfid.PICC_ReadCardSerial()) {goto empty;}// Выбор ключа for (byte i = 0; i < rfid.uid.size; i++){// Выдача серийного № ключа KeyTemp = rfid.uid.uidByte[i]; Key = Key * 256 + KeyTemp;} empty: Serial.print("Card №: "); Serial.println(Key); // Выводим № ключа в консоль if( Key == 515280555){ tas(); } if( Key == 1459297918){ qsan(); } if (0 == Key){ // делаем когда метки нет } }
Все работает брат спосибо очень ,, но есть еще один маленький нюанс подскажи пожалуйста если сможешь ,, как можно это делать: 1. когда Arduino получает 10 импульсов - отправить на светодиод 11 импульсов. 2. а когда Arduino получает 20 импульсов - отправить на светодиод 12 импульсов.
брат работает некорректно не понимаю в чем проблема ,, когда нет метки - должен вызвать функцию in(); когда первая метка - функцию tas(); когда вторая метка - функцию qsan(); бывает , что когда есть один из меток но вызывает функцию in();