#include <SPI.h> #include <MFRC522.h> // это скачанная библиотека "RFID". // два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде. // !(SS - он же - SDA). #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522C / reate MFRC522 instance. unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате #include <Servo.h> //Подключаем библиотеку Servo Servo dimkaservo; int sensePin = 0;//Обьявляем 0 аналоговый пин void setup() { analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта.Необязательное /* Будем смотреть вывод на сериальном мониторе с Ардуино, для чего его инициализируем Заодно можно посмотреть диапазон работы датчика чтобы в этом диапазоне поворачивать серву*/ Serial.begin(9600); dimkaservo.attach(8); // Подключаем серву на 10 пин Serial.println("Prilozhite kartu / Waiting for card..."); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. dimkaservo.attach(8); // servo подключён к 7 Pin. dimkaservo.write(90); // устанавливаем положение servo, в момент подачи питания. } void loop() { // Печатаем на монитор Serial.println(analogRead(sensePin)); int val = analogRead(sensePin);// Создаем переменную val для чтения analogRead val= constrain(val,610 ,699);// Ограничиваем диапазон работы датчика посмотрев его на мониторе int motorAngl = map(val,699, 610, 90,0);//Преобразуем диапазон выдаваемый датчиком в диапазон углов сервы dimkaservo.write(motorAngl);// Устанавливаем серву на угол который получаем через преобразование // Поиск новой карточки / Look for new cards. if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор карточки / Select one of the cards. if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0; // Выдача серийного номера карточки "UID". for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte; uidDec = uidDec*256+uidDecTemp; } Serial.println("Serijnyj nomer karty / Card UID: "); Serial.println(uidDec); // ------------------------ // начинаем сравнивать номер "UID", поднесённой к ридеру карты, // с записанным номером "UID" карты в sketch. // также и с другими номерами карт. else if (uidDec == 959884118) { Serial.println("Hi Sergey"); dimkaservo.write(900); } else // если "UID" номер карты не совпал. { // включим все светодиоды. Serial.println("Neizvestnaja karta / unknown card"); } Serial.println("====================================="); delay(7000); // пауза 3 секунды. dimkaservo.write(10); // возвращаем servo обратно. } Ругается копилятор. Что делать я не знаю...
Исправить код Код (C++): / также и с другими номерами карт. else if (uidDec == 959884118) { Зачем тут else?
Убрал else работает. Спасибо. Тут такое дело надо сделать так, чтобы когда сопротивление фоторезистора изменяет то поднимается шлагбаум и держит эту позицию 5 секунд. Потом обратно на свой угол. Тоже самое и с rfid. Когда подносишь карту то поднимается и держит точку 5 секунд после чего опускается. Я вот не знаю куда задержку ставить и нужно чтобы они оба работали, а то сейчас работает только фоторезистор а когда подносишь карту то не работает. В чем дело? Может кто-нибудь сталкивался с этим? Вот скетч: #include <SPI.h> #include <MFRC522.h> // это скачанная библиотека "RFID". /* подключение для Arduino Uno и Mega, производится к разным Pin! ----------------------------------------------------- Nicola Coppola * Pin layout should be as follows: * Signal Pin Pin Pin * Arduino Uno Arduino Mega MFRC522 board * ------------------------------------------------------------ * Reset 9 5 RST * SPI SS 10 53 SDA * SPI MOSI 11 51 MOSI * SPI MISO 12 50 MISO * SPI SCK 13 52 SCK */ // два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде. // !(SS - он же - SDA). #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522C / reate MFRC522 instance. unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате #include <Servo.h> //Подключаем библиотеку Servo Servo dimkaservo; int sensePin = 0;//Обьявляем 0 аналоговый пин void setup() { analogReference(DEFAULT); //Объявляем диапазон чтения с аналогового порта.Необязательное /* Будем смотреть вывод на сериальном мониторе с Ардуино, для чего его инициализируем Заодно можно посмотреть диапазон работы датчика чтобы в этом диапазоне поворачивать серву*/ Serial.begin(9600); dimkaservo.attach(8); // Подключаем серву на 10 пин Serial.println("Prilozhite kartu / Waiting for card..."); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. dimkaservo.attach(8); // servo подключён к 7 Pin. dimkaservo.write(110); // устанавливаем положение servo, в момент подачи питания. } void loop() { // Печатаем на монитор Serial.println(analogRead(sensePin)); int val = analogRead(sensePin);// Создаем переменную val для чтения analogRead val= constrain(val,610 ,699);// Ограничиваем диапазон работы датчика посмотрев его на мониторе delay(2500); int motorAngl = map(val,699, 610, 110,0);//Преобразуем диапазон выдаваемый датчиком в диапазон углов сервы dimkaservo.write(motorAngl);// Устанавливаем серву на угол который получаем через преобразование // Поиск новой карточки / Look for new cards. if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор карточки / Select one of the cards. if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0; // Выдача серийного номера карточки "UID". for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte; uidDec = uidDec*256+uidDecTemp; } Serial.println("Serijnyj nomer karty / Card UID: "); Serial.println(uidDec); // ------------------------ // начинаем сравнивать номер "UID", поднесённой к ридеру карты, // с записанным номером "UID" карты в sketch. // также и с другими номерами карт. if (uidDec == 2426367825 ) { Serial.println("Hi Sergey"); dimkaservo.write(110); } delay(5000); }