Любые NFC карты и брелки. занесённые в память . дают команду электро мотору Открыть или закрыть.. Помогите разобраться, всё работало, хотел добавить код, чтоб открывать, дистанционно через Блютуз. через блютуз не работает, а по картам всё продолжает срабатывать. в чём остановка. если зарэмить обработку, работу по картам, то блютуз команды проходят, и замок срабатывает. Пожалуйста Подскажите что тут не так. Код (C++): #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C lcd(0x27,16,2); // SDA - A4; SCL - A5 // два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде. // !(SS - он же - SDA). #define SS_PIN 10 #define RST_PIN 9 #define ted 5 // замок с мотором #5 #define bet 6 // замок с мотором //int but =0; int Rkod; MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; void setup() { // ********************************************************** Serial.begin(9600); // Initialize serial communications with the PC. Serial.println("Prilozhite kartu ."); // lcd.init(); // Активировать дисплей // lcd.backlight(); // подсветка дисплея // lcd.print(" Zamok Nevidimka"); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. pinMode(ted , OUTPUT); pinMode(bet , OUTPUT); } void loop() { // **************************************************************** // Поиск новой карточки / Look for new cards. if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор карточки / Select one of the cards. if ( ! mfrc522.PICC_ReadCardSerial()) { uidDec = 0; // Выдача серийного номера карточки "UID". for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec*256+uidDecTemp; } Serial.println("Serijnyj nomer karty : "); Serial.print(uidDec); // ------------------------ if (uidDec == 124хххххх) { Serial.println(" Hi Sergey"); digitalWrite(ted, HIGH); // lcd.setCursor(5, 1); // lcd.print(" Sergey "); } else // если "UID" номер карты не совпал. { // digitalWrite(ted, LOW); // lcd.setCursor(0, 1); // lcd.print(" ALARM *****"); delay(30000); // пауза 30 секунды. } } // - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - - if (Serial.available() >0 ) { //если пришли данные Rkod = Serial.parseInt(); // считываем байт Serial.read(); Serial.print(Rkod); Serial.println(); } if ( Rkod == 125 ) { // -------------------------------- digitalWrite(ted, HIGH); delay(100); digitalWrite(ted, LOW); // lcd.setCursor(0, 1); // lcd.print("OTKRITO po Radio");} Serial.print(" Pabotaet "); /* Serial.println("===== "); but = analogRead(0); // Кнопка или датчик возврата замка if ( but >700); {digitalWrite(tet,HIGH); delay(100); digitalWrite(tet,LOW); } //Serial.println("Rabotaet "); */ delay(2000); // пауза 3 секунды. } }
зачем пауза в конце? Ведь во время нее может придти код, который будет проигнорирован. Код (C++): #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C lcd(0x27,16,2); // SDA - A4; SCL - A5 // два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде. // !(SS - он же - SDA). #define SS_PIN 10 #define RST_PIN 9 #define TED_PIN 5 // замок с мотором #5 #define BET_PIN 6 // замок с мотором #define BUTTON_PIN 8 // кнопка между пином и GND enum {CLOSE, OPEN, ALARM}; unsigned int accessCode; MFRC522 mfrc522(SS_PIN, RST_PIN); void setup() // ********************************************************** { Serial.begin(9600); // Initialize serial communications with the PC. Serial.println("Prilozhite kartu ."); // lcd.init(); // Активировать дисплей // lcd.backlight(); // подсветка дисплея // lcd.print(" Zamok Nevidimka"); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. pinMode(TED_PIN , OUTPUT); pinMode(BET_PIN , OUTPUT); pinMode(BUTTON_PIN , INPUT_PULLUP); } void loop() // **************************************************************** { accessCode = 0; checkRFID(); checkBluetooth(); checkButton(); switch (accessCode) { case 124: { Serial.println(" Hi Sergey"); door(OPEN); break; } case 125: { Serial.println("OTKRITO po Radio"); //lcd.print("OTKRITO po Radio"); door(OPEN); break; } case 777: { Serial.println("OTKRITO po knopke"); //lcd.print("OTKRITO po knopke"); door(OPEN); break; } default: // если код доступа не совпал с известными. { Serial.println(" ALARM *****"); // lcd.print(" ALARM *****"); door(ALARM); } } } // - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - - void checkRFID() { // Поиск новой карточки / Look for new cards. if (! mfrc522.PICC_IsNewCardPresent()) { accessCode = 0; return; } // Выбор карточки / Select one of the cards. if (! mfrc522.PICC_ReadCardSerial()) { unsigned long uidDecTemp = 0; // Выдача серийного номера карточки "UID". for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; accessCode = accessCode * 256 + uidDecTemp; } Serial.println("Serijnyj nomer karty : "); Serial.print(accessCode); } } // - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - - void checkBluetooth() { if (Serial.available()) //если пришли данные { accessCode = Serial.parseInt(); // считываем байт Serial.read(); Serial.print(accessCode); Serial.println(); } } // - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - - void checkButton() // Кнопка или датчик возврата замка { if (analogRead(BUTTON_PIN) > 700) accessCode = 777; } // - - - - - - - - - -- - - - - -- - - -- - - - - - - - - - - - - - - - - - - void door(byte state) // управлением замком { if (state == OPEN) { Serial.print("Zamok otkryt!"); digitalWrite(TED_PIN, HIGH); delay(3000); digitalWrite(TED_PIN, LOW); Serial.print("Zamok zakryt!"); } else if (state == CLOSE) { Serial.print("Zamok zakryt!"); digitalWrite(TED_PIN, LOW); delay(3000); } else if (state == ALARM) { Serial.print("ALARM!"); digitalWrite(BET_PIN, HIGH); delay(30000); digitalWrite(BET_PIN, LOW); } }
С пасибо Tomasina Какой КОТ может прийти если пауза в конце ? извини это шутка. Спасибо за код. я как раз тоже подумал что всё можно завернуть в switch . но подумал что код ещё увеличится и скорость будет меньше. теперь думаю что так тоже можно спасибо. да только я перенёс, код управление с радио кнопки, в начало, ещё до считывателя RFID карт. и всё заработало, как надо. Код (C++): void loop() { // **************************************************************** if (Serial.available()){ // упр. замком. с радио. Rkod = Serial.parseInt(); Serial.print(Rkod); if ( Rkod == 125********** ) { // -------------------------------- digitalWrite(ted, HIGH); delay(1000); digitalWrite(ted, LOW); Serial.println(" Pabotaet ");}} // -------------------------------------------------------------------------------------------------------------------- // Поиск новой карточки / Look for new cards. if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор карточки / Select one of the cards. if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0;