bubulindo, tentei de tudo aqui mas a impressão de 10 em 10 segundos não funciona... fica 10 segundos o lcd em branco dai imprime o coisas.... então coloquei o cursos no 0,1 para um e 1,0 para o outro e imprime os dois ao mesmo tempo, tentei mudar algumas coisas mas não funciona.... o statusheater ainda não testei. Utilizei exatamente seu script apenas com a adição do lcd lógico porque tive um problema.... não consigo juntar a impressao da temperatura com a do tempo porque cada um esta me um void, então quando eu coloco em outro lugar ele fala que não esta declarado naquele escopo
void printDate(){
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111);
int weekDay = bcdToDec(Wire.read());
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
if (hour >= 10 && hour < 24) digitalWrite(luz, LOW);
if (hour >= 0 && hour < 10) digitalWrite(luz, HIGH);
void printTemp(){
ds.reset();
ds.select(addr);
ds.write(0x44,1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) {
data = ds.read();
}*
unsigned int raw = (data[1] << 8) | data[0];*
if (type_s) {*
raw = raw << 3;*
if (data[7] == 0x10) {*
raw = (raw & 0xFFF0) + 12 - data[6];*
}}*
else {*
byte cfg = (data[4] & 0x60);*
if (cfg == 0x00) raw = raw << 3; *
else if (cfg == 0x20) raw = raw << 2;*
else if (cfg == 0x40) raw = raw << 1;*
}*
lcd.createChar(1,sinal);*
celsius = (float)raw / 16.0;*
if (celsius <= 27.0)digitalWrite(aquecedor, LOW);*
if (celsius >= 27.5)digitalWrite(aquecedor, HIGH);*
//statusHeater = digitalRead(aquecedor);*
if (celsius >= 28.0)digitalWrite(resfriador, LOW);*
if (celsius <= 27.5)digitalWrite(resfriador, HIGH);*
//statusFan = digitalRead(resfriador);*
Serial.print(" temperatura = ");*
Serial.print(celsius);*
Serial.println();*
lcd.clear();*
lcd.setCursor(0,0);*
lcd.print(celsius);*
lcd.write(1);*
}* gostaria de fazer um void printLCD(){ lcd.setCursor(0,0); lcd.print(celsius); lcd.write(1); lcd.setCursor(0,1); lcd.print(hour); lcd.print(":"); lcd.print(minute); assim consigo organizar cada coisa... e coloco para rodar no void loop com os outros : void loop(void) { printDate(); printTemp(); } em relação a temperatura eu até consigo mudar, mas o relógio se eu tirar do seu void e qualquer outro lugar que eu coloco da que HOUR não está declarado no escopo
o [2] é o numero de strings. Neste caso, tens duas, a LIGADO e DESLIGADO.
o [10] é o tamanho de ambas as matrizes, ou seja, o tamanho da maior string (desligado) mais um lugar vazio para colocar o terminador de string ('\0').
Julgava que me fosses perguntar o que era o ? e o : ...
posso deletar por completo o void printDate que foi substituido por vois updateTime? este updateTime faltou segundo certo? eu só vou utilizar hora e minuto mesmo, nem dia nem mes nada.... apenas para o timer de ligar e desligar a luz. bubulindo aquele script de imprimir de 10 em 10 segundos não funciona mesmo....
Sim... se quiseres podes meter o segundo, eu não me dei ao trabalho porque vi que não o usavas.
Quando à alternancia, eu reparei que o Arduino tem algum significado para now. Também reparei que meti as variáveis como locais.
Este sketch funciona para alternar de 10 em 10 segundos.
#define TIMEOUT 10000
void setup(){
Serial.begin(19200);
}
unsigned long t_now = 0, before = 0;
unsigned char data = 0;
void loop(){
if((t_now = millis())-before > TIMEOUT) {
if (data == 0) {
Serial.print("COISAS");
data = 1;
} else {
Serial.print("OUTRAS COISAS");
data = 0;
}
before = t_now;
}
}
bubulindo agora funcionou, ta ficando muito legal, muito obrigado....
Só tem um problema o lcd fica os 10 primeiros segundos em branco....
ainda não coloquei esse script no meu, criei um a parte exatamente com as coisas que tu me passou, então notei que vai ter um conflito
Serial.begin(19200);
substitui pelo meu 9600?
aproveitando meu relógio marca 0:3 ou seja hora menor que 10 e minuto menor que 10 ele fica em uma casa decimal, fica estranho... como arrumo apara 00:03?
como eu consigo imprimir mais de duas coisas segundo seu script?
o unico jeito que consegui foi substituindo o data = número por data ++, só que ele chega no ultimo número e trava... seguindo a mesma lógica que vc fez em cada if dando numero para o data não consigo adicionar mais que dois... aaa tive que substituir o data por datatime porque ja estava usando uma variavel com data
se colocar data = 0 no teste 3 não funciona.
if((now = millis())-before > TIMEOUT) {
if (datatime == 2) {
lcd.print(teste3);
datatime++;
}
if (datatime == 1) {
lcd.print(teste2);
datatime++;
}
if (datatime == 0) {
lcd.print(teste1);
datatime++;
}
before = now;
}
quanto a hora e minuto menor que 10 deu certinho, vlw
conseguindo agora resolver este problema em cima vou fazer o video para mostrar para vcs
criei minha forma, criei a variavel seg e de 0 a 10 imprime uma coisa e no final coloquei seg++; entao de 11 a 21 imprime outra e por ai vai, quando passa eu criei um seg = 0 e recomeça tudo denovo... funcionou legal....
Aparantemente sim, como falei não consegui criar mais de duas paginas de impressão com seu modo, então fiz com um contador... não sei se é a melhor forma ou se isto irá me trazer problemas...
esta semana faço o vídeo para vocês
Aliás, pensando bem... como tens um RTC e estás a sincronizar a hora de X em X tempo, podes até usar isso para ir mudando a informação que mostras no ecrã.
Parabéns pelo projecto conseguido, é sempre bom ver algo que fazemos funcionar. Eu notei agora que meti os pés pelas mãos ao comprar um LCD shield que não é compatível com o Ethernet shield. Enfim... vou mesmo ter de pegar no ferro de soldar.
Parabéns por a tua dedicação ao teu projecto. Sabe bem ver tudo a funcionar e da uma enorme satisfação veres que conseguiste o que pretendias e que um grande projecto agora se tornou simples
Pessoal primeiramente gostaria de agradecer vocês dois. Não teria conseguido sem voces.
segue o link do vídeo como prometido...
vou deixar isto rolando por alguns dias e ver se da algum problema.... ja encomendei uma caixa plastica de 12x10x6 que deve chegar em um mês e então vou ligar o sistema real.... Próxima etapa quero um ethernet shield para colocar estes dados na internet.
também quero adicionar no sistema um sistema de dosagem de quimicos no aquario, bem como controlar a temperatura do dissipador da luminária led.
o que acharam?
bubulindo, segundo o script que vc me passou em relação aos estados (ligado, desligado) como posso substituir eles por caracteres especiais? ja montei eles, e montei tambem para temperatura e relogio que ja estão funcionando... ficou bem legal.
para imprimir eles no lcd se usa o comando lcd.write(1); o 1 eu relacionei a um caracter, porém quando eu tento substituir diretamente pelo ligado por exemplo e envio o sketch para o arduino ele trava...
outra situação é, criei vários caracteres.... tem como eu criar um arquivo a parte e gravar na biblioteca? porque encheu o arquivo de caracteres especiais.
Gostei do vídeo. Acho que podias escrever Aquecedor e Refrigerador para ficar mais "bonito".
Define caracteres especiais? Será algo assim:
Tens um pedaço de código para eu entender o que está a acontecer e travar o sistema?
Como assim, um arquivo à parte? O que é para ti um arquivo? Referes-te a criar isso num ficheiro para poderes usar quando quiseres sem teres de ter isso no ficheiro de código do Arduino?
Quanto às tuas sugestões... Meter os dados na internet é bacano. Eu estou a pensar algo assim para a minha casa nova. Não será muito difícil creio.
Já regular a dosagem dos químicos é que não acho tão simples de fazer ou aconselhável, apenas porque podes matar os peixitos.
Como assim controlar a temperatura do dissipador da luminária? :\
isto mesmo, ja criei o character, vamos utilizar o exemplo da página porque não tenho o meu aqui em mãos:
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};
void setup() {
lcd.createChar(0, smiley);
}
agora basta eu colocar lcd.write(0); que imprime...
mas quro que substitua o off:
const char estados[2][10] = {"ON ", "OFF"};
assim const char estados[2][10] = {"ON ", smiley};
quanto ao ficheiro, correto, bem isto que quero....
tipo não sei se funciona assim mas criar um ficheiro simbolos.h
e no principal escrever #include <simbolos.h> para carregar ele....
quanto a colocar dados na internet o site exosite.com acho que faz isto não? teria outra indicação?
quanto a controlar os químicos ja existem pessoas fazendo isto e tambem o sistema pronto... basicamente eu tenho que controlar o tempo de funcionamento da bomba com o arduino para que ela dose certo.... a bomba se chama bomba peristáltica
controlar a temperatura da luminária porque o ventilador que refrigera o dissipador faz um pouco de barulho e a maior parte do tempo pode funcionar a 20% de sua capacidade.. então quero criar algo que, se tiver a determinada temperatura, ele funciona a 20% se aumentar a temperatura do dissipador, aumenta a velocidade do ventilador para 40% e por ai vai... se chegar numa temperatura critica desarma a luminária para que nada se queime... por exemplo, rompeu o fio do ventilador ou o mesmo não funciona, temperatura da luminaria aumenta sem parar e queimam os leds...., entao o arduino desligara a luminaria antes que isto aconteça.... estou pensando em colocar um lm35 colado no aluminio do dissipador juntamente com um isolante térmico para a temperatura externa não atrapalhar a leitura....
Coloca o ficheiro simbolos.h no directorio Arduino\libraries\simbolos. Vais ter de criar o directorio simbolos e provavelmente o directorio libraries.
Sai da IDE.
Volta a entrar.
Vai a Sketch-> Import Libray -> simbolos.
Há-de aparecer o tal include...
Depois usa as variáveis normalmente no teu código.
Eu usei a pachu.be. Eles já têm uma biblioteca para usar com o Arduino. É simples.
Esse controlo que pretendes chama-se PID... daí eu ter perguntado se a ventoínha era de 12V ou de 230... se for de 12V, podes arranjar uma ponte H (não é preciso tanto) ou um driver de motores tipo um transistor Darlington por exemplo, e controlar a velocidade da ventoínha por PWM.