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");
}
}
@D3DSEC, 👍-1
Обсуждение1 ответ
Ультразвуковой датчик сканирует каждые 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
{
//включаем красный светодиод (цвет может быть неверным)
}
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Какой вывод вы видите в консоли?, @RamblinRose
Светодиод RGB не имеет ничего общего с проблемой, поэтому название вводит в заблуждение., @SBF
мигает красным и зеленым одновременно
.... это означаетмигает желтым
..... это правильно?, @jsotola