Помогите с кодом

fors1982
Offline
Зарегистрирован: 01.09.2015

Помогите разобраться новичку с кодом. Есть Arduino nano

Требуется управлять двумя выходами. Пусть будет выход 1 и выход 2. Начальные уровни на них низкие.

Будет один вход с кнопкой. 

Алгоритм такой - при коротком нажатии на кнопку,  выход 1 переводится в состояние high на время 5 секунд, а выход 2 - переводится в состояние high только через секунду после того, как включился выход 1. Время на которое включается выход 2 равно одной секунде.  

Соответственно по истечении 5 секунд после нажатия кнопки - выход 1 выключается.  и снова ждем когда нажмут на кнопку.

Araris
Offline
Зарегистрирован: 09.11.2012

Постановка задачи сделана грамотно и толково, респект. А где же код, с которым Вы просите помочь разобраться ?

bwn
Offline
Зарегистрирован: 25.08.2014

Araris пишет:

Постановка задачи сделана грамотно и толково, респект. А где же код, с которым Вы просите помочь разобраться ?

Оооо, это хороший вопрос, код еще предстоит написать)))

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

Araris пишет:

Постановка задачи сделана грамотно и толково, респект. А где же код, с которым Вы просите помочь разобраться ?

Задачу задали в обобщённой школе. Преподаватель сформулировал, а кода-решения вот не дал - нехороший человек! Так что кода нет. Топикстартер ожидает, что г-н Araris его напишет :)))))))))))))))

Araris
Offline
Зарегистрирован: 09.11.2012

Увы-увы..

dnwolf
Offline
Зарегистрирован: 16.05.2015

Доброе время суток .

помогите доделать код. проблема с задержками времени.

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

1 считывается показания влажности и включается вентилятор.

но хотелось бы чтоб он работал какоето время 

2 считываем датчик освещенности и включаем вентилятор тоже с задержной времени.

с делай все виснет другие варианти прочитал но не разобрался.

требуется помощь

мой код






#include <IRremote.h>
 #include "DHT.h"
 int led1 = 11;    //зеленый светодиод (работа в АВТО режиме)
 int led2 = 12;    // красный светодиод (включен РУЧНОЙ режим)
 int irrem = 4;    // пин ИК приемника
 int fan = 2;      // пин реле вентилятора пин 2
 int svet= A7;     //пин фоторезистора
 int IKValue1 = 0; // переменная для кнопки 1
 int IKValue2 = 0; // переменная для кнопки 2
 unsigned int svetValue = 0; // переменная для датчика света
  
 #define DHTPIN 3         // пин датчика влажности
 #define DHTTYPE DHT11
 DHT dht(DHTPIN, DHTTYPE);
  
 IRrecv irrecv(irrem);
 decode_results results;
 #define code1  16748655 // Кнопка 1 Авторежим (зеленая индикация)
 #define code2  16758855 // Кнопка 2 Ручной режим (красная индикация) вентилятор включен
 //-------------------------------------------
 void setup() 
 {
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(fan, OUTPUT);
 digitalWrite(led1, HIGH);
 irrecv.enableIRIn();
 Serial.begin(9600);
 }
 //-----------------------------------------
 void loop() 
 {
 svetValue = analogRead(svet); // считываем значение с фоторезистора 
 float h = dht.readHumidity();
 //float t = dht.readTemperature();
 round(h);
 //round(t);
 //Serial.print("Temperature: "); 
 //Serial.print(t);
 //Serial.println(" *C");
 Serial.print("Vlahnovt: ");
 Serial.println(h);
 Serial.print(" %\t");
 Serial.println("Svet: ");
 Serial.println(svetValue);
  
 if
 (h >50 && digitalRead (led1) == HIGH)  //если включен АВТО и влажность выше 50 % 
 digitalWrite(fan, HIGH);               // включаем вентилятор
 //задержка времени 10 минут после падения ниже установленого уровня
 //выключаем вентилятор
 else if
 (svetValue <500 && digitalRead (led1) == HIGH) // если включен АВТО и сет выше 500 %
 //задержка времени 5 минут затем 
 digitalWrite(fan, HIGH);                       // включаем вентилятор
 //задержка времени 5 минут
 //выключаем вентилятор
 else if
 (digitalRead (led2) == HIGH)// если включен РУЧНОЙ
 digitalWrite(fan, HIGH);    // включаем вентилятор пока включен ручной режим
 else
 digitalWrite(fan, LOW);     // вылючаем вентилятор если нет условий
  
 {if (irrecv.decode(&results)) {
 unsigned int value = results.value; 
 switch(value) {
 case code1:                    // Если пришел код кнопки 1 (АВТО режим Зеленый светодиод)
     if(IKValue1 == 1)          // если статус кнопки равен 1
     {             
     digitalWrite(led1, LOW);   // выключаем 
     IKValue1 = 0;              // присваиваем кнопке статус 0
     } 
     else                     // если нет
     {                    
     digitalWrite(led1, HIGH);  //включаем
     IKValue1 = 1;              //  присваиваем кнопке статус 1
     }
 break; 
 case code2:                   //Если пришел код кнопки 2 (РУЧНОЙ режим красный светодиод)
     if(IKValue2 == 1)         // если статус кнопки равен 1
     {        
     digitalWrite(led2, LOW);  // выключаем
     IKValue2 = 0;              // присваиваем кнопке статус 0
     } 
     else                       // если нет   
     { 
     digitalWrite(led2, HIGH);   //включаем
     IKValue2 = 1;               //присваиваем кнопке статус 1
     }
 break;
 }
 irrecv.resume();
 }
 }
 }

 

 
Radjah
Offline
Зарегистрирован: 06.08.2014

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

> #define DHTTYPE DHT11

Брось бяку. Купи нормальный датчик. Дискретность у этого 1 секунда. Для пинов добавь const.

Расставь фигурные скобки, так будет проще разобраться в структуре.