Официальный сайт компании Arduino по адресу arduino.cc
Прошу помощи
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Не сочтите за наглость, помогите, ПОЖАЛУЙСТА, дописать скетч. Набор такой: arduino UNO R3, RFID rc522, двухканальный реле модуль, пикалка. Алгоритм: подносишь брелок - сработало первое реле на 0,7 сек и отпало, прозвучал один пик. Подносишь второй раз - сработало второе реле на 0,7 сек и отпало, два пикА и так по кругу.
И ещё вопросик: на RFIDе светодиодом можно "поморгать" или он постоянно горит?
Ну тяжело мне это всё даётся! Простите уж!
Вот недоделанный скетч:
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
#define PIN_TONE 3 // TONE
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
int Relay = 8;
int Relay2 = 9;
void setup() {
Serial.begin(9600);
Serial.println("Waiting for card...");
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
pinMode(Relay, OUTPUT); // устанавливаем реле в открытое сосотояние
pinMode(Relay2, OUTPUT);
digitalWrite(Relay, HIGH); // отключаем реле
digitalWrite(Relay2, HIGH); // отключаем реле
}
void squeaker(byte count, unsigned int Hz, unsigned int duration, unsigned int sleep = 0)
{
for(int i=0; i<count; i++) {
tone(PIN_TONE, Hz, duration);
if(sleep > 0) delay(sleep);
}
}
void loop() {// Поиск новой метки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор метки
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера метки.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec * 256 + uidDecTemp;
}
Serial.println("Card UID: ");
Serial.println(uidDec); // Выводим UID метки в консоль.
if (uidDec == 1426971474 or uidDec == 1134686977) // Сравниваем Uid метки, если он равен заданому то реле срабатывает.
{
squeaker(1, 3900, 140, 200); // Делаем звуковой сигнал, закрытие
digitalWrite(Relay, LOW);//реле включено
}
delay(700); // пауза 0,7 сек и реле переключается.
digitalWrite(Relay, HIGH);//реле выключено
}
здесь нужна переменная которая изначально равна допустим нулю, когда Вы первый раз подносите становится равна одной, а когда второй раз опять нулю. перед сетапом допустим нужно вписать строку bool flag=false; в ваш иф после сравнения меток пишем
if(!flag){пищим; включаем реле 1; ждем; выключаем реле 1; flag==true;}
if(flag){пищим 2 раза; включаем реле 2; ждем; выключаем реле 2; flag==false;}