RGB не работает должным образом

Мой светодиод RGB не работает должным образом. Он должен загореться красным, когда ультразвуковой датчик определяет расстояние более 10 см, и зеленым, когда он определяет расстояние менее или равное 10 см. Он просто мигает красным и зеленым одновременно. Как это исправить?

#include<Servo.h>
Servo servo1;
int Motor = 3;
int tpin = 7;
int epin = 6;
int red1 = 12;
int green1 = 13;
int pos = 0;
long duration, inches, cm;

void setup() {
    Serial.begin(9600);
    pinMode(tpin, OUTPUT);
    pinMode(epin, INPUT);
    pinMode(red1, OUTPUT);
    pinMode(green1, OUTPUT);
    servo1.attach(Motor);

}

void loop() {
    digitalWrite(tpin, LOW);
    delayMicroseconds(5);
    digitalWrite(tpin, HIGH);
    delayMicroseconds(10);
    digitalWrite(tpin, LOW);
    duration = pulseIn(epin, HIGH);
    cm = (duration / 2) / 29.1;
    inches = (duration / 2) / 74;
    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    delay(100);

    if ((cm > 10))
    {
        servo1.write(pos = 0);
        digitalWrite(red1, HIGH);
        delay(100);
        digitalWrite(red1, LOW);
        delay(100);
        Serial.println("\t RED");
    }
    else if ((cm <= 10))
    {
        servo1.write(pos = 90);
        digitalWrite(green1, HIGH);
        delay(100);
        digitalWrite(green1, LOW);
        delay(100);
        Serial.println("\t GREEN");
    }
}

, 👍-1

Обсуждение

Какой вывод вы видите в консоли?, @RamblinRose

Светодиод RGB не имеет ничего общего с проблемой, поэтому название вводит в заблуждение., @SBF

мигает красным и зеленым одновременно .... это означает мигает желтым ..... это правильно?, @jsotola


1 ответ


0

Ультразвуковой датчик сканирует каждые 0,1 секунды в соответствии с вашим кодом. Проблема в том, что иногда у вас бывают "неверные" результаты. Принимая во внимание частоту ваших сканирований + «неверные» сканы, возможно, ваша Arduino просто продолжает переключаться между этими двумя светодиодами.

Тогда мне помогло сделать счетчик. Переменная, которая подсчитывает, сколько раз подряд расстояние до объекта равно «расстоянию < 10 см». Если полоса была прервана, переменная сбрасывалась. Вот как это будет отображаться в последовательном выводе:

distance: 20cm
distance: 16cm
distance: 8cm
count: 1
distance: 9cm
count: 2
distance: 6cm
count: 3
distance: 8cm
count: 4
distance: 11cm
count: 0
distance: 12cm
distance: 20cm

И в тот момент, когда ваш счетчик достигает определенного места, например, объект находится ближе 10 см пять раз подряд, тогда загорается светодиод

if(count>=5)
{
  //включаем зеленый светодиод (цвет может быть неверным)
}
else
{
  //включаем красный светодиод (цвет может быть неверным)
}
,