Прервать цикл по углу поворота потенциометра

Тема в разделе "Arduino & Shields", создана пользователем Vasai, 14 май 2016.

  1. Vasai

    Vasai Нуб

    Добрый вечер, прошу прощения за глупый вопрос, адруино и язык С изучаю совсем недавно. Подскажите пожалуйста как можно реализовать. Допустим у нас есть светодиод, пульт с приемником и потенциометр, необходимо, чтоб при получение сигнала с пульта, проверять угол потенциометра если он меньше 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();
        }
      }
    }
     
  2. ostrov

    ostrov Гуру

    100 чего? Градусов? Или единиц АЦП?
     
  3. vvr

    vvr Инженерище

    заведите переменную, например byte state = 0;
    при получении сигнала на приёмник меняйте её значение state = 1 - state;
    теперь по условию

    if (state == 1)
    {
    if (rawReading < 100)
    {
    digitalWrite (led, HIGH);
    }
    if (rawReading >= 100)
    {
    digitalWrite (led, LOW);
    }
    }
     
  4. ostrov

    ostrov Гуру

    Код (C++):
    if (state) rawReading < 100 : digitalWrite (led, HIGH) : digitalWrite (led, LOW);
     
    :rolleyes:
     
  5. Vasai

    Vasai Нуб

    Спасибо, получилось, только теперь возник второй вопрос, а как сделать, чтоб ждал второго сигнала с пульта, логика в общем такая, нажал на кнопку на пульте горит первый светодиод, до того пока потенциометр не достигнет 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);
          }
          }
        }  
      }
    }
     
  6. vvr

    vvr Инженерище

    Код (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);
      }
      }
    }
    }
     
  7. Vasai

    Vasai Нуб

    Спасибо большое, но не совсем то, тут получается, пульт не нужен, первый диод горит всегда в диапазоне от 0 до 100, второй загорается при 100 и не тухнет. Извиняюсь, я наверное просто не могу донести свою мысль. Хочется сделать, чтоб ардуино ждал сигнал, при нажатии кнопки загорался диод, и моторчик начинал крутить потенциометр пока не достигнет 100, как только достиг моторчик и диод выключаются и ждут повторного сигнала, при его поступлении моторчик крутится в обратную сторону от 100 к 0 и загорается 2 диод. Просто пока пробую на светодиодах и потенциометр поворачиваю от руки, моторчик там подставить уже не проблема