Прошу помощи

mister.saracin
Offline
Зарегистрирован: 20.07.2016

Не сочтите за наглость, помогите, ПОЖАЛУЙСТА, дописать скетч. Набор такой: 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);//реле выключено 
}

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

здесь нужна переменная которая изначально равна допустим нулю, когда Вы первый раз подносите становится равна одной, а когда второй раз опять нулю. перед сетапом допустим нужно вписать строку bool flag=false; в ваш иф после сравнения меток пишем

if(!flag){пищим; включаем реле 1; ждем; выключаем реле 1; flag==true;}

if(flag){пищим 2 раза; включаем реле 2; ждем; выключаем реле 2; flag==false;}