Проблема с таймером

newdope
Offline
Зарегистрирован: 15.01.2014
Добрый день, не подскажите почем плохо работает данный скетч.
Требуеться что бы светодиод на пин 13 загарался и гас в указанное время.
По таймеру включаеться, но при первом таймере горит очень тускло,а при 
втором горит как надо. Вопрос что дописать или переписать что бы светодиод при 
обоих таймерах горел как надо и почему вообще он тусклее горит?


#include "Arduino.h"
#include <Wire.h>
#include <DS1307.h> 
#define light 13


void setup()
{

  pinMode(light, OUTPUT); 
 

}



void loop()
{
  
  int Hour = RTC.get(DS1307_HR, true); 
  int Minute = RTC.get(DS1307_MIN, false); 
  int Second = RTC.get(DS1307_SEC, false); 
  int FullMinutes = Hour * 60 + Minute;
  
  
  int lightOn = 20 * 60 + 35;
  int lightOff = 20 * 60 + 36;
  if(FullMinutes >= lightOn && FullMinutes <= lightOff){
    digitalWrite(light, HIGH);
  } 
  else{
    digitalWrite(light, LOW);
}
  int lightOn1 = 20 * 60 + 45;
  int lightOff1 = 20 * 60 + 46;
  if(FullMinutes >= lightOn1 && FullMinutes <= lightOff1){
    digitalWrite(light, HIGH);
  } 
  else{
    digitalWrite(light, LOW);
}
}

 

xorkrus
Offline
Зарегистрирован: 22.09.2013

Потому что пин светодиода получает ВКЛ от первого таймера но ВЫКЛ от второго. Получаем типа ШИМ 50%.

Соответственно во втором случае никто ВЫКЛ не делает и все путем.

А ещё расскажите как вы собираетесь отразить состояние двух таймеров одним светодиодом? Имхо текущий вариант лучший.

leshak
Offline
Зарегистрирован: 29.09.2011

Подозреваю что тут хотели сделать "два временных интервала когда горит, в остально время - выключен"

if( Первое_Условие_Включения){
  // включаем
}  
else if( Второе_условие_Включение){
   включаем
} else if {
  выключаем
}

Если условие включения короткие и "в глазах не путаеются", то можно не разбивать на два if-а, а объеденить в одно через ||

if(  (Первое_Условие) || (Второе_Условие) ){

  Включаем

} else {
   Выключаем
}

Если кроме включения нам ничего не нужно (выводить там отчет в сериал, засекать время "когда включили" и т.п.), то можно еще больше свернуть

digitalWrite(LED,  (Первое_Условие) || (Второе_Условие));