друзья, делаю умный дом как проект для автомата, загружаю в ардуинку скетч, в котором 3 датчика(температура и влажность, датчик затопления, датчик света), все работает корректно, после того как добавляю 4-й для двери гаража, которые открываются с помощью клавиатуры(4х4), вводя пин-код, почему-то все синхронизируется с клавиатурой для гаража, допустим нажимаешь на кнопку и может загореться датчик света, рисовал схему, паял специалист, с контактами не должны были попутать, оставлю код, помогите кому не сложно
#include <Servo.h>
#include <Keypad.h>
#include <Wire.h> // библиотека для протокола I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
#include <DHT.h> // подключаем библиотеку для датчика
Servo ServoMotor;
char* password = "888"; // change the password here, just pick any 3 numbers
int position = 0;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 8,7, 6, 9 };
byte colPins[COLS] = { 5, 4, 3, 2 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int RedpinLock = 2;
int GreenpinUnlock = 3;
LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея
DHT dht(12, DHT11);
const int ledPin = 13;
void setup()
{
ServoMotor.attach(11);
LockedPosition(true);
{
LCD.init(); // инициализация LCD дисплея
LCD.backlight(); // включение подсветки дисплея
dht.begin();
pinMode(ledPin, OUTPUT);
pinMode(10, OUTPUT);
// запускаем датчик DHT11
}
}
void loop()
{
char key = keypad.getKey();
if (key == '*' || key == '#')
{
position = 0;
LockedPosition(true);
}
if (key == password[position])
{
position ++;
}
if (position == 3)
{
LockedPosition(false);
}
delay(100);
}
void LockedPosition(int locked)
{
if (locked)
{
digitalWrite(RedpinLock, HIGH);
digitalWrite(GreenpinUnlock, LOW);
ServoMotor.write(11);
}
else
{
digitalWrite(RedpinLock, LOW);
digitalWrite(GreenpinUnlock, HIGH);
ServoMotor.write(180);
}
{
// считываем температуру (t) и влажность (h)
float h = dht.readHumidity();
float t = dht.readTemperature();
// выводим температуру (t) и влажность (h) на жк дисплей
LCD.setCursor(0,0);
LCD.print("Humidity: ");
LCD.print(h);
LCD.setCursor(0,1);
LCD.print("Temperature: ");
LCD.print(t);
delay(1000);
LCD.clear();
if(analogRead(A0) <= 200)
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
if(analogRead(A1)>100)
{
digitalWrite(10, HIGH);
delay(15);
digitalWrite(10, LOW);
}
}
}