LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Leandro Beatto em 04 de Abril de 2011, 23:39
-
Galera
boa noite
Alguem poderia me ajudar??
Estou automatizando uma estufa com uma placa Arduino, o procedimento é o seguinte;
inicia com 80 graus e permanece durante 2horas;
depois com 100 graus e permanece durante 4horas;
e por fim com 40 graus permancendo por 1hora
e
fim.
Minha duvida é como permancer o loop durante o tempo determinado e dps pular para o outro programa???
se alguem puder me ajudar eu agradeço
Obrigado
Leandro Beatto.
-
Podes fazer com um rtc, ou entao com delays.. mas provavelmente tens de fazer muitos incrementos ate passar esse tempo todo. nao sei quanto tempo podes fazer delay de uma vez so
-
#include <MsTimer2.h>
void count() {
timecount++;
}
void setup() {
volatile uint16_t timecount=0;
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
MsTimer2::set(1000, count);
MsTimer2::start();
}
void loop() {
//2horas*60minutos*60segundos=7200
if(timecount>=7200){
digitalWrite(13, LOW);
timecount=0;
}
}
Algo deste género deve fazer o que queres.
-
O delay do Arduino aceita um unsigned int se não me engano, logo podes fazer delays de até 65535 mili-segundos, o que dá cerca de 65 segundos.
Mas ficar a queimar horas num delay é um erro, o programa deve ir contando o tempo e SEM bloquear a execução deve continuar a ler os sensores e essas coisas todas, porque se lhe metes um delay ele fica ali parado a fazer nops.
-
Obrigado pela ajuda.!!
O progama que iniciei é assim;
int rele = 9;
int SENSOR = 0;
float D = 0;
float T = 0;
float L = 61.38;
void setup(){
Serial.begin(9600);
Serial.println("Lendo Temperatura...");
pinMode (9, OUTPUT);
}
void loop(){
D = analogRead(SENSOR);
T = (D * 5 * 100)/1023;
Serial.print(T);
Serial.println(" C");
delay(3000);
{
if(analogRead(SENSOR)<L){
digitalWrite(rele, HIGH);
}
else
if(analogRead(SENSOR)>=L){
digitalWrite(rele, LOW);
}
}
}
mas, preciso encaixar alguma coisa que possa fazer o procedimento do tempo..
-
O exemplo do metro é bom para isso, usando a biblioteca MsTimer.
Só uma coisa, o analogWrite retorna um valor inteiro, usar floats só ocupa mais memória sem ganhar nada com isso.
-
OK.
é pq não expliquei o precedimento direito, não ficará somente no tempo, o Arduino irá ler o sensor mantendo a temperatura entre uma determinado faixa durante um determinado tempo.
e tb estou tentando fazer os testes com o programa enviado por o metRo, mas, está dando erro no compilar;
#include <MsTimer2.h> erro:Nenhum arquivo ou diretório
este library não tem no programa para importar, será que é isso?? qual procedimento que eu faço??
Att. Leandro
-
Tens que fazer o download da biblioteca primeiro
-
Ok.
instalei na biclioteca, mas continua o erro anexo
timecount++; erro:sketch_apr05a:15: error: 'timecount' was not declared in this scope
-
Isso é porque o timecount não foi declarado como uma variavel.
#include <MsTimer2.h>
volatile uint16_t timecount = 0;
void count() {
timecount++;
}
void setup() {
volatile uint16_t timecount=0;
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
MsTimer2::set(1000, count);
MsTimer2::start();
}
void loop() {
//2horas*60minutos*60segundos=7200
if(timecount>=7200){
digitalWrite(13, LOW);
timecount=0;
}
}
Assim já deve compilar.