Собственно вопрос от нуба (в пойске не нашел решений или плохо искал). Пытаюсь заставить работать Output пин который включает реле посредством фоторезистора и с пульта. В отдельности оба скетча работают без сбоя. А когда собираю вместе то фоторезистор отказывается включать реле когда пульт работает без изменений. Скетч брал готовый, пытался туда "запихнуть" фоторезистор. Несмотря на это в терминале порта (Serial.begin) фоторезистор работает высылая значения на порт, но реле включать отказывается. В чем проблема? Код: Код (C++): #include <IRremote.h> // это скачанная библиотека int RECV_PIN = 11; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; unsigned long eventTime=0; //индикация таймера int timer = 12; int sensePin = 0; int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно. int B13 = 13; int L2 = 2; int L3 = 3; int L4 = 4; int L5 = 5; int L6 = 6; int L7 = 7; int L8 = 8; void setup(){ irrecv.enableIRIn(); // включить приемник Serial.begin(9600); pinMode(L13, OUTPUT); // назначаем пины как выходы pinMode(L2, OUTPUT); pinMode(B13, OUTPUT); pinMode(L3, OUTPUT); pinMode(L4, OUTPUT); pinMode(L5, OUTPUT); pinMode(L6, OUTPUT); pinMode(L7, OUTPUT); pinMode(L8, OUTPUT); pinMode(timer, OUTPUT); } void loop() { Serial.println(analogRead(sensePin)); if (digitalRead(RECV_PIN) == LOW) eventTime=millis(),digitalWrite(timer, HIGH); if(millis()-eventTime>100) digitalWrite(timer, LOW) ,digitalWrite(L13, LOW),digitalWrite(L2, LOW),digitalWrite(L3, LOW) ,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW); int sensePin = 0; if (irrecv.decode(&results)) { int VAL = analogRead(sensePin); { if (VAL < 300) digitalWrite(B13, HIGH); else digitalWrite(B13, LOW);} if (results.value == 0x20DF02FD || results.value == 0xFFFFFFFF && (digitalRead(timer) == HIGH) )digitalWrite(L13, HIGH); if (results.value == 0x1008889 || results.value == 0x757FB4DF && (digitalRead(timer) == HIGH) )digitalWrite(L2, HIGH); if (results.value == 0x1004849 || results.value == 0xB33B4597 && (digitalRead(timer) == HIGH) )digitalWrite(L3, HIGH); if (results.value == 0x100C8C9 || results.value == 0x3C03E507 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH); if (results.value == 0x1002829 || results.value == 0xE705551F && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH); if (results.value == 0x100A8A9 || results.value == 0xA4A58EC7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH); if (results.value == 0x1006869 || results.value == 0xE2E45F7F && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH); if (results.value == 0x100E8E9 || results.value == 0x6BACFEEF && (digitalRead(timer) == HIGH) )digitalWrite(L8, HIGH); irrecv.resume(); } }
Второе, вынести чтение фоторезистора из irrecv.decode, по-моему, так у вас происходит чтение фоторезистора только при нажатии кнопок пульта
Убрал второй irrecv.decode и начал работать только фоторезистор. Убрал первый и вот: Код (C++): exit status 1 'results' was not declared in this scope
Код (C++): #include <IRremote.h> // это скачанная библиотека int RECV_PIN = 11; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; unsigned long eventTime=0; //индикация таймера int timer = 12; int sensePin = 0; int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно. int B13 = 13; int L2 = 2; int L3 = 3; int L4 = 4; int L5 = 5; int L6 = 6; int L7 = 7; int L8 = 8; void setup(){ irrecv.enableIRIn(); // включить приемник Serial.begin(9600); pinMode(L13, OUTPUT); // назначаем пины как выходы pinMode(L2, OUTPUT); pinMode(B13, OUTPUT); pinMode(L3, OUTPUT); pinMode(L4, OUTPUT); pinMode(L5, OUTPUT); pinMode(L6, OUTPUT); pinMode(L7, OUTPUT); pinMode(L8, OUTPUT); pinMode(timer, OUTPUT); } void loop() { Serial.println(analogRead(sensePin)); if (digitalRead(RECV_PIN) == LOW) eventTime=millis(),digitalWrite(timer, HIGH); if(millis()-eventTime>100) digitalWrite(timer, LOW) ,digitalWrite(L13, LOW),digitalWrite(L2, LOW),digitalWrite(L3, LOW) ,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW); int sensePin = 0; int VAL = analogRead(sensePin); if (VAL < 300) digitalWrite(B13, HIGH); else digitalWrite(B13, LOW); if (irrecv.decode(&results)) { if (results.value == 0x20DF02FD || results.value == 0xFFFFFFFF && (digitalRead(timer) == HIGH) )digitalWrite(L13, HIGH); if (results.value == 0x1008889 || results.value == 0x757FB4DF && (digitalRead(timer) == HIGH) )digitalWrite(L2, HIGH); if (results.value == 0x1004849 || results.value == 0xB33B4597 && (digitalRead(timer) == HIGH) )digitalWrite(L3, HIGH); if (results.value == 0x100C8C9 || results.value == 0x3C03E507 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH); if (results.value == 0x1002829 || results.value == 0xE705551F && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH); if (results.value == 0x100A8A9 || results.value == 0xA4A58EC7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH); if (results.value == 0x1006869 || results.value == 0xE2E45F7F && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH); if (results.value == 0x100E8E9 || results.value == 0x6BACFEEF && (digitalRead(timer) == HIGH) )digitalWrite(L8, HIGH); irrecv.resume(); } }
Теперь оба работают. Но когда я нажимаю на пульт в моем случае необходимо заживать клавишу. Вот когда я зажимаю клавишу реле начинает быстро щелкать вместо того чтобы гореть
Как мне эти две функций отдельно вынести потому что таймер от фоторезистора влияет на управление пультом вследствие чего последний начинает быстро переключать реле.
Управляю реле. фоторезистор работает с вашим кодом отлично. но вот при зажиманий кнопки пульта он начинает быстро моргать. Вобщем требуется чтобы от пульта так же стабильно работал не моргая
просили написать что требуется от устройства, а не то, что оно вытворяет сейчас. Ибо задание "Output пин который включает реле посредством фоторезистора и с пульта" понятно только вам.