Добрый вечер, прошу прощения за глупый вопрос, адруино и язык С изучаю совсем недавно. Подскажите пожалуйста как можно реализовать. Допустим у нас есть светодиод, пульт с приемником и потенциометр, необходимо, чтоб при получение сигнала с пульта, проверять угол потенциометра если он меньше 100 включать светодиод, и при повороте потенциометра, когда его значение превысит 100, светодиод должен отключаться. Пробовал через if, через while, do..while, никак не получается, подскажите как реализовать? Код (C++): #include <IRremote.h> int analogPin = A0; int led = 13; int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { pinMode(led,OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); } void loop() { int rawReading = analogRead(analogPin) /4; Serial.println(rawReading); if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 629155073) { if (rawReading < 100){ digitalWrite (led, HIGH); } if (rawReading >= 100){ digitalWrite (led, LOW); } irrecv.resume(); } } }
заведите переменную, например byte state = 0; при получении сигнала на приёмник меняйте её значение state = 1 - state; теперь по условию if (state == 1) { if (rawReading < 100) { digitalWrite (led, HIGH); } if (rawReading >= 100) { digitalWrite (led, LOW); } }
Спасибо, получилось, только теперь возник второй вопрос, а как сделать, чтоб ждал второго сигнала с пульта, логика в общем такая, нажал на кнопку на пульте горит первый светодиод, до того пока потенциометр не достигнет 100, в этом месте он тухнет, и ждет второго сигнала, при нажатии повторно загорается второй светодиод пока потенциометр движется от 100 обратно к 0. Код (C++): #include <IRremote.h> int analogPin = A0; int led = 13; int led2 = 10; int RECV_PIN = 2; byte state = 0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { pinMode(led,OUTPUT); pinMode(led2,OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); } void loop() { int rawReading = analogRead(analogPin) /4; Serial.println(rawReading); if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 629155073){ state = 1-state; if(state ==1) { if (rawReading < 100){ digitalWrite (led, HIGH); } if (rawReading >= 100){ digitalWrite (led, LOW); } } } if (results.value == 629155073){ state = 1-state; if(state ==1) { if (rawReading >= 100){ digitalWrite (led2, HIGH); } if (rawReading = 0){ digitalWrite (led, LOW); } } } } }
Код (C++): void loop() { int rawReading = analogRead(analogPin) /4; Serial.println(rawReading); if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 629155073) { state = 1-state; } } if(state == 0) { if (rawReading < 100) { digitalWrite (led, HIGH); } if (rawReading >= 100) { digitalWrite (led, LOW); } } if(state == 1) { if (rawReading >= 100) { digitalWrite (led2, HIGH); } if (rawReading = 0) { digitalWrite (led, LOW); } } } }
Спасибо большое, но не совсем то, тут получается, пульт не нужен, первый диод горит всегда в диапазоне от 0 до 100, второй загорается при 100 и не тухнет. Извиняюсь, я наверное просто не могу донести свою мысль. Хочется сделать, чтоб ардуино ждал сигнал, при нажатии кнопки загорался диод, и моторчик начинал крутить потенциометр пока не достигнет 100, как только достиг моторчик и диод выключаются и ждут повторного сигнала, при его поступлении моторчик крутится в обратную сторону от 100 к 0 и загорается 2 диод. Просто пока пробую на светодиодах и потенциометр поворачиваю от руки, моторчик там подставить уже не проблема