Пока не добавила IRremote.h всё работало. Решила сделать другой проект с одним микросервоприводом, i2c lcd и ИК-датчиком, там всё работает. Я не могу найти проблему, помогите, пожалуйста. Ниже будет ссылка на тикеркад с этим проектом, но я не знаю, можно ли публиковать тут ссылки, так что вставлю и код.
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2C lcd(0x27,16,2); // установки дисплея
// установка микросервоприводов
Servo servoGas;
Servo servoLock;
// держат в себе значения с датчиков
float light, temp, gas, IK, sonar, lastTemp = 0.0, lastLight = 0.0;
// подтверждает включение сигнализации
bool alarm = false;
// счётчик для количества очисток экрана после выкл сигнализации
int count = 1;
// кол-во срабатываний ик датчика
int c = 0;
void setup()
{
lcd.init();
lcd.backlight(); // вкл подсветку дисплея
servoGas.attach(13);
servoLock.attach(11);
pinMode(A1, INPUT); // температура
pinMode(A0, INPUT); // освещение
pinMode(A2, INPUT); // газовая безопасность
pinMode(9, OUTPUT); // мотор
pinMode(8, OUTPUT); // ламппа
pinMode(4,OUTPUT); // светодиод
pinMode(2, INPUT); // датчик расстояни
IrReceiver.begin(7, true); // пульт
Serial.begin(9600);
}
void loop()
{
// чтение данных с датчика температуры
int vol = analogRead(A0);
// чтение данных с фоторезистора
light = analogRead(A1);
// преобразование значения с датчика тем-ры в градусы цельсия
temp = (((vol * 5.0) / 1024.0) - 0.5) * 100;
if (gas < 150 && IK == 0 && !alarm)
{
// если нынешняя и прошлая темп-ры не равны или сигнализация откл
if (temp != lastTemp || !alarm){
tempLCD();
lastTemp = temp;
}
// если нынешний и прошлый свет не равны или сигнализация откл
if (light != lastLight || !alarm){
lightLCD();
lastLight = light;
}
}else
// если сигнализация выкл и lcd ни разу не очищался после откл сигнализации
if (alarm && count == 0 && gas < 150 && IK == 0)
{
lcd.clear();
count++;
alarm = false;
}
gasLCD();
robber();
translateIR();
}
// вывод температуры на экран и врашение двигателя постоянного тока
void tempLCD(){
if (temp < 10) {
String str = "TEMP: -" + String(temp) + " ";
lcd.setCursor(0, 0);
lcd.print(str);
analogWrite(9, 0);
} else {
String str = "TEMP: " + String(temp) + " ";
lcd.setCursor(0, 0);
lcd.print(str);
if (temp < 20) analogWrite(9, 0);
else if (temp < 35) analogWrite(9, 50);
else if (temp < 50) analogWrite(9, 150);
else if (temp < 65) analogWrite(9, 200);
else analogWrite(9, 255);
}
}
// вывод света на экран и вкл/выкл лампочки
void lightLCD(){
light = 100 - ((light - 344.0)/6.73);
if (light < 75) {
digitalWrite(8, HIGH);
} else {
digitalWrite(8, LOW);
}
String str = "SVET: " + String(light) + "% ";
lcd.setCursor(0, 1);
lcd.print(str);
}
// проверка утечки газа
void gasLCD(){
gas = analogRead(A2);
if (gas >= 150) {
tone(12, 300);
delay(200);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(4, LOW);
delay(500);
lcd.clear();
String str = "ATTENTION!";
lcd.setCursor(0, 0);
lcd.print(str);
str = "GAS POLLUTION";
lcd.setCursor(0, 1);
lcd.print(str);
servoGas.write(90);
alarm = true;
count = 0;
}
else if (gas <= 150) {
noTone(12);
servoGas.write(0);
}
}
// проверка движения у ИК-датчика
void robber(){
IK = digitalRead(2);
delay(100);
if (IK==1)
{
tone(12, 300);
lcd.clear();
String str = "ATTENTION! MOVE-";
lcd.setCursor(0, 0);
lcd.print(str);
str = "MENT IR SENSOR";
lcd.setCursor(0, 1);
lcd.print(str);
alarm = true;
count = 0;
c++;
servoLock.write(90);
} else
if (IK==0 && c == 0) {
noTone(12);
servoLock.write(0);
} else
if (IK==0) {
noTone(12);
}
}
void translateIR(){
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.command);
IrReceiver.resume();
}
}