Pages: 1 2 3 [4] 5 6 ... 9   Go Down
Author Topic: Problemas com relé  (Read 17424 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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);

                      Serial.print(hour);
                      Serial.print(":");
                      Serial.print(minute);
                      lcd.setCursor(0,1);
                      lcd.print(hour);
                      lcd.print(":");
                      lcd.print(minute);
                      }
                     
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] << smiley-cool | 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
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sobre o estados eu testei e funcionou perfeito, demais bubulinodo.
o que quer dizer esse [2] e o [10]
?
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok... aquele código parece correcto para mim.

Quanto ao que pretendes fazer, queres uma função que vá buscar a data e hora para meter no lcd, certo?

Experimenta adicionar isto no inicio:

Code:
struct data_hora {
   unsigned char minuto;
   unsigned char hora;
   unsigned char dia;
   unsigned char mes;
   unsigned int ano;
} agora;
Isto é uma estrutura de dados que cria uma variável com o nome agora.

Depois a tua função printDate, passa a chamar-se updateTime e fica assim:

Code:
void updateTime(struct data_hora *dt){
   Wire.beginTransmission(DS1307_ADDRESS);
   Wire.write(zero);
   Wire.endTransmission();
   Wire.requestFrom(DS1307_ADDRESS, 7);
   int dummy = (unsigned char)bcdToDec(Wire.read());
   dt->minuto = bcdToDec(Wire.read());
   dt->hora = (unsigned char)bcdToDec(Wire.read() & 0b111111);
   dummy = bcdToDec(Wire.read());
   dt->dia = (unsigned char)bcdToDec(Wire.read());
   dt->mes = (unsigned char)bcdToDec(Wire.read());
   dt->ano = bcdToDec(Wire.read());
}

Depois tens de fazer update à estrutura agora em todos os ciclos.

Code:
void loop() {
updateTime(&agora);
}

E para usares a estrutura agora, fazes assim:

Code:
void printLCD(){
  lcd.setCursor(0,0);
  lcd.print(celsius);
  lcd.write(1);    
  lcd.setCursor(0,1);
  lcd.print(agora.hora);
  lcd.print(":");
  lcd.print(agora.minuto);
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sobre o estados eu testei e funcionou perfeito, demais bubulinodo.
o que quer dizer esse [2] e o [10]
?

Antes de mais, alguma background teórico:

http://www.juliobattisti.com.br/tutoriais/katiaduarte/cbasico004.asp
http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c530.html

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 : ...

Em todo o caso, fica aqui:

http://pt.wikipedia.org/wiki/Opera%C3%A7%C3%A3o_tern%C3%A1ria
http://www.vivaolinux.com.br/topico/C-C++/O-operador-ternario-()
http://linguagemc.com.br/o-operador-ternario-em-c/
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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....
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
#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;
   }


}
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Podes imprimir alguma coisa no LCD dentro do setup para evitar isso de ficar em branco. Algo como o nome do sistema, por exemplo?

Sim, podes trocar pela baud que estás a usar. Aquilo é um exemplo e eu uso 19200 como defeito.

Para imprimir com zeros à frente, experimenta assim:

Code:
if (dt->minuto <10) lcd.print("0");
lcd.print(dt-minuto);

Isto tem a ver com a forma como o arduino faz a conversão de int para string. Assim parece-me ser a solução mais simples.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: February 03, 2013, 04:08:18 pm by lmeireles43 » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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....
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

smiley

Está tudo a funcionar como deve ser agora?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3267
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Com um contador também funciona...

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. smiley-sad Enfim... vou mesmo ter de pegar no ferro de soldar.

Mete fotos e vídeos para a gente se babar. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Online Online
Edison Member
*
Karma: 37
Posts: 1583
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pessoal primeiramente gostaria de agradecer vocês dois. Não teria conseguido sem voces.
segue o link do vídeo como prometido...
http://youtu.be/-4P-f0MGjns

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?
Logged

Pages: 1 2 3 [4] 5 6 ... 9   Go Up
Jump to: