Как затухать RGB на расстоянии от ультразвукового датчика (HC-SR04), чтобы они не затухали полностью

Реализовать ультразвуковой датчик для регистрации расстояния до объектов перед датчиком и отображения значений этих расстояний на последовательном мониторе в режиме реального времени.

Используйте светодиод RGB для обозначения относительных расстояний от 5 см до 45 см, при этом светодиод RGB должен выполнять следующие переходы:

• КРАСНЫЙ: очень тусклый на расстоянии 5 см, полный на расстоянии 15 см и очень тусклый на расстоянии 24 см.

• ЗЕЛЕНЫЙ: очень тусклый на расстоянии 16 см, полный на расстоянии 25 см и очень тусклый на расстоянии 34 см.

• СИНИЙ: очень тусклый на расстоянии 26 см, полный на расстоянии 35 см и очень тусклый на расстоянии 45 см.

• Полностью БЕЛЫЙ от 46 см и выше

//////////// КОД //////////////////////////

  //КРАСНЫЙ

    if(distance == 15){     //тогда RED полностью горит

        digitalWrite(RED_PIN, HIGH); 
    } 

    else if(distance >5 && distance <=14){      
      distance = map(distance, 0, 400, 0, 255);
      for(int i = distance; i <= 255; i++){
        analogWrite(RED_PIN, 255 - i);
        //задержка(20);
        }
    }
    else if(distance >15 && distance <=24){      
      distance = map(distance, 0, 400, 0, 255);
      for(int i = distance; i <= 255; i++){
        analogWrite(RED_PIN, 255 - i);
        //задержка(20);
        }
    }
    else{
        digitalWrite(RED_PIN, LOW);
    }

  //ЗЕЛЕНЫЙ

   if(distance == 25){      //то ЗЕЛЕНЫЙ полностью горит

        digitalWrite(GREEN_PIN, HIGH); 
    }

    else if(distance >16 && distance <=24){      
      distance = map(distance, 0, 400, 0, 255);
      for(int i = distance; i <= 255; i++){
        analogWrite(GREEN_PIN, 255 - i);
        //задержка(20);
        }
    }
    else if(distance >25 && distance <=34){      
      distance = map(distance, 0, 400, 0, 255);
      for(int i = distance; i <= 255; i++){
        analogWrite(GREEN_PIN, 255 - i);
        //задержка(20);
        }
    }
    else{
        digitalWrite(GREEN_PIN, LOW);
    }


  //СИНИЙ

   if(distance == 35){       //тогда СИНИЙ полностью включен

        digitalWrite(BLUE_PIN, HIGH); 
    }

    else if(distance >26 && distance <=34){      
      distance = map(distance, 0, 400, 0, 255);
      for(int i = distance; i <= 255; i++){
        analogWrite(BLUE_PIN, 255 - i);
        //задержка(20);
        }
    }
    else if(distance >35 && distance <=45){      
      distance = map(distance, 0, 400, 0, 255);
      for(int i = distance; i <= 255; i++){
        analogWrite(BLUE_PIN, 255 - i);
        //задержка(20);
        }
    }
    else{
        digitalWrite(BLUE_PIN, LOW);
    }

    //БЕЛЫЙ

     if(distance >=46){  //ВСЕ светодиоды горят

        digitalWrite(RED_PIN, HIGH);
        digitalWrite(GREEN_PIN, HIGH);
        digitalWrite(BLUE_PIN, HIGH);
    }
}

, 👍-2

Обсуждение

В чем именно заключается ваш вопрос? Вы рассказали нам о задании, которое дал вам учитель (примечание: мы *не* будем выполнять ваше задание за вас!), но какова реальная проблема, с которой вы столкнулись с вашим кодом?, @Majenko

вы не задали никаких вопросов.... вы не можете просто опубликовать описание вашего проекта с неполным листингом вашей программы и ожидать, что люди догадаются, почему вы ее разместили..... никто не удосуживается догадаться, есть ли там это какая-то проблема ....... голосование за закрытие, потому что я понятия не имею, в чем ваш вопрос ........ и, пожалуйста, не повторяйте в комментариях то же самое, что вы сделали ниже .... отредактируйте свой пост выше, @jsotola


1 ответ


1

Я не совсем понимаю, о чем именно вы спрашиваете, но вы можете использовать функцию «map» для плавного перехода от 255 (полный) до 50 (тусклый):

яркость = карта(диапазон, minRange, maxRange, самая низкая яркость, самая высокая яркость);

Ссылка: https://www.arduino.cc/reference/en/language/functions/math/map /

Поэтому вместо использования 0 в качестве минимальной яркости вы используете 50 (тусклый). Но я не совсем уверен, чего вы пытаетесь достичь в своем коде, используя цикл for. Вам следует начать с одного светодиода, а затем двигаться дальше.

,

Это вопрос Внедрите ультразвуковой датчик для регистрации расстояния до объектов перед датчиком и отображения значений этих расстояний на последовательном мониторе в режиме реального времени. Используйте светодиод RGB для обозначения относительных расстояний от 5 см до 45 см, при этом светодиод RGB должен выполнять следующие переходы: • КРАСНЫЙ: очень тусклый на расстоянии 5 см, полный на расстоянии 15 см и очень тусклый на расстоянии 24 см. • ЗЕЛЕНЫЙ: очень тусклый на расстоянии 16 см, полный на расстоянии 25 см и очень тусклый на расстоянии 34 см. • СИНИЙ: очень тусклый на расстоянии 26 см, полный на расстоянии 35 см и очень тусклый на расстоянии 45 см. • Полностью БЕЛЫЙ от 46 см и выше, @user55311

@user55311 user55311, почему ты повторяешь то, что уже писал выше?, @jsotola