if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
digitalWrite(LED_ERRO, HIGH); //ligar uma luzinha para dar erro...
digitalWrite(aquecedor, HIGH); //desliga aquecedor
digitalWrite(resfriador, HIGH); //desliga resfriador.
while (!ds.search(addr) { //enquanto não encontrar o sensor, fica preso aqui a procurar.
ds.reset_search();
delay(250);
}//return;
}
Se desligares os relés quando entrar em erro, isso não acontece.
funcionou mas tive que colocar o desligamento dos reles no while, como vc postou, mesmo com o ds conectado ele fica ligando e desligando o rele sem parar.....
agora esta ok, vou deixar esse sistema funcionar por um tempinho e ver como se comporta muito obrigado pessoal
ficando perfeito vou incrementar o RTC.....
Pessoal esta rodando até agora e teve o primeiro problema.... ontém quando fui desligar a luz do aquario deu problema no lcd do arduino.
Mas o aquario ainda não tem nada a ver com o arduino, a luz não está ligada no arduino, é um sistema a parte. o arduino só está do lado do aquario e o sensor ds está dentro da agua... apenas isto. Ele continuou funcionando porém o lcd imprimiu um monte de coisas estranha e não voltou ao normal.
Para escrever no LCD?
Porque não limpares o lcd antes de voltares a escrever?
O que é que realmente apareceu no LCD?
A minha opinião é que isso é certamente algum problema no sensor e comunicação com o mesmo.
Experimenta, por exemplo, imprimir para o lcd o valor de raw e o valor de celsius. Um está ligado ao outro e certamente que dará uma ideia do problema.
Hugo, no inicio deste tópico acho que respondi para vc isto.. por uma foto... é foi respondido por alguém que é... eu não sei....
Tudo rodou tranquilamente LONGE do aquario sem problema algum, foi só eu colocar do lado do aquario medindo a temperatura dele e quando desliguei a luz do mesmo imprimiu sujeira.....
Imprimiu coisa do tipo #%¨$#%$@¨%&¨@ e travou.... Não acredito que seja nada do sistema do arduino porque o mesmo funcionou sem problema algum longe do driver elétrico do led do aquario... acho que o problema é algum campo magnético, indução ou sei la o que..... A luz desligada ele está la funcionando perfeitamente, bem como ela ligada... o problema foi apenas quando desliguei... Depois liguei e desliguei para ver e não teve problema.... Os leds depois de desligados permanecem acesos por milésimos de segundos e ainda brilham por uns segundo, seria isto capacitor? não seria isto? porque quando liguei e desliguei rápido o led não brilha e desliga na hora e não atrapalhou o funcionamento do lcd.... seria um "capacitor" carregado que da problema no lcd?
bubulindo, o comando clear ou impressão de qualquer outra coisa quando da problema no lcd apaga e são impressos $#¨%#&%$&# em tudo quanto é lugar.... não é envio de informação errado....
Segundo passo na resolução do problema. Consegues provocar o erro repetidamente? Ou seja, consegues identificar exactamente o que causa isso?
Acho que podes fazer videos com o Skype... pdoes tentar fazer um video do que se passa e meter no youtube por exemplo para vermos o que se passa mesmo. E, como está tudo ligado com um esquema por exemplo.
Eu não acho que o problema esteja nas ligações do LCD...
Quando disse uma foto do sistema todo era para perceber o que podia, dentro do sistema todo, causar o problema.
Afinal de contas, se apenas ligares o Arduino ao LCD daquela forma, não tens problema algum, certo?
Nós estamos a tentar ajudar, mas após repetidos pedidos de mostrares todo o sistema e como tens tudo ligado, tu continuas a não dar muita informação ao que já sabemos. Então estamos literalmente a esgotar as possibilidades de ajuda que podemos dar sem mais informação.
Revê os meus posts (tipo os 5 anteriores ou isso) e tentar responder a todas as questões colocadas e logo vemos que mais podemos fazer.
P.S.:
Podes fazer o video e colocá-lo no youtube... não disse que eu ia estar no skype para ver o problema.
este vídeo desligando a luz simulando o mesmo problema que aconteceu ontém, hoje não houve problema
este vídeo mostra o sistem, os leds pequenos simulando aquecedor e refrigerador, o lcd shield e o relé shield ligado com os 5v do arduino, fiz uma ponte no vcc para alimentar as saídas do relé, e o sensor de temperatura.
Após ver o teu segundo video das ligaçoes tenho um palpite.Há uns tempos atras vi um video no youtube que agora nao consigo encontrar para te mostrar, que consistia em exemplificar o que pode acontecer se num dos fios do bus de dados que vai para o LCD for colocado um fio no ar ou simplesmente se o prolongares ,tipo um fio de um metro apesar de conectado.O que acontecia é parecido ao que tu contas.
No filme era visivel que quando ele conectava o fio começavam a aparecer artefactos no LCD que iam desaparecendo e aparecendo.
No fundo o que o criador do filme queria transmitir é que as interferencias podem causar esses danos.
Como tu dizes que isso acontece quando ligas a iluminaria dos Leds que recorrem a muito provavelmente a sinais PWM possam estar a emitir interferencias que depois sao captadas pelos teus fios que tens no ar.
É so um palpite mas para o despistares podes tentar reduzir a distancia dos cabos ou entao tentar colocar todo esse circuito dentro de um tumper-ware e depois forra-lo com prata, tipo uma gaiola imune a ruido eletromagnetico.
Muitos equipamentos recorrem à de blindagem eletromagnetica por estes motivos.
Faz o teste é rapido
HugoPT:
É so um palpite mas para o despistares podes tentar reduzir a distancia dos cabos ou entao tentar colocar todo esse circuito dentro de um tumper-ware e depois forra-lo com prata, tipo uma gaiola imune a ruido eletromagnetico.
Lembra-te, o papel de prata é condutor... não faças como eu que queimou uma placa de aquisição da National à custa de fazer uma gaiola de papel de prata.
Mas a ideia é boa e resulta. Experimenta, mas com cuidado.
Não fiz nada e não aconteceu mais o problema. Tirei tudo da protoboard e fiz uma fiação e ficou mais limpo. Dei também uma arrumada e estruturada no código.
Estou com duas dúvida uma já tentei de tudo e não consegui. Quando a saída do aquecedor por exemplo estiver ligada ou desligada eu gostaria de imprimir isto no lcd, mas o que eu consigo é apenas imprimir o status em 1 e 0. Gostaria de substitui o 1 por LIGADO e 0 por DESLIGADO
aqui está o comando:
statusHeater = digitalRead(aquecedor);
então mando imprimir statusHeater e imprime o numero 1 ou 0 de acordo.
A outra pergunta é... gostaria de imprimir informações de relógio e temperatura no lcd por alguns segundo e logo imprimir outras informações por mais tantos segundos, ficar alternando entre um e outro.....
não gostaria de utilizar delay, apenas um contator separado ou uma condição, por exemplo 10 segundos numa tela e 10 segundo em outra tela
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 : ...