Цикл

Тема в разделе "Arduino & Shields", создана пользователем Данил547363593599845, 16 окт 2021.

  1. Нужно чтобы цикл while заканчивался при этом условии if (results.value==0xFFE01F) как это сделать?



    Код (C++):
    #include "IRremote.h"
    IRrecv irrecv(8);
    decode_results results;
    int led1=0;
    int led2=0;
    int LED = 9;
    int brightness = 0;  
    int fadeAmount = 30;
    int x=5;
    int counter = 0;
    int PIN_PHOTO_SENSOR = A0;

    void setup() {
      pinMode(3,OUTPUT);
      pinMode(9,OUTPUT);
      pinMode(LED, OUTPUT);
      Serial.begin(9600);
      irrecv.enableIRIn();
      digitalWrite(10, HIGH);
      pinMode(10, OUTPUT);
    }

    void loop() {

      if (results.value==0xFFC23D){

     
      while(true){
      int val = analogRead(PIN_PHOTO_SENSOR);
      Serial.println(val);
      if (val < 300) {
        digitalWrite(9, HIGH);led1=1;results.value=0;
      } else {
        digitalWrite(9, LOW);led1=0;results.value=0;
      }

      }
      }
     
      if ( irrecv.decode( &results )) {
        Serial.println(results.value, HEX);

      for(int i = 100;i <= 1000; i=i+10){
      if (results.value==0xFF22DD &&led1==1){
      digitalWrite( 9, HIGH );
      delay(i);
      digitalWrite( 9, LOW );
      delay(i);

        }
       }

    if (results.value==0xFFA25D&&led1==0){
      digitalWrite( 9, HIGH );led1=1;results.value=0;



    }
    if (results.value==0xFFE21D&&led1==1){
      digitalWrite( 9, LOW );led1=0;results.value=0;
    }

    if (results.value==0xFF5AA5&&led1==1){
      analogWrite(9, brightness);
      brightness = brightness + fadeAmount;
        if (brightness == 0 || brightness == 255) {
        fadeAmount = -fadeAmount ;
      }
      delay(30);
    }
    if (results.value==0xFF10EF&&led1==1){
      analogWrite(9, brightness);
      brightness = brightness - fadeAmount;

    }


     

       irrecv.resume(); }
       }

     
     
  2. parovoZZ

    parovoZZ Гуру

    почитать про циклы в умных книжках. На while() циклы в сях не заканчиваются. Грамотно составить алгоритм работы программы.
     
  3. Andy16

    Andy16 Гик

    break чтоли?
     
  4. b707

    b707 Гуру

    такое надо?
    Код (C++):
    while(true){
    ... // doing something

      if (results.value==0xFFC23D) break;
    }
     
  5. Andy16

    Andy16 Гик

    do
    {
    ...
    } while (results.value==0xFFC23D)
     
  6. SergeiL

    SergeiL Оракул Модератор

    Не, это по-другому работать будет, нужно чтобы выходило при равенстве :)
     
  7. Andy16

    Andy16 Гик

    Ой. Стормозил. (results.value!=0xFFC23D)
     
  8. Airbus

    Airbus Радиохулиган Модератор

    А если так
    if(results.value==0xFFE01F) {//пустой цикл}
    else{//что то делаем}
     
  9. Andy16

    Andy16 Гик

    Ну, можно еще придумать штук пять вариантов, но описанию в первом сообщении темы идеально соответствует цикл do while.
     
  10. Airbus

    Airbus Радиохулиган Модератор

    Не факт. А если сразу пришло 0xFFE01F? И ненадо ничего выполнять от слова совсем? А do while сделает do один раз
     
  11. Andy16

    Andy16 Гик

    Ну, в первом сообщении так и описано, как я понимаю.