Проблема повторения
Я столкнулся с проблемой повторения программы, что означает, что она выполняется один раз (поскольку датчик переходит в 1, он рассчитывает 5 секунд (датчик все еще в 1) после того, как лампа зажжется). Ардуино всегда считает после перехода датчика в 0 потом в 1 но там лампочка не горит.
Идеи?
static byte capteurPrecedent = LOW;
static unsigned long debutAppui;
void setup(){
pinMode(4,INPUT);
pinMode(6,OUTPUT);
}
void loop(){
byte capteur = digitalRead(4);
if (capteur != capteurPrecedent)
{
if (capteur == HIGH)
{
debutAppui = millis();
}
else
{
debutAppui = 0;
}
CapteurPrecedent = capteur;
delay(20);
}
if (debutAppui != 0 && millis() - debutAppui> = 5000)
{
DigitalWrite(6,HIGH);}
}
Обновление от ОП:
Ничего не изменилось, и я не хочу, чтобы лампа продолжала гореть по прошествии 5 мс, и есть еще одна проблема — если каптер передает 0, лампа все еще горит.
Прошу помощи!
@Mary, 👍-1
Обсуждение2 ответа
Я только что внес некоторые изменения в ваш код, т.е. добавил низкий уровень к лампе, если capteur передает 0, и несколько скобок, если условие записи лампы высокое.
void loop(){
byte capteur = digitalRead(4);
if (capteur != capteurPrecedent)
{
if (capteur == HIGH)
{
debutAppui = millis();
}
else
{
debutAppui = 0;
DigitalWrite(6,LOW);
}
CapteurPrecedent = capteur;
delay(20);
}
if (debutAppui != 0 && ((millis() - debutAppui ) >= 5000))
{
DigitalWrite(6,HIGH);
}
}
Даже я прибавляю лампочке мало света, она все равно горит!!!, @Mary
Переменные чувствительны к регистру. Ваша проблема в том, что в строке 22 вы ссылаетесь на CapteurPrecedent
вместо capteurPrecedent
. Ваш код должен выглядеть следующим образом:
byte capteurPrecedent = LOW; // <---- неправильное использование статики
unsigned long debutAppui; // <---- неправильное использование статики
void setup(){
pinMode(4,INPUT);
pinMode(6,OUTPUT);
}
void loop(){
byte capteur = digitalRead(4);
if (capteur != capteurPrecedent)
{
if (capteur == HIGH)
{
debutAppui = millis();
}
else
{
debutAppui = 0;
}
capteurPrecedent = capteur; // <---- Основной капитал
delay(20);
}
if ((debutAppui != 0) && ((millis() - debutAppui) >= 5000)) // <---- исправлено ">="
{
digitalWrite(6,HIGH); // <---- Основной капитал
}
}
Ваш вопрос не ясен, поэтому, если вы хотите, чтобы датчик был включен/высок в течение 5 секунд, лучше было бы переписать его так:
unsigned long debutAppui;
void setup(){
pinMode(4,INPUT);
pinMode(6,OUTPUT);
}
void loop(){
byte capteur = digitalRead(4);
if (capteur == HIGH)
{
if ((millis() - debutAppui) >= 5000)
{
digitalWrite(6,HIGH);
}
else
{
digitalWrite(6,LOW);
}
}
else // т.е. capteur == LOW
{
debutAppui = millis();
digitalWrite(6,LOW);
}
delay(20);
}
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Операторы If и while не работают
- Программирование Arduino на Паскале?
- Использование библиотеки Arduino fix_fft или arduinoFFT для фильтрации определенного звука?
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Проблемы со скоростью шагового двигателя Nema 17
- Запуск кода кодировщика одновременно с другим кодом в Arduino
- Балансировка маятника с использованием PID
Можете ли вы дать мне предложения?, @Mary
Пожалуйста, не редактируйте и радикально не меняйте суть вашего вопроса. Кроме того, в первом слове «void» была заглавная буква, которую я исправил..., @Greenonline
В вашем коде, если вы пишете один раз, что лампа остается высокой, вы ни в коем случае не пишете ее низкой., @Vaibhav
Но как мне это сделать? Я делал много попыток, но безуспешно @vaibhav, @Mary
попробуйте ответ, который я дал. замените ваш **void цикл()** на тот, который я предложил., @Vaibhav
Я попробовал, не помогло @vaibhav, @Mary
заботящаяся программа в верхней части лампы отдыха à 1 для вашего автомобиля на millis()-debutAppui>=5000, @Mary
комментарий je peux la mettre à 0 ? я думаю, что я тестирую Код: [Выбрать] еще {debutAppui=0 ; digitalWrite(6,LOW, @Mary
Ваша программа не компилируется.
CapteurPrecedent = capteur;
должно бытьcapteurPrecedent = capteur;
(строчная буква "c"),millis() - DebuteAppui> = 5000
должно бытьmillis() - DeboutAppui >= 5000
(без пробела между '> ' и '='), аDigitalWrite(6,HIGH);
должно бытьdigitalWrite(6,HIGH);
(строчная буква "d"). Из уважения к тем, кто пытается вам помочь, вам следует хотя бы _проверить точный код_, который вы публикуете, и убедиться, что его поведение соответствует вашему вопросу., @Edgar Bonet@ Мэри, пожалуйста, используй английский на этом SE. См. [помощь], @sa_leinad