Ir ao conteúdo
  • Cadastre-se

Jardiel Nascimento

Membro Júnior
  • Posts

    9
  • Cadastrado em

  • Última visita

Reputação

2
  1. pessoal, estou precisando de uma ajuda. estou controlando quatro reles com um arduino UNO, estou usando um lcd 16x2, mas ele é pequeno e eu gostaria de ver hora, data e status dos reles (on, off). então gostaria de incluir um push button. ex: na tela ficaria sempre mostrando a data e hora, quando eu apertasse o push button a tela mudaria para o status dos reles. agradeço desde já! #include "Wire.h" #include <LiquidCrystal_I2C.h> #include <OneWire.h> #include <DS3231.h> // Modulo RTC no endereco 0x68 #define DS3231_ADDRESS 0x68 // Modulo I2C display no endereco 0x27 LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); byte zero = 0x00; #define rele1 2 #define rele2 4 #define rele3 7 #define rele4 8 void setup() { pinMode (rele1, OUTPUT); pinMode (rele2, OUTPUT); pinMode (rele3, OUTPUT); pinMode (rele4, OUTPUT); lcd.begin(16,2); Wire.begin(); Serial.begin(9600); // A linha abaixo pode ser retirada apos setar a data e hora //SelecionaDataeHora(); } void loop(){ Mostrarelogio(); } void SelecionaDataeHora() // Seta a data e a hora do DS3231 { byte segundos = 01; // Valores de 0 a 59 byte minutos = 20; // Valores de 0 a 59 byte horas = 23 ; // Valores de 0 a 23 byte diadasemana = 4; // Valores de 0 a 6 (0=Domingo, 1 = Segunda...) byte diadomes = 28; // Valores de 1 a 31 byte mes = 2; // Valores de 1 a 12 byte ano = 19; // Valores de 0 a 99 Wire.beginTransmission(DS3231_ADDRESS); // Stop no CI para que o mesmo possa receber os dados Wire.write(zero); // As linhas abaixo escrevem no CI os valores de // data e hora que foram colocados nas variaveis acima Wire.write(ConverteParaBCD(segundos)); Wire.write(ConverteParaBCD(minutos)); Wire.write(ConverteParaBCD(horas)); Wire.write(ConverteParaBCD(diadasemana)); Wire.write(ConverteParaBCD(diadomes)); Wire.write(ConverteParaBCD(mes)); Wire.write(ConverteParaBCD(ano)); Wire.write(zero); //Start no CI Wire.endTransmission(); delay(1000); } byte ConverteParaBCD(byte val) { // Converte o n?mero de decimal para BCD return ( (val/10*16) + (val%10) ); } byte ConverteparaDecimal(byte val) { // Converte de BCD para decimal return ( (val/16*10) + (val%16) ); } void Mostrarelogio(){ Wire.beginTransmission(DS3231_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS3231_ADDRESS, 7); int segundos = ConverteparaDecimal(Wire.read()); int minutos = ConverteparaDecimal(Wire.read()); int horas = ConverteparaDecimal(Wire.read() & 0b111111); int diadasemana = ConverteparaDecimal(Wire.read()); int diadomes = ConverteparaDecimal(Wire.read()); int mes = ConverteparaDecimal(Wire.read()); int ano = ConverteparaDecimal(Wire.read()); // Mostra HORA atual no display lcd.setCursor(0,0); //if (horas < 10) //lcd.print("0"); // lcd.print(horas); // lcd.print(":"); // if (minutos < 10) // lcd.print("0"); // lcd.print(minutos); // lcd.print(":"); //if (segundos < 10) // lcd.print("0"); // lcd.print(segundos); // lcd.setCursor(1,1); // Mostra a DATA atual no display //lcd.setCursor(0,1); //if (diadomes < 10) //lcd.print("0"); //lcd.print(diadomes); // lcd.print("/"); //if (mes < 10) // lcd.print("0"); // lcd.print(mes); //lcd.print("/"); // lcd.print(ano); // rele 1 lcd.setCursor(0,0); if( horas == 11 && minutos >= 0 && minutos <= 2){ digitalWrite(rele1,LOW); lcd.print("R1:ON"); } else if(horas == 13 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 15 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 17 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 19 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 21 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 23 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 1 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 3 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 5 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 7 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else if(horas == 9 && minutos >=0 && minutos <= 2){ digitalWrite(rele1,LOW ); lcd.print("R1:ON"); } else{ digitalWrite(rele1,HIGH); lcd.print("R1:OFF"); } // rele 2 if((horas >= 11)&&(horas < 20)){ lcd.setCursor(8,0); digitalWrite(rele2,LOW); lcd.print("R2:ON"); } else{ digitalWrite(rele2,HIGH); lcd.print("R2:OFF"); } // rele 3 if((horas >= 11)&&(horas < 20)){ lcd.setCursor(0,1); digitalWrite(rele3,LOW); lcd.print("R3:ON"); } else{ digitalWrite(rele3,HIGH); lcd.print("R3:OFF"); } // rele 4 if((horas >= 11)&&(horas < 20)){ lcd.setCursor(8,1); digitalWrite(rele4,LOW); lcd.print("R4:ON"); } else{ digitalWrite(rele4,HIGH); lcd.print("R4:OFF"); } }
  2. Pessoal, estou com um probleminha, estou usando um rtc ds3231, um arduino uno e um lcd 20x4. O problema é o seguinte, os segundos dão uma pausa de 6 em 6 segundos, alguém tem ideia do q pode ser?
  3. Estou já desistindo. Rsrsrs... de fazer esse time. obrigado
  4. Outro problema me surgiu, tô enviando pwm por dois pinos, até aí beleza, mas as vezes o pwm n corresponde ao que coloquei. Ex: pino 5 envia 220, recebo 220. Pino 6 envia 110, recebo 56. Alguma ideia do que pode ser?
  5. Vou testar aqui, Agradeço a ajuda. adicionado 25 minutos depois Testei aqui e não funcionou. Vou tentar explicar o que eu estou fazendo. Estou querendo controlar um led com o pwm, ex: 9:00 quero que ele esteja com o sinal do pwm em 100, 9:30 quero que ele fique com 255 do pwm. Ele faz isso se eu usar só a hora, mas quando eu coloco pra fazer com o minutos ele não muda.
  6. Mas se chegar às 21: 30, a segunda linha não vai ser mais verdade, então se tornando a 4 linha como verdade. Não seria assim? Se não, como eu teria que fazer pra executar a 4 linha, depois da segunda?
  7. pessoal estou usando esse codigo para controlar o pwm. ex: EEPROM.write(2,200 ); }else if(horas == 21){ EEPROM.write(2,170 ); }else if(horas == 21 && minutos == 30){ na parte que uso a hora para mudar o pwm ele muda beleza, mas quando acrescento minutos ele nao muda, so muda pra hora seguinte. alguem poderia me ajudar ? todo o codigo esta no arquivo. codigo.txt

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...