Есть у меня ардуинка MEGA 2560 . 2 реле - оба инвалидских(работают то от низкого сигнала, то от высокого... Проблему решаю перебросом контактов с NC а NO и наоборот) оба реле одноканальные . Проблема в том, что при загрузке скетча на плату, реле начинает(-ют) срабатывать с такой скоростью, что звук похож на стрекотание гигантского кузнечика-мутанта... Боюсь, как бы реле не сгорело. Всю схему выкладывать не буду, там рисовать слишком много, скажу только , что 1 реле у меня на 12 пине, а другое на 13.
Код скетча:
И да, не обращайте внимание на массивы с "буквами", они вообще никакой роли в моем скетче не играют
Код скетча:
Скетч:
#include <Wire.h> // библиотека для управления устройствами по I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602
#include <Key.h>
#include <Keypad.h>
#include <pitches.h>
#include "SPI.h"
#include "MFRC522.h"
#define RST_PIN 9 // RES pin
#define SS_PIN 10 // SDA (SS) pin
LiquidCrystal_I2C LCD(0x27,16,2);
MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522
const byte ROWS = 4; //4 строки у клавиатуры
const byte COLS = 3; //три столбца
#define RELAY_OPEN 13
#define RELAY_CLOSE 12
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {3, 8, 7, 5};
//Подключены строки (4 пина)
byte colPins[COLS] = {4, 2, 6};
int piezoPin = 22;
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //иниициализировать клавиатуру
byte bukva_B[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Б"
byte bukva_G[8] = {B11111,B10001,B10000,B10000,B10000,B10000,B10000,B00000,}; // Буква "Г"
byte bukva_D[8] = {B01111,B00101,B00101,B01001,B10001,B11111,B10001,B00000,}; // Буква "Д"
byte bukva_ZH[8] = {B10101,B10101,B10101,B11111,B10101,B10101,B10101,B00000,}; // Буква "Ж"
byte bukva_Z[8] = {B01110,B10001,B00001,B00010,B00001,B10001,B01110,B00000,}; // Буква "З"
byte bukva_I[8] = {B10001,B10011,B10011,B10101,B11001,B11001,B10001,B00000,}; // Буква "И"
byte bukva_IY[8] = {B01110,B00000,B10001,B10011,B10101,B11001,B10001,B00000,}; // Буква "Й"
byte bukva_L[8] = {B00011,B00111,B00101,B00101,B01101,B01001,B11001,B00000,}; // Буква "Л"
byte bukva_P[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П"
byte bukva_Y[8] = {B10001,B10001,B10001,B01010,B00100,B01000,B10000,B00000,}; // Буква "У"
byte bukva_F[8] = {B00100,B11111,B10101,B10101,B11111,B00100,B00100,B00000,}; // Буква "Ф"
byte bukva_TS[8] = {B10010,B10010,B10010,B10010,B10010,B10010,B11111,B00001,}; // Буква "Ц"
byte bukva_CH[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000,}; // Буква "Ч"
byte bukva_Sh[8] = {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00000,}; // Буква "Ш"
byte bukva_Shch[8]= {B10101,B10101,B10101,B10101,B10101,B10101,B11111,B00001,}; // Буква "Щ"
byte bukva_Mz[8] = {B10000,B10000,B10000,B11110,B10001,B10001,B11110,B00000,}; // Буква "Ь"
byte bukva_IYI[8] = {B10001,B10001,B10001,B11001,B10101,B10101,B11001,B00000,}; // Буква "Ы"
byte bukva_Yu[8] = {B10010,B10101,B10101,B11101,B10101,B10101,B10010,B00000,}; // Буква "Ю"
byte bukva_Ya[8] = {B01111,B10001,B10001,B01111,B00101,B01001,B10001,B00000,}; // Буква "Я"
byte oz[8] = {B11111,B11111,B00000,B00000,B00000,B00000,B00000,B00000,};
String codedom;
char code[2] = {'#', '*'};
int ozidanie=1;
int schet;
int spas;
String pass;
String gostpass = "1052";
String myString ;
int admen;
byte readCard[4];
String tagID = "";
void setup() {
Serial.begin(9600);
// put your setup code here, to run once:
LCD.init(); // инициализация LCD дисплея
LCD.backlight(); // включение подсветки дисплея
pinMode(24, OUTPUT);
// печатаем сообщение на первой строке
pinMode(10, INPUT_PULLUP);
LCD.setCursor(5, 1); // ставим курсор на 1 символ второй строки
//LCD.print("Domophon 1.0"); // печатаем сообщение на второй строке
pinMode(RELAY_OPEN, OUTPUT);
pinMode(RELAY_CLOSE, OUTPUT);
SPI.begin();
mfrc522.PCD_Init();
// Включаем антенну
digitalWrite(RELAY_OPEN, HIGH);
}
void loop() {
char customKey = keypad.getKey();
//String str(customKey);
if(digitalRead(10))
{
AccesGranted();
}
// if (tagID == "79C78D85" || tagID == "FFAB6C1E") {
while (getID()) {
if (tagID == "79C78D85" || tagID == "FFAB6C1E") {
AccesGranted();
}
else {
error();
}
Serial.print("ID: ");
Serial.println(tagID);
}
if (customKey ){
Serial.println(schet);
String myString = String(customKey);
if (myString == "#"){
Serial.println(analogRead(0));
LCD.setCursor(0,1);
LCD.print(" ");
codedom = "";
schet = 0;
spas = 0;
return;
}else if((myString == "*" || spas== 1)){
if(codedom == "" && schet <=4 && admen==0|| spas== 1&& schet <=4 && admen ==0)
{
codedom = codedom + myString;
LCD.setCursor(0,1);
if (codedom == "*"){
codedom= "";
}
spas = 1;
LCD.print("CODE:" + codedom);
schet +=1;
digitalWrite(24, HIGH);
tone(piezoPin, 1000);// Включение светодиода
delay(100); // Задержка
noTone(piezoPin);
digitalWrite(24, LOW);
}else
if (codedom == "3978" or codedom == "1904"){
admen = 1;
codedom = codedom + myString;
LCD.setCursor(0,1);
LCD.print(" ");
LCD.setCursor(4,1);
LCD.print("Acces Granted");
delay(800);
LCD.setCursor(0,1);
LCD.print(" ");
AccesGranted();
}else {
error();
}
} else if(customKey && schet<=10 && spas ==0){
digitalWrite(24, HIGH);
tone(piezoPin, 1000);// Включение светодиода
delay(100); // Задержка
noTone(piezoPin);
digitalWrite(24, LOW);
LCD.setCursor(0,1); // устанавливаем курсор на начало второй строки
codedom = codedom + myString;
LCD.print(codedom);
schet +=1;
}else
return;
}
}
boolean getID() {
if (! mfrc522.PICC_IsNewCardPresent()) {
return false;
}
if (! mfrc522.PICC_ReadCardSerial()) {
return false;
}
tagID = "";
for (uint8_t i = 0; i < 4; i++) {
tagID.concat(String(mfrc522.uid.uidByte[i], HEX));
}
tagID.toUpperCase();
mfrc522.PICC_HaltA();
return true;
}
void AccesGrantedAdm()
{
}
void AccesGranted()
{
digitalWrite(RELAY_OPEN,LOW);
spas=0;
codedom = "";
pass = "";
myString ="";
digitalWrite(24, LOW);
Serial.println("Access Granted!");
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(20);
tone(piezoPin, NOTE_A5,1000); // Запустили звучание
delay(200);
tone(piezoPin, NOTE_B5,1000);
delay(350);
digitalWrite(RELAY_OPEN, HIGH);
noTone(3);
delay(250);
tone(piezoPin, NOTE_A5,1000); // Запустили звучание
delay(200);
tone(piezoPin, NOTE_B5,1000);
delay(350);
noTone(3);
delay(250);
tone(piezoPin, NOTE_A5,1000); // Запустили звучание
delay(200);
tone(piezoPin, NOTE_B5,1000);
delay(350);
noTone(3);
delay(250);
tone(piezoPin, NOTE_A5,1000); // Запустили звучание
delay(200);
tone(piezoPin, NOTE_B5,1000);
delay(350);
noTone(3);
delay(250);
tone(piezoPin, NOTE_A5,1000); // Запустили звучание
delay(200);
tone(piezoPin, NOTE_B5,1000);
delay(350);
noTone(3);
delay(250);
tone(piezoPin, NOTE_A5,1000); // Запустили звучание
delay(200);
tone(piezoPin, NOTE_B5,1000);
delay(350);
noTone(22);
digitalWrite(24, LOW);
}
void error()
{
pass = "";
myString = "";
spas=0;
codedom = "";
LCD.setCursor(0,1);
LCD.print(" ");
LCD.setCursor(4,1);
LCD.print("Error!");
Serial.println("Access Denied!");
tone(piezoPin, NOTE_F5); // Запустили звучание
delay(900);
noTone(22);
delay(150);
tone(piezoPin, NOTE_F5); // Запустили звучание
delay(900);
noTone(22);
LCD.setCursor(0,1);
LCD.print(" ");
}