rial.begin (9600);if (!SD.begin(4)){Serial.println("Erro ao iniciar o cartao SD !");inicio_ok =0;return;}
Serial.println ("Iniciacao Ok!");}
void loop (){ Mostrarelogio(); delay(1000); {if (inicio_ok) { int opcao = Serial.read();if (opcao == 'C'){Serial.println ("Opcao Configuracao Selecionada");opcao = Serial.read();while (opcao == -1){opcao = Serial.read();}int valorConfig = opcao - 48;EEPROM.write (0 , valorConfig);Serial.print ("Valor gravado com sucesso:");Serial.println (valorConfig);}else if (opcao == 'w'){while (opcao !='x'){int leituraSensor = analogRead (0);arquivo = SD.open ("sensor.txt, FILE_WRITE");if (arquivo){arquivo.print ("Valor do sensor em:");arquivo.print (millis());arquivo.print (" ms: ");arquivo. println (leituraSensor);arquivo.close();delay (1000 * EEPROM.read (0));Serial.print ("Feita leitura do sensor em");Serial.print (EEPROM.read(0), DEC);Serial.println("segs.");}else{Serial.println ("Erro ao abrir o arquivo para escrita!");}opcao = Serial.read();}Serial.println ("Terminando leitura do Sensor!");}else if (opcao == 'r'){arquivo = SD.open ("sensor.txt");if (arquivo){while (arquivo.available()){Serial.write( arquivo.read());}arquivo.close();Serial.println("Termino da leitura");}else{Serial.println ("Erro ao abrir arquivo para leitura");}}else if (opcao == 'e'){SD.remove ("sensor.txt");if (!SD.exists ("sensor.txt") ){Serial.println ("Arquivo apagado com ");}else{Serial.println ("Erro ao apagar arquivo!"); } } }}}
void SelecionaDataeHora() //Seta a data e a hora do DS1307{ byte segundos = 40; //Valores de 0 a 59 byte minutos = 59; //Valores de 0 a 59 byte horas = 23; //Valores de 0 a 23 byte diadasemana = 1; //Valores de 0 a 6 - 0=Domgino, 1 = Segunda, etc. byte dia = 17; //Valores de 1 a 31 byte mes = 4; //Valores de 1 a 12 byte ano = 13; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
//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(dia)); Wire.write(ConverteParaBCD(mes)); Wire.write(ConverteParaBCD(ano));
Wire.write(zero); //Start no CI Wire.endTransmission(); }
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(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read()); int minutos = ConverteparaDecimal(Wire.read()); int horas = ConverteparaDecimal(Wire.read() & 0b111111); int diadasemana = ConverteparaDecimal(Wire.read()); int dia = ConverteparaDecimal(Wire.read()); int mes = ConverteparaDecimal(Wire.read()); int ano = ConverteparaDecimal(Wire.read());
//Mostra a data no Serial Monitor Serial.print("Data: "); Serial.print(dia); Serial.print("/"); Serial.print(mes); Serial.print("/"); Serial.print(ano); Serial.print(" "); Serial.print("Hora : "); Serial.print(horas); Serial.print(":"); Serial.print(minutos); Serial.print(":"); Serial.print(segundos); switch(diadasemana) { case 0:Serial.println(", Domingo"); break; case 1:Serial.println(", Segunda"); break; case 2:Serial.println(", Terca"); break; case 3:Serial.println(", Quarta"); break; case 4:Serial.println(", Quinta"); break; case 5:Serial.println(", Sexta"); break; case 6:Serial.println(", Sabado"); }}…
display 16X2 Criado por Eng. Carlos kwiek - Rio de Janeiro - RJ - Brasil 02 de Agosto de 2015 - e-mail carloskwiek1@hotmail.com O codigo é livre para uso e modificação, seguindo as diretivas de software open source. Use por sua conta e risco. */
#include "Wire.h"#include <LiquidCrystal.h>
#define DS1307_ADDRESS 0x68
// Inicializa o LCDLiquidCrystal lcd(8, 9, 4, 5, 6, 7);
byte zero = 0x00; int buzzer = 13;
void setup(){ pinMode (buzzer, OUTPUT); // Define o LCD com 16 colunas e 2 linhas lcd.begin(16, 4); Wire.begin(); Serial.begin(9600); // A linha abaixo pode ser retirada apos setar a data e hora // SelecionaDataeHora(); }
void loop(){ Mostrarelogio(); delay(1000);}
void SelecionaDataeHora() // Seta a data e a hora do DS1307{byte segundos = 01; // Valores de 0 a 59byte minutos = 30; // Valores de 0 a 59byte horas = 19; // Valores de 0 a 23byte diadasemana = 0; // Valores de 0 a 6 (0=Domingo, 1 = Segunda...)byte diadomes = 22; // Valores de 1 a 31byte mes = 11; // Valores de 1 a 12byte ano = 15; // Valores de 0 a 99 Wire.beginTransmission(DS1307_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(); }
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(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_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()); // Imprime mensagem na primeira linha do display lcd.setCursor(0,0); lcd.print("DATA: ");
// Mostra a hora atual no display lcd.setCursor(6, 1); 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); // Mostra a HORA atual no display lcd.setCursor(0,1); lcd.print("HORA: "); lcd.setCursor(0, 2); lcd.print(" "); lcd.setCursor(6,0); 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); // Definicao do alarme. if (horas == 06 && minutos == 00 && segundos == 0)//Define a hora de tocar o alarme por 1o segundos { digitalWrite (buzzer, HIGH);// Eleva tensao pino 13 para 5V delay (10000);// Atrasa 50ms } { digitalWrite (buzzer, LOW); //Abaixa tensao pino 13 para 0V }
if (horas == 18 && minutos == 00 && segundos == 00)//Define a hora de tocar o alarme por 10 segundos { digitalWrite (buzzer, HIGH);// Eleva tensao pino 13 para 5V delay (10000);// Atrasa 50ms } { digitalWrite (buzzer, LOW); //Abaixa tensao pino 13 para 0V }
}…
o sensor.. o mega, manda sinal pro modulo de rele ligar..
alguem pode me ajudar
#include <NewPing.h>
int led1 = 22; int led2 = 23; int led3 = 24; int led4 = 25; int led5 = 26; int led6 = 27; int led7 = 28; int led8 = 29; int led9 = 30; int led10 = 31; int led11 = 32; int led12 = 33; int led13 = 34; int led14 = 35; int led15 = 36; int led16 = 37;
#define SONAR_NUM 2 // Define o numero de sensores#define MAX_DISTANCE 200 // Distancia maxima#define PING_INTERVAL 33 // Milisegundos de intervalo entre medicoes
unsigned long pingTimer[SONAR_NUM]; // Armazena a quantidade de vezes que a medicao deve ocorrer, para cada sensorunsigned int cm[SONAR_NUM]; // Armazena o numero de medicoesuint8_t currentSensor = 0; // Armazena o sensor que esta ativo
NewPing sonar[SONAR_NUM]= { // Armazena informacoes sobre a pinagem dos sensores NewPing(9, 8, MAX_DISTANCE), // Pino trigger, echo e distancia máxima, para cada sensor NewPing(4, 3, MAX_DISTANCE), };
int i = 1;int totalSaidas = (22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37);int t = 200; //tempo entre o acender dos leds.int tempo = 2000; //tempo que fica aceso os leds para depois apagar.
void setup(){Serial.begin(9600); //Inicializando o serial monitor pingTimer[0] = millis() + 75; //Primeira medicao começa com 75ms for (uint8_t i = 1; i < SONAR_NUM; i++) //Define o tempo de inicializacao de cada sensor pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;
pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); pinMode(led4,OUTPUT); pinMode(led5,OUTPUT); pinMode(led6,OUTPUT); pinMode(led7,OUTPUT); pinMode(led8,OUTPUT); pinMode(led9,OUTPUT); pinMode(led10,OUTPUT); pinMode(led11,OUTPUT); pinMode(led12,OUTPUT); pinMode(led13,OUTPUT); pinMode(led14,OUTPUT); pinMode(led15,OUTPUT); pinMode(led16,OUTPUT); digitalWrite(totalSaidas,LOW);}void loop(){
for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop entre todos os sensores if (millis() >= pingTimer[i]) { pingTimer[i] += PING_INTERVAL * SONAR_NUM; //Define o tempo que o proximo sensor sera acionado if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // Ciclo do sensor completo sonar[currentSensor].timer_stop(); // Reseta o timer antes de ler o proximo sensor currentSensor = i; // Número do sensor sendo acionado cm[currentSensor] = 0; // Se nao houver eco do sensor, seta a distância como zero sonar[currentSensor].ping_timer(echoCheck); } }} void echoCheck() { //Se receber um sinal (eco), calcula a distancia if (sonar[currentSensor].check_timer()) cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM; }
void oneSensorCycle() { // Ciclo de leitura do sensorfor (uint8_t i = 0; i <SONAR_NUM; i++){ Serial.print(i); Serial.print("="); Serial.print(cm[i]); Serial.print("cm "); delay(1000); Serial.println();}
if (cm[0] > 10 && cm[0] < 100);{ for (int i=1; i<=totalSaidas; i++){ digitalWrite(i, HIGH); delay(t); } delay(tempo); for (int i=1; i<=totalSaidas; i++){ digitalWrite(i, LOW); delay(t); }}//Se for detectado objeto entre 0 e 50 cm do sensor2, acende o led if (cm[1] > 10 && cm[1] < 100) { for (int i=1; i<=totalSaidas; i++){ digitalWrite(totalSaidas+1-i, HIGH); delay(t); } delay(tempo); for (int i=1; i<=totalSaidas; i++){ digitalWrite(totalSaidas+1-i, LOW); delay(t); } } }
…
arduino
/
#include <CapSense.h>#include <Tone.h>
/*Generates up to 5 simultaneous tones and controls a series of LEDsbased on input from a series of capacitive sensors.Uses the CapSense (http://www.arduino.cc/playground/Main/CapSense)and Tone libraries (http://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation)William E. Byrd and Catarina MotaGNU GPL v.3 03-13-12*/
int notes[] = { NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4, NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4 };
int leds[] = { 22,24,26,28,30,32,34,36,38,40,42,44 };
// Max number of simultaneous tones (Arduino Uno has 3 hardware timers,// Arduino Mega has 6)const int numNotePlayers = 5;//Number of keys (capacitive sensors)const int numCapSensors = 12;
// Change the debug flag to 'true' to print values read by the// capacitive sensors.const boolean debug = false;
Tone notePlayer[numNotePlayers];
int startingNotePin = 2;
int playerUsed[numCapSensors];int capForPlayer[numNotePlayers];
// First capsense receive (sensor) pinint startingCapPin = 53; int capPinIncrement = -2;// CapSense send pinint comparisonPin = 23;
// Sensor threshold at which the tones and LEDs are triggeredint capThresh = 500;
int i;
//Assigns pins 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47 to each keyCapSense cs[] = { CapSense(comparisonPin,startingCapPin), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 1)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 2)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 3)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 4)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 5)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 6)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 7)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 8)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 9)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 10)), CapSense(comparisonPin,startingCapPin + (capPinIncrement * 11)) };
void setup(void) { Serial.begin(9600);
//initializes the 5 tone players on pins 2,3,4,5,6 for (i = 0; i < numNotePlayers; i++) { notePlayer[i].begin(startingNotePin+i); } pinMode(22, OUTPUT); pinMode(24, OUTPUT); pinMode(26, OUTPUT); pinMode(28, OUTPUT); pinMode(30, OUTPUT); pinMode(32, OUTPUT); pinMode(34, OUTPUT); pinMode(36, OUTPUT); pinMode(38, OUTPUT); pinMode(40, OUTPUT); pinMode(42, OUTPUT); pinMode(44, OUTPUT); }
void loop(void) { if (debug) { Serial.print(cs[0].capSense(30)); Serial.print("\t"); Serial.print(cs[1].capSense(30)); Serial.print("\t"); Serial.print(cs[2].capSense(30)); Serial.print("\t"); Serial.print(cs[3].capSense(30)); Serial.print("\t"); Serial.print(cs[4].capSense(30)); Serial.print("\t"); Serial.print(cs[5].capSense(30)); Serial.print("\t"); Serial.print(cs[6].capSense(30)); Serial.print("\t"); Serial.print(cs[7].capSense(30)); Serial.print("\t"); Serial.print(cs[8].capSense(30)); Serial.print("\t"); Serial.print(cs[9].capSense(30)); Serial.print("\t"); Serial.print(cs[10].capSense(30)); Serial.print("\t"); Serial.print(cs[11].capSense(30)); Serial.print("\t\n"); } int currentPlayer = 0; for (i = 0; i < numCapSensors; i++) { //check each capacitive sensor if (currentPlayer < numNotePlayers) { //if there is a free player (i.e. no more than 5 tones currently playing) if (cs[i].capSense(30) > capThresh) { //if one of the keys has been triggered digitalWrite(leds[i], HIGH); //turn on the corresponding LED notePlayer[currentPlayer].play(notes[i]); //play the corresponding tone on the next available player currentPlayer++; } else { digitalWrite(leds[i], LOW); //turn off the corresponding LED } } }
//Stops playing all other tones and turns off all other LEDs for (i = currentPlayer; i < numNotePlayers; i++) { notePlayer[i].stop(); }}
…
m pouco até chegar no projeto completo que é fazer leituras nos sensores, armazenar com as leituras e com as datas e horas.
vou deixar isso em campo só irei volta a cada 7 dias pra coleta dados.
ai está o sketch:
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
void setup() { Wire.begin(); Serial.begin(9600); //A linha abaixo pode ser retirada apos setar a data e hora SelecionaDataeHora(); }
void loop() { Mostrarelogio(); delay(1000); }
void SelecionaDataeHora() //Seta a data e a hora do DS1307 { byte segundos = 40; //Valores de 0 a 59 byte minutos = 53; //Valores de 0 a 59 byte horas = 17; //Valores de 0 a 23 byte diadasemana = 0; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc. byte diadomes = 4; //Valores de 1 a 31 byte mes = 3; //Valores de 1 a 12 byte ano = 18; //Valores de 0 a 99 Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
//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(); }
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(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_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 a data no Serial Monitor Serial.print("Data: "); Serial.print(diadomes); Serial.print("/"); Serial.print(mes); Serial.print("/"); Serial.print(ano); Serial.print(" "); Serial.print("Hora : "); Serial.print(horas); Serial.print(":"); Serial.print(minutos); Serial.print(":"); Serial.print(segundos); switch(diadasemana) { case 0:Serial.print(" Domingo");Serial.print(" "); break; case 1:Serial.print(" Segunda");Serial.print(" "); break; case 2:Serial.print(" Terca");Serial.print(" "); break; case 3:Serial.print(" Quarta");Serial.print(" "); break; case 4:Serial.print(" Quinta");Serial.print(" "); break; case 5:Serial.print(" Sexta");Serial.print(" "); break; case 6:Serial.print(" Sabado");Serial.print(" "); }
int sensorValue1 = analogRead(A0); int sensorValue2 = analogRead(A1); int sensorValue3 = analogRead(A2); int sensorValue4 = analogRead(A3); int sensorValue5 = analogRead(A4); int sensorValue6 = analogRead(A5);
Serial.print("Valor lido por sensor1: ");(Serial.print(sensorValue1)); Serial.print(" "); Serial.print("Valor lido por sensor2: ");(Serial.print(sensorValue2));Serial.print(" ");// mostra valores no Monitor Serial Serial.print("Valor lido por sensor3: ");(Serial.print(sensorValue3)); Serial.print(" "); Serial.print("Valor lido por sensor4: "); Serial.print(sensorValue4);Serial.print(" ");// mostra valores no Monitor Serial Serial.print("Valor lido por sensor5: ");(Serial.print(sensorValue5)); Serial.print(" "); Serial.print("Valor lido por sensor6: "); Serial.print(sensorValue6);Serial.print(" ");// mostra valores no Monitor Serial
int umidade1 = analogRead(A0); int umidade2 = analogRead(A1); int umidade3 = analogRead(A2); int umidade4 = analogRead(A3); int umidade5 = analogRead(A4); int umidade6 = analogRead(A5);
int Porcento1 = map(umidade1, 1023, 0, 0, 100); int Porcento2 = map(umidade2, 1023, 0, 0, 100); int Porcento3 = map(umidade3, 1023, 0, 0, 100); int Porcento4 = map(umidade4, 1023, 0, 0, 100); int Porcento5 = map(umidade5, 1023, 0, 0, 100); int Porcento6 = map(umidade6, 1023, 0, 0, 100);
Serial.print("porcentagem1: ");Serial.print(Porcento1);Serial.print("%");Serial.print(" ");Serial.print("porcentagem2: ");Serial.print(Porcento2);Serial.print("%");Serial.print(" "); Serial.print("porcentagem3: ");Serial.print(Porcento3);Serial.print("%");Serial.print(" ");Serial.print("porcentagem4: ");Serial.print(Porcento4);Serial.print("%");Serial.print(" "); Serial.print("porcentagem5: ");Serial.print(Porcento5);Serial.print("%");Serial.print(" ");Serial.print("porcentagem6: ");Serial.print(Porcento6);Serial.print("%");Serial.println(" ");
delay(1000);
}…
Adicionado por Isaac Leal ao 18:20 em 4 março 2018
ystal.h> //Inclui a biblioteca do LCD#include <Wire.h>#include <Time.h>#include <DallasTemperature.h>#include <OneWire.h>#include <DS1307RTC.h> #define ONE_WIRE_BUS 10#define RELAY13 //pino do releOneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);DeviceAddress insideThermometer = { 0x28, 0xDF, 0x63, 0x51, 0x05, 0x00, 0x00, 0xC3 };// Pinos de comando dos botões do relógio#define clockSet A0 // Pinos de comando dos botões do relógio#define clockUp 9#define clockDown 8 //Estados de Clock#define stClockRunning 0#define stSetDay 1 //define o ano#define stSetMonth 2 //define o mes#define stSetYear 3 //define o dia#define stSetDow 4 //define o dia da semana#define stSetHour 5 //define a hora#define stSetMinute 6 //define o minuto#define stSetSecond 7 //define o segundoint pinorelay13 = 13; int stat = stClockRunning; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //configuração dos pinos do lcd void Print(int number){ lcd.print(number/10); lcd.print(number%10);} // Preenchimento do display LCDvoid printTime(){ lcd.setCursor(2,1); Print(hour()); lcd.print(":"); Print(minute()); lcd.print(":"); Print(second()); lcd.setCursor(3,0); Print(day()); lcd.print("/"); Print(month()); lcd.print("/"); Print(year()); lcd.setCursor(0,0); lcd.noCursor(); // Cursor invisível lcd.noBlink(); // Efeito blink desligado if (stat != stClockRunning) lcd.print("*"); else lcd.print(" "); simbolorelogio(); lcd.setCursor(0,1); lcd.write(3); switch(stat) { case stSetDay: lcd.setCursor(1,0); lcd.print("d "); lcd.setCursor(4,0); lcd.cursor(); // Cursor visível lcd.blink(); // Cursor piscando break; case stSetMonth: lcd.setCursor(1,0); lcd.print("m "); lcd.setCursor(7,0); lcd.cursor(); // Cursor visível lcd.blink(); // Cursor piscando break; case stSetYear: lcd.setCursor(1,0); lcd.print("a "); lcd.setCursor(12,0); lcd.cursor(); // Cursor visível lcd.blink(); // Cursor piscando break; case stSetHour: lcd.setCursor(1,0); lcd.print("h "); lcd.setCursor(3,1); lcd.cursor(); // Cursor visível lcd.blink(); // Cursor piscando break; case stSetMinute: lcd.setCursor(1,0); lcd.print("M "); lcd.setCursor(6,1); lcd.cursor(); // Cursor visível lcd.blink(); // Cursor piscando break; case stSetSecond: lcd.setCursor(1,0); lcd.print("s "); lcd.setCursor(9,1); lcd.cursor(); // Cursor visível lcd.blink(); // Cursor piscando break; }} // Lê pino usando limiar, como um interruptor, isto é,// interruptor pressionado primeira vez liga, pela segunda vez desligaint readPinSwitch(int pin, int threshold){ if (digitalRead(pin)) { unsigned long tt = millis(); while (digitalRead(pin)); if ((millis() - tt) > threshold) return 1; else return 0; } else return 0;} //Lê pino usando limiarint readPin(int pin, int threshold){ if (digitalRead(pin)) { unsigned long tt = millis(); while ((digitalRead(pin) && (millis() - tt) <= threshold)); if (digitalRead(pin)) return 1; else return 0; } else return 0;} // obter novo status, se houverint getStat(){ if (readPinSwitch(clockSet,300)) if (stat == stSetSecond) return stClockRunning; else return stat+1; else return stat;} // definir Arduino e tempo do RTCvoid setRTCTime(int hour, int minute, int second, int day, int month, int year){// define tempo do Arduino setTime(hour,minute,second,day,month,year); time_t t = now();// define tempo do RTC RTC.set(t);} void simbolorelogio(){ byte relogio[8] = { B00000, B01110, B10101, B10111, B10001, B01110, B00000, B00000}; lcd.createChar(3, relogio); // Cria o caractere personalizado de um relogio}void printTemperature(DeviceAddress deviceAddress){float tempC = sensors.getTempC(deviceAddress);if (tempC == -127.00) {lcd.print("Error");}else{lcd.setCursor(11,1); lcd.print(tempC);lcd.print("");}} void setup(){ pinMode(pinorelay13, OUTPUT); //Define o pino como saidasensors.begin(); sensors.setResolution(insideThermometer, 10); // Start the I2C interface Wire.begin(); // Start the serial interface Serial.begin(9600);lcd.begin(16, 2); lcd.clear(); // start with a blank screensetSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) pinMode(clockUp,INPUT); // configura os pinos dos botões como entrada pinMode(clockDown,INPUT); pinMode(clockSet,INPUT); if(timeStatus()!= timeSet) // verifica status do RTC e retorna erro { lcd.setCursor(0,0); lcd.print("Erro do RTC:"); lcd.setCursor(0,1); lcd.print("Ajuste o Relogio"); delay(3000); lcd.clear(); }} int oldStat = stat;unsigned long t=millis(); void loop(){ digitalClockDisplay(); delay(1000);}void digitalClockDisplay(){ // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" "); Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); }void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 Serial.print(":"); if(digits < 10) Serial.print('0'); Serial.print(digits);{/*Comando utilizado apenas pra ficar enviando via USB a hora atualpara que possam monitorar no "serial monitor" do simulador Arduinoe ver se esta tudo funcionando de acordo*/{ //Aciona o rele digitalWrite(pinorelay13, HIGH); delay(50); //Aguarda 2 Horas //Desliga o rele digitalWrite(pinorelay13, LOW); delay(50); //Aguarda 5 segundos e reinicia o processo sensors.requestTemperatures();printTemperature(insideThermometer);lcd.setCursor(17,1);delay(04/33/20); // //Desliga o rele delay(04/36/20); //Aguarda 5 segundos int value = 0; printTime(); // rotina que imprime o tempo no lcd delay(100); stat=getStat(); if (stat != oldStat) { t=millis(); oldStat = stat; } else if ((stat != stClockRunning) && ((millis() - t) > 30000)) //tempo em milisegundos que o ajuste do relógio ficará disponível para ser alterado stat=stClockRunning; switch(stat) { case stClockRunning: break; case stSetDay: // inicializa value value=day(); //si botao UP (para cima) for pressionado while(readPin(clockUp,200)) { value++; if (value > 31) value=1; setRTCTime(hour(),minute(),second(),value,month(),year()); printTime(); } //si botao DOWN (para baixo) for pressionado while(readPin(clockDown,200)) { value--; if (value < 1) value=31; setRTCTime(hour(),minute(),second(),value,month(),year()); printTime(); } break;// ver comentários em stSetDay case stSetMonth: value=month(); while(readPin(clockUp,200)) { value++; if (value > 12) value=1; setRTCTime(hour(),minute(),second(),day(),value,year()); printTime(); } while(readPin(clockDown,200)) { value--; if (value < 1) value=12; setRTCTime(hour(),minute(),second(),day(),value,year()); printTime(); } break; case stSetYear: value=year(); while(readPin(clockUp,200)) { value++; if (value > 2050) value=2000; setRTCTime(hour(),minute(),second(),day(),month(),value); printTime(); } while(readPin(clockDown,200)) { value--; if (value < 2000) value=2050; setRTCTime(hour(),minute(),second(),day(),month(),value); printTime(); } break; case stSetHour: value=hour(); while(readPin(clockUp,200)) { value++; if (value > 23) value=0; setRTCTime(value,minute(),second(),day(),month(),year()); printTime(); } while(readPin(clockDown,200)) { value--; if (value < 1) value=24; setRTCTime(value,minute(),second(),day(),month(),year()); printTime(); } break; case stSetMinute: value=minute(); while(readPin(clockUp,200)) { value++; if (value > 59) value=0; setRTCTime(hour(),value,second(),day(),month(),year()); printTime(); } while(readPin(clockDown,200)) { value--; if (value < 0) value=59; setRTCTime(hour(),value,second(),day(),month(),year()); printTime(); } break; case stSetSecond: value=minute(); while(readPin(clockUp,200)) { value++; if (value > 59) value=0; setRTCTime(hour(),minute(),value,day(),month(),year()); printTime(); } while(readPin(clockDown,200)) { value--; if (value < 0) value=59; setRTCTime(hour(),minute(),value,day(),month(),year()); printTime(); } } }}}
mas está dificil e tambem falta os dias da semana.…
Adicionado por Antonio Gomes ao 19:36 em 27 agosto 2014