-
Posts
9 -
Cadastrado em
-
Última visita
Reputação
2-
Arduino arduino: mudar informações do lcd 16x2 com um botão.
Jardiel Nascimento respondeu ao tópico de Jardiel Nascimento em Microcontroladores
tentei, mas não funcionou. -
Arduino arduino: mudar informações do lcd 16x2 com um botão.
Jardiel Nascimento postou um tópico em Microcontroladores
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"); } } -
Outro Segundos do rtc ds3231 dando uma pausa de 6 em 6 segundos
Jardiel Nascimento postou um tópico em Microcontroladores
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? -
C código do arduino nao reconhece minutos...
Jardiel Nascimento respondeu ao tópico de Jardiel Nascimento em C/C#/C++
Estou já desistindo. Rsrsrs... de fazer esse time. obrigado -
C código do arduino nao reconhece minutos...
Jardiel Nascimento respondeu ao tópico de Jardiel Nascimento em C/C#/C++
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? -
C código do arduino nao reconhece minutos...
Jardiel Nascimento respondeu ao tópico de Jardiel Nascimento em C/C#/C++
Deu certo AnsiC, obrigado pela ajuda!!! -
C código do arduino nao reconhece minutos...
Jardiel Nascimento respondeu ao tópico de Jardiel Nascimento em C/C#/C++
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. -
C código do arduino nao reconhece minutos...
Jardiel Nascimento respondeu ao tópico de Jardiel Nascimento em C/C#/C++
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? -
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