como elaborar programa para motor acionar de 12 em 12 horas sem travar o loop de outra subrotina
estou fazendo uma chocadeira e não esta funcionando no proteus
Boas, como é um projecto que funciona em grandes intervalos de tempo recomendo a utilizar um módulo de relógio RTC DS3231, e depois programar o arduino para tal hora accionar o motor.
Boa tarde
fiz o codigo no ardublock
mas não estou conseguindo acionar o rele na hora extipulada
por favor me ajudem
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#include <OneWire.h>
#include <Duinoedu_DallasTemperature.h>
int _ABVAR_1_HUMIDO = 0 ;
int _ABVAR_2_SECO = 0 ;
int _ABVAR_3_QUENTE = 0 ;
int _ABVAR_4_FRIO = 0 ;
int _ABVAR_5_DESLIGA = 0 ;
DS1307 clock;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//libraries at http://duinoedu.com/dl/lib/grove/EDU_DHT_Grove/
DHT monDHT_pin10(10);
OneWire oneWire_7(7);
Duinoedu_DallasTemperature mySensor_7(&oneWire_7);
void setup()
{
pinMode( 6 , OUTPUT);
pinMode( 8 , OUTPUT);
pinMode( 9 , OUTPUT);
clock.brancher();
clock.ecrireDate(8,9,2015);
clock.ecrireHeure(11,59,30);
lcd.begin(16, 2);
monDHT_pin10.brancher();
mySensor_7.begin();
clock.brancher();
_ABVAR_1_HUMIDO = 55 ;
_ABVAR_2_SECO = 53 ;
_ABVAR_3_QUENTE = 38 ;
_ABVAR_4_FRIO = 37 ;
_ABVAR_5_DESLIGA = 0 ;
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(monDHT_pin10.lireTemperature());
lcd.setCursor(0,2);
lcd.print(mySensor_7.readTemperatureInDegreesAndReturnFloat());
lcd.setCursor(10,0);
lcd.print(monDHT_pin10.lireHumidite());
lcd.setCursor(10,2);
lcd.print(clock.lireHeures());
lcd.setCursor(12,2);
lcd.print(":");
lcd.setCursor(13,2);
lcd.print(clock.lireMinutes());
if (( ( monDHT_pin10.lireHumidite() ) <= ( _ABVAR_2_SECO ) ))
{
digitalWrite(6 , HIGH);
}
else
{
if (( ( monDHT_pin10.lireHumidite() ) >= ( _ABVAR_1_HUMIDO ) ))
{
digitalWrite(6 , LOW);
}
}
if (( ( mySensor_7.readTemperatureInDegreesAndReturnFloat() ) <= ( _ABVAR_4_FRIO ) ))
{
digitalWrite(8 , HIGH);
}
else
{
if (( ( mySensor_7.readTemperatureInDegreesAndReturnFloat() ) >= ( _ABVAR_3_QUENTE ) ))
{
digitalWrite(8 , LOW);
}
}
if (( ( ( ( clock.lireHeures() ) == ( 12 ) ) ) == ( ( ( ( ( clock.lireMinutes() ) == ( 00 ) ) ) == ( ( ( clock.lireSecondes() ) == ( 0 ) ) ) ) ) ))
{
digitalWrite(9 , HIGH);
}
if (( ( ( ( clock.lireHeures() ) == ( 12 ) ) ) == ( ( ( ( ( clock.lireMinutes() ) == ( 00 ) ) ) == ( ( ( clock.lireSecondes() ) == ( 10 ) ) ) ) ) ))
{
digitalWrite(9 , LOW);
}
}
Tens parentesis a mais neste código...
Isto:
if (( ( ( ( clock.lireHeures() ) == ( 12 ) ) ) == ( ( ( ( ( clock.lireMinutes() ) == ( 00 ) ) ) == ( ( ( clock.lireSecondes() ) == ( 0 ) ) ) ) ) ))
Muito dificilmente faz o que tu queres. Porque não trocar por:
if ((clock.lireHeures() == 12 ) && (clock.lireMinutes() == 0) && (clock.lireSecondes() == 0))
???
Outra coisa a ter em conta é o formato das horas. Se estiver configurado de 00:00 a 23:59:59, o código funciona ao meio dia. Se estiver configurado de 00:00:00 a 11:59:59 AM/PM, nunca vai funcionar. Que horas é que te aparecem no LCD?
boa tarde, essa parte consegui resolver, mas tenho mais uma duvida, estou usando um sensor ds18b20 mas tem como fazer ele desligar um sensor com 37.5 graus celsios pois ele não está obedecendo o comando
if (( ( mySensor_7.readTemperatureInDegreesAndReturnFloat() ) <= ( _ABVAR_4_FRIO ) ))
{
digitalWrite(8 , LOW);
}
else
{
if (( ( mySensor_7.readTemperatureInDegreesAndReturnFloat() ) >= ( _ABVAR_3_QUENTE ) ))
{
digitalWrite(8 , HIGH);
}
}
Tu não podes desligar um sensor... o que deves estar a fazer é ligar e desligar um aquecedor com base na leitura do sensor.
A leitura da temperatura está a funcionar? Vês a temperatura correcta nalgum lado?
A lógica do >= e <= deixa uma área em que o actuador não activa. Temperaturas entre 37 e 38 para ser mais exacto. O que é que não está a funcionar? Não liga? Não desliga?