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
e included from D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:13: D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\/IRremoteInt.h:15:22: error: WProgram.h: No such file or directory In file included from D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:13: D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\/IRremoteInt.h:87: error: 'uint8_t' does not name a type D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\/IRremoteInt.h:88: error: 'uint8_t' does not name a type D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\/IRremoteInt.h:89: error: 'uint8_t' does not name a type D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\/IRremoteInt.h:92: error: 'uint8_t' does not name a type D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::mark(int)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:173: error: 'delayMicroseconds' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::space(int)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:181: error: 'delayMicroseconds' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::enableIROut(int)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:200: error: 'OUTPUT' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:200: error: 'pinMode' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:201: error: 'LOW' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:201: error: 'digitalWrite' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In constructor 'IRrecv::IRrecv(int)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:217: error: 'volatile struct irparams_t' has no member named 'recvpin' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:218: error: 'volatile struct irparams_t' has no member named 'blinkflag' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'void IRrecv::enableIRIn()': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:241: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:242: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:246: error: 'volatile struct irparams_t' has no member named 'recvpin' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:246: error: 'INPUT' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:246: error: 'pinMode' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'void IRrecv::blink13(int)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:252: error: 'volatile struct irparams_t' has no member named 'blinkflag' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:254: error: 'OUTPUT' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:254: error: 'pinMode' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In function 'void __vector_9()': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:268: error: 'volatile struct irparams_t' has no member named 'recvpin' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:268: error: 'digitalRead' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:271: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:273: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:275: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:284: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:285: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:287: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:293: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:295: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:300: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:302: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:310: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:321: error: 'volatile struct irparams_t' has no member named 'blinkflag' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:323: error: 'B00100000' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:326: error: 'B11011111' was not declared in this scope D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'void IRrecv::resume()': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:332: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:333: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'int IRrecv::decode(decode_results*)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:343: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:344: error: 'volatile struct irparams_t' has no member named 'rcvstate' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'long int IRrecv::decodeNEC(decode_results*)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:392: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:400: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'long int IRrecv::decodeSony(decode_results*)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:433: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:443: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp: In member function 'long int IRrecv::decodeRC5(decode_results*)': D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:518: error: 'volatile struct irparams_t' has no member named 'rawlen' D:\arduino-1.0-windows\arduino-1.0\libraries\IRremote\IRremote.cpp:529: error: 'volatile struct irparams_t' has no member named 'rawlen'
"
VLW pessoal!…
tipos de registradores , cada um com função específica.
Irei citar os procedimentos de conversão dos bits em valores decimais . Veja as variações minima e máxima que os valores podem ter.
Quando tiver convertido o valor decimal do registrador , ainda precisará de fazer mais alguns cálculos para encontrar o valor real da leitura.
No datasheet do CS5463, não encontrei nenhuma fórmula de conversão . Desse modo, procurei no site da Cirrus, outros chips similares e mais recentes. Felizmente com as fórmulas encontradas, consegui desvendar o mistério.
https://www.cirrus.com/cn/pubs/appNote/AN366REV2.pdf
==================================================
1) Fórmula de conversão :
Explicando melhor essa fórmula :
2^23 = 8.388.608
-1.0 <= Valor Decimal < 1.0 ( isto é, o valor mínimo é -1,0 e o valor máximo é 1,0)
Se o bit MSB for = 1 , o valor decimal será negativo.
Se o bit MSB for = 0 , o valor decimal será positivo.
OBS : na formula acima , o correto é subtrair o bit MSB no final (veja abaixo)
Valor decimal = { [ 1 / ( 2^23 - 1) ] x Hexto Dec ( Valor Hexadecimal) } - (MSB)
Para converter o número hexadecimal para decimal acesse esse link :
http://www.binaryhexconverter.com/hex-to-decimal-converter
Exemplos :
a) Convertendo 0x2E147B em decimal 0,36
0x2E147B = 3019899 ( usando o link de conversão HEX para DEC )
Valor Dec = {[ 1 / (8388608 -1) ] x 3019899 } - (0)
Valor Dec = { 3019899 / 8388607} = 0,3600 !!
b) Convertendo 0xF3D35A em decimal -0.0951126
Veja que o MSB = 1 , então o valor é negativo. E o bit MSB tem que ser excluído do HEXA . Então 0x73D35A.
0x73D35A = 7590746 ( usando o link de conversão HEX para DEC )
Valor Dec = {[ 1 / (8388608 -1) ] x 7590746 } - (1)
Valor Dec = { 7590746 / 8388607} -1 = 0,904887 - 1 = - 0,09511245
Esses são os registradores do CS5463 que usam esse procedimento de conversão ( veja no Datasheet do CS5463) :
6.1.2 Current and Voltage DC Offset Register ( IDCoff , VDCoff )Address: 1 (Current DC Offset); 3 (Voltage DC Offset)
6.1.5 PulseRateE Register ( PulseRateE )Address: 6
6.1.6 Instantaneous Current, Voltage, and Power Registers ( I , V , P )
Address: 7 (Instantaneous Current); 8 (Instantaneous Voltage); 9 (Instantaneous Power)
6.1.7 Active (Real) Power Register ( PActive )Address: 10 (Active Power)
6.1.9 Epsilon Register Address: 13
6.1.10 Power Offset Register ( Poff )Address: 14
6.1.12 Current and Voltage AC Offset Register ( VACoff , IACoff )Address: 16 (Current AC Offset); 17 (Voltage AC Offset)
6.1.15 Average and Instantaneous Reactive Power Register ( QAVG , Q )Address: 20 (Average Reactive Power) and 21 (Instantaneous Reactive Power)
6.1.16 Peak Current and Peak Voltage Register ( Ipeak , Vpeak )Address: 22 (Peak Currect) and 23 (Peak Voltage)
6.1.18 Power Factor Register ( PF )Address: 25
6.1.21 Harmonic Active Power Register ( PH )Address: 29
6.1.22 Fundamental Active Power Register ( PF )Address: 30
6.1.23 Fundamental Reactive Power Register ( QH )Address: 31 (read only)
6.2.2 No Load Threshold ( LoadMin )Address: 1 Page 1
6.2.4 Temperature Offset Register ( TOff )Address: 3 Page 1
Amanhã , explicarei outros tipos de registradores e os métodos de conversão para valores decimais. …
ente.
Outras leituras de dados funcionaram sem problemas, mas esta da hora, ainda não consegui resolver.
Já testei vários tipos de dados, mas sem sucesso.
Vou postar partes dos códigos para verem se conseguem me ajudar.
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
// ESTA PARTE DO CÓDIGO SE EU FAÇO A CONFIGURAÇÃO DA HORA E MUNITO NO CÓDIGO, FUNCIONA NORMALMENTE, MAS VIA SERIAL, ATÉ MOSTRA OS DADOS LIDOS, MAS NÃO FUNCIONA
int hora_inicial=00;int minutos_inicial=00;int total_min_inicial_conf = hora_inicial * 60 + minutos_inicial; // Calcula quantidade de minutos para INICIAR atividade
int hora_final=00; int minutos_final=00; int total_min_final_conf = hora_final * 60 + minutos_final; // Calcula quantidade de minutos para ENCERRAR atividade
//SelecionaDataeHora(); // VARIÁVEL PARA ACERTAR/SETAR DATA e HORA
//-----------------------------------------------------------------------------
void setup(){
//CÓDIGO QUE ESTOU UTILIZANDO PARA FAZER A LEITURA DAS HORAS DIGITADAS
Serial.println("CONFIGURAÇÃO DO HORÁRIO"); Serial.println("INICIO"); Serial.println("1, 2, 3, 10, 15, 23, 00 <=> Valores em Horas"); Serial.print("Hora: "); while (hora_inicial == 00) { if (Serial.available() > 0) { hora_inicial = Serial.parseFloat(); } } Serial.println (hora_inicial); Serial.println("1, 2, 3, 10, 15, 30, 60 <=> Valores em Horas"); Serial.print("Minutos: "); while (minutos_inicial == 00) { if (Serial.available() > 0) { minutos_inicial = Serial.parseFloat(); } } Serial.println (minutos_inicial);
Serial.println("TERMINO"); Serial.println("1, 2, 3, 10, 15, 23, 00 <=> Valores em Horas"); Serial.print("Hora: "); while (hora_final == 00) { if (Serial.available() > 0) { hora_final = Serial.parseFloat(); } } Serial.println (hora_final); Serial.println("1, 2, 3, 10, 15, 30, 60 <=> Valores em Horas"); Serial.print("Minutos: "); while (minutos_final == 00) { if (Serial.available() > 0) { minutos_final = Serial.parseFloat(); } } Serial.println (minutos_final);
}
//---------------------------------------------------------------------------
void loop(){ Mostrarelogio(); delay(1000);}
void SelecionaDataeHora() //Seta a data e a hora do DS1307{ byte horas = 15; //Valores de 0 a 23 byte minutos = 3; //Valores de 0 a 59 byte segundos = 00; //Valores de 0 a 59 byte diadasemana = 1; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc. byte diadomes = 4; //Valores de 1 a 31 byte mes = 9; //Valores de 1 a 12 byte ano = 15; //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.println(", Domingo"); break; case 1: Serial.println(", Segunda feira"); break; case 2: Serial.println(", Terca feira"); break; case 3: Serial.println(", Quarta feira"); break; case 4: Serial.println(", Quinta feira"); break; case 5: Serial.println(", Sexta feira"); break; case 6: Serial.println(", Sabado"); }
=> USO if ABAIXO PARA CHECAR O CÁLCULO DAS HORAS P/ EXECUTAR OU NÃO UMA TAREFA... QUE PARECE ESTAR FUNCIONANDO NORMALMENTE...
if ((horas * 60 + minutos) < (total_min_inicial_conf) || (horas * 60 + minutos) >= (total_min_final_conf))
Conto com a colaboração dos companheiros…
Adicionado por RuyterCB ao 23:09 em 9 setembro 2015
anges, but without sucess.
Eu estou tentando alterar a Library do módulo de reconhecimento de voz 'VR3' da qual originalmente foi criada para o uso em SoftwareSerial, gostaria de converte-lá para HardwareSerial... Como não tenho quase nenhum conhecimento na leitura e entendimento da linguagem de livrarias, estou tendo dificuldades...
Eu fiz algumas alterações, porém não deram certas, Eu alterei o arquivo VoiceRecognitionV3.H desse modo
#if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif #include "wiring_private.h" //#include "SoftwareSerial.h" ***** COMENTEI ESSA LINHA ***** #include <avr/pgmspace.h> #define DEBUG #ifdef DEBUG #define DBGSTR(message) Serial3.print(message) // ***** Alterei de Serial para Serial3 ***** #define DBGBUF(buf, len) Serial3.write(buf, len) #define DBGLN(message) Serial3.println(message) #define DBGFMT(msg, fmt) Serial3.print(msg, fmt) #define DBGCHAR(c) Serial3.write(c) #else #define DBG(message) #endif // DEBUG
Eu alterei o arquivo VoiceRecognitionV3.CPP desse modo
#include "VoiceRecognitionV3.h" #include <string.h> VR* VR::instance; /** temp data buffer */ uint8_t vr_buf[32]; uint8_t hextab[17]="0123456789ABCDEF"; /** @brief VR class constructor. @param receivePin --> software serial RX transmitPin --> software serial TX */ VR::VR(uint8_t receivePin, uint8_t transmitPin) : HardwareSerial(receivePin, transmitPin) // ***** Alterei de SoftwareSerial para HardwareSerial ***** { instance = this; HardwareSerial::begin(38400); // ***** Alterei de SoftwareSerial para HardwareSerial ***** }
Meu código ino alterei apenas os valores dos pinos de 2,3 para 14,15 (HardwareSerial3 no mega)
#include "VoiceRecognitionV3.h" VR myVR(15, 14); // (COMANDO DE VOZ) Hardware pins in Arduino MEGA Board void Setup() { myVR.begin(9600); // Start module serial myVR.clear(); // Start the module }
E estou recebendo os seguintes erros da IDE quando tento compilar o código
D:\...\VoiceRecognitionV3.cpp: In constructor 'VR::VR(uint8_t, uint8_t)': D:\...\VoiceRecognitionV3.cpp:43:89: error: no matching function for call to 'HardwareSerial::HardwareSerial(uint8_t&, uint8_t&)' VR::VR(uint8_t receivePin, uint8_t transmitPin) : HardwareSerial(receivePin, transmitPin) ^ D:\...\VoiceRecognitionV3.cpp:43:89: note: candidates are: In file included from C:\.../Arduino.h:232:0, from D:\...\VoiceRecognitionV3.h:31, from D:\...\VoiceRecognitionV3.cpp:29: C:\.../HardwareSerial.h:117:12: note: HardwareSerial::HardwareSerial(volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*, volatile uint8_t*) inline HardwareSerial( ^ C:\.../HardwareSerial.h:117:12: note: candidate expects 6 arguments, 2 provided C:\.../HardwareSerial.h:93:7: note: constexpr HardwareSerial::HardwareSerial(const HardwareSerial&) class HardwareSerial : public Stream ^ C:\.../HardwareSerial.h:93:7: note: candidate expects 1 argument, 2 provided C:\.../HardwareSerial.h:93:7: note: constexpr HardwareSerial::HardwareSerial(HardwareSerial&&) C:\.../HardwareSerial.h:93:7: note: candidate expects 1 argument, 2 provided
Voice Recognition Library Download
Arduino MEGA 2560…