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