Код для выключения светодиода RGB последовательным нажатием переключателей 4,5,6 не работает
Делаю фоторезисторную сигнализацию. Когда расстояние менее 5 см над примечаниями [] 5 раз, пьезодинамик выключается. И я хочу выключить светодиод rgb, последовательно нажимая переключатели 4, 5, 6. Код на отключение светодиода rgb последовательным нажатием переключателей 4, 5, 6 не работает. Что не так? Вот код ниже.
int pins[]={4,5,6};
int melody[]={262,294,330};
int notes[]={392,392,440,440,392,392,330};
int b=0,r=0,g=0;
void setup() {
// поместите сюда код установки для однократного запуска:
randomSeed(analogRead(A0));
for(int i=0;i<3;i++){
pinMode(pins[i],INPUT);
}
}
int c=0;
int value1=digitalRead(4);
int value2=digitalRead(5);
int value3=digitalRead(6);
void loop() {
// поместите сюда ваш основной код для многократного запуска:
int vin=analogRead(A0);
if (c>5){
// б=0,г=0,г=0;
noTone(8);
//аналоговая запись(11,b);
//аналоговая запись(10,r);
//аналоговая запись(9,г);
// возвращаться;
}
if(digitalRead(0)==HIGH){
if(digitalRead(1)==HIGH){
if(digitalRead(2)==HIGH){
b=0,r=0,g=0;
noTone(8);
analogWrite(11,b);
analogWrite(10,r);
analogWrite(9,g);
return;
}
}
}
if(vin>800){
for(int i=0; i<7 ;i++){
tone(8,notes[i],100);
delay(200);
noTone(8);
analogWrite(11,random(256));
analogWrite(10,random(256));
analogWrite(9,random(256));
delay(200);
}
}
long duration = pulseIn(3,HIGH);
long distance=duration/58.2;
if(duration == 0){
return;
}
if (distance<5){
c++;
}
}
Код для выключения светодиода RGB последовательным нажатием переключателей 4, 5, 6, светодиод RGB выключен. И когда расстояние менее 5 см над примечаниями [] 5 раз, пьезодинамик выключается.
@hello, 👍2
Обсуждение1 ответ
Может быть, это неверно, потому что я новичок в проектах Arduino, но я думаю, что проблема здесь В настройках
for (int i=0;i<3;i++)
pinMode(i,OUTPUT);
ДОЛЖНО БЫТЬ
for (int i=4;i<=6;i++)
pinMode(i,OUTPUT);
в вашем цикле
if(digitalRead(0)==HIGH){
if(digitalRead(1)==HIGH){
if(digitalRead(2)==HIGH){
b=0,r=0,g=0;
noTone(8);
analogWrite(11,b);
analogWrite(10,r);
analogWrite(9,g);
return;
}
Я думаю, вам нужно изменить вывод на
if digitalRead(4).....
if digitalRead(5)......
if digitalRead(6)....
Просто измените это таким образом, возможно, это сработает. Не забудьте удалить // на b=0,r=0,g=0 А также убрать двойную косую черту // из аналога записи И я вижу, что вы объявляете значения 1,2,3 и не используете их.
подсказка...
int value1;
int value2;
int value3;
int delaytime=500; //полсекунды
value1=digitalRead(4); /* you are supposed to press the button on pin 4 by now */
if (value1==HIGH) {
delay(delaytime);
value2=digitalRead(5); /* you are supposed to press the button on pin 5 by now */
if (value2==HIGH) {
delay(delaytime);
value3=digitalRead(6); /* button on pin 6 is supposed to be pressed by now */
if (digitalRead(6)==HIGH) {
b=0,r=0,g=0;
noTone(8);
analogWrite(11,b);
analogWrite(10,r);
analogWrite(9,g);
return;
}
}
}
Я добавил задержку, потому что это может быть вашей самой большой проблемой. Arduino быстро обрабатывает данные, поэтому для того, чтобы он работал, когда вы нажимаете три кнопки, вам нужно будет нажать все три кнопки одновременно, прежде чем он сможет выдать вам результат. Но если вы хотите нажимать их одну за другой, вам нужно добавить задержку и убедиться, что вы нажали три кнопки до истечения времени задержки.
Я ценю ваш совет., @hello
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Как переключатели подключены? Вы тестировали с одним переключателем, чтобы увидеть, какой эффект он имеет? В настоящее время в вашем коде есть несколько странных вещей. На данный момент похоже, что вам нужно одновременно нажать переключатели, подключенные к портам 0, 1 и 2 (разве это не должны быть 4, 5 и 6?), чтобы выключить светодиод. Вам нужен простой конечный автомат, чтобы ваш код мог обнаруживать их последовательно. Вы объявляете значение1, значение2 и значение3, но никогда их не используете. Вы инициализируете массив pins[] значениями 4, 5 и 6, но никогда не используете его, кроме как в коде инициализации., @StarCat
Спасибо за совет. Я собираюсь проверить свой код., @hello
Что не так?
... ваша программа не закончена, @jsotolaМмм... Я собираюсь проверить код., @hello