0 голосов

Всем здвраствуйте, я новичок в прогроммирование Arduino. Можете мне помочь с написанием кода ? У меня есть некая проблема с написанием кода. После того как датчик подал сигнал, светодиод не переставал мигать (Суть в том, что когда датчик подал сигнал, то светодиод должен мигать, даже если потом сигнала на датчике уже нету. Но у меня он перестает мигать) и конечно же без delay



Вот мой код:
 

int ledPin = 4;                //переменная светодиода 
int Datchik_plameni = 3;      //переменная датчика

unsigned long currentTime;
boolean ledState = 0;

void setup() { 
pinMode(ledPin,OUTPUT);
pinMode(Datchik_plameni,INPUT); 
}
void loop() {
  //мигание светодиода если датчик подал сигнал

 if(digitalRead(Datchik_plameni)==LOW && millis() - currentTime > 500) {
  currentTime = millis();
  ledState=!ledState; 
  digitalWrite(ledPin, ledState); 
 
 }
}



Помогите пожалуйста его исправить. Заранее спасибо за ответ

(5 баллов) 1 2
исправил

2 Ответы

+1 голос
 
Лучший ответ

Вам нужно разбить ваше ветвление на 2 куска. И создать переменную флаг, которая взводится, когда огонь был замечен.

int ledPin = 4;                //переменная светодиода 
int Datchik_plameni = 3;      //переменная датчика
boolean flag = false;

unsigned long currentTime;
boolean ledState = 0;

void setup() { 
  pinMode(ledPin,OUTPUT);
  pinMode(Datchik_plameni,INPUT); 
}

void loop() {
  //мигание светодиода если датчик подал сигнал
  
  if(digitalRead(Datchik_plameni) == LOW){
    flag = true;
  }
  

  if(flag && millis() - currentTime > 500) {
    currentTime = millis();
    ledState=!ledState; 
    digitalWrite(ledPin, ledState); 
  }
}

Таким образом переменная флаг переходит в состояние true, но не переходит обратно.

(429 баллов) 6 18
выбран
Спасибо вам большое за помощь!
0 голосов

Чтобы светодиод мигал даже , когда сигнала с датчика нет, нужно "поднимать" логический флаг при условии срабатывания датчика.

И мигать , если этот флаг поднят, то есть переменная типа boolean равна 1.

unsigned long currentTime;
boolean ledState = 0,flag=0;

void setup() { 
pinMode(ledPin,OUTPUT);
pinMode(Datchik_plameni,INPUT); 
}
void loop() {
  //мигание светодиода если датчик подал сигнал
if(digitalRead(Datchik_plameni)==LOW)
{
flag=1;
}

 if(flag && millis() - currentTime > 500) {
  currentTime = millis();
  ledState=!ledState; 
  digitalWrite(ledPin, ledState); 
 
 }
}

(2.7 тыс. баллов) 6 17 38
Спасибо вам большое за помощь!
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. Aromik

    75 балл(ов)

  2. Un_ka

    54 балл(ов)

  3. parovoZZ

    12 балл(ов)

  4. sser

    6 балл(ов)

  5. Тёмик

    5 балл(ов)

  6. NesteruS

    5 балл(ов)

Награды месяца
1-е место: OLED-дисплей (Troyka-модуль)
2-е место: Графический экран 128×64
3-е место: Текстовый дисплей 16×2 (Troyka-модуль)

...