Работа датчика огня, НУЖНА ПОМОЩЬ

vlasovsreg
Offline
Зарегистрирован: 08.02.2017

Суть в следующем, в этом деле новичек. Поэтому нужна Ваша помощь.

Есть датчие огня и реле. Когда огонь есть, реле должно быть замкнутым. Огонь потух, реле должно отключиться через 3 секунды.  Реле должно включаться после 3 сек горения. Так же нужно сделать тактовую кнопку, которая включала это реле помимо датчика огня. (хотя можно и тумблер поставить) .

вот что накидал Я.

int led =13; // назначение пина всроенного диода
int flame=2; // цифровой вход с датчика
int dflame; //переменная для цифрового значения с датчика О

void setup()
{
  pinMode (led, OUTPUT);
  pinMode (flame, INPUT);
}

void loop() 
{ 
  dflame=digitalRead(flame); // чтение цифрового значения
  if (dflame==HIGH) // когда на цифровом входе высокий уровень свтодиод горит
  {
    digitalWrite (led, HIGH);
  }
    else
  {
    digitalWrite (led, LOW);
  }
  delay(3000);
}

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А в чём именно помощь нужна?

То, что написано словами не соответсвует тому, что написано в коде, а так ... вопрос-то Ваш в чём?

vlasovsreg
Offline
Зарегистрирован: 08.02.2017

я просто пока эксперементирую на свотодиоде вместо реле.

Вот и не могу дописать алгоритм до конца, опять не соответсвие.

Врезультате чего и попросил помощи. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это не важно, что светодиод - это я понял. Логика его включения не соответствует тому, что написано словами.

Так в чём именно Вам нужна помощь, я так и не понял? В проверке (тем, что я сказал, что не соовтетсвует, я уже помог?) или в чём-то другом?

vlasovsreg
Offline
Зарегистрирован: 08.02.2017

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

Так же за вознаграждение.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если за вознаграждение, то это вот сюда.

А вообще, советую Вам позаниматься не пару дней, а пару недель. Причём самостоятельно, с книжкой по программированию в руках. То, что Вы сейчас называете "проблемой" исчезнет как кошмарный сон и больше появляться не будет. А если кто-то вместо Вас сделает (за вознаграждение или без такового), то проблема неминуемо возникнет снова при попытке сделать что-то ещё.

Ничего там сложного нет, просто ведите пальцем по коду и проговаривайте что он делает.

vlasovsreg
Offline
Зарегистрирован: 08.02.2017
Пересмотрел свою логику работы ДО (датчика огня)
сделал отдельно скетч с тактовой кнопокй, которая будет включать реле, это же реле должно включаться и от датчика огня.
Отдлельно все работает, а совместить не могу.
Что не так понять не могу.
 
 
 
const int DO = 2;//Контакт вход с датчика огня"
const int ledPin1 = 13; //Реле 1 - управление 
 
int flag=0; 
int offtimer =500; //Таймер выключения = 500 = 5 секунд.
int ontimer = 0; // Таймер включения
 
// переменные положения кнопок
int buttonState1 = 0;         //для датчика огня
int buttonState2 = 0;        //зажигание
 
 void setup()   
 { 
    pinMode(ledPin1, OUTPUT);        
    pinMode(DO, INPUT);//этот пин вход 
 } 
 
 void loop() 
 { 
 
buttonState1 = digitalRead(DO);
 
  
if (buttonState1 == LOW) //если есть напряжение
    {     
    // подаем сигнал на реле 1
    digitalWrite(ledPin1, HIGH);  
    offtimer = 500;  //кончился таймер - перезаполняем его
    } //if1
  else { //если питания пропало
    if (offtimer == 0) //если таймер еще не оработал (полный)
    {
      digitalWrite(ledPin1, LOW); //выключаем реле 1
    }//if2
   else { // Если не полный таймер
     offtimer = offtimer -1; //уменьшаем на 1 (1/10 секунды)
     delay (10); //ожидаие чтобы работал таймер
   }//else2 
   }//else1
 
 
if(digitalRead(7)==HIGH&&flag==0)  //если кнопка нажата   
     // и перемення flag равна 0 , то ... 
     { 
        flag=1; 
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
      } 
if(digitalRead(7)==LOW&&flag==1)//если кнопка НЕ нажата 
     //и переменная flag равна - 1 ,то ... 
     { 
        digitalWrite(13,!digitalRead(13)); 
        flag=0;//обнуляем переменную flag 
     } 
 } 
 
 
vlasovsreg
Offline
Зарегистрирован: 08.02.2017

При компиляции пишет Arduino: 1.8.1 (Windows XP), Плата:"Arduino/Genuino Uno"

 
collect2.exe: error: ld returned 5 exit status
 
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
 
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vlasovsreg, у Ардуино последних версий конфликт с Windows XP.

Замените линкер ld.exe на такой же, взятый из версии 1.0.х.