Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Wire.h"
- #define DS1307_I2C_ADDRESS 0x68
- int* ano,i;
- char* myStrings[]={"Segunda-Feira", "Terca-Feira", "Quarta-Feira","Quinta-Feira", "Sexta-Feira","Sabado","Domingo"};
- int tempc = 0,tempf=0; // temperature variables
- int samples[8]; // variables to make a better precision
- int maxi = -100,mini = 100; // to start max/min temperature
- // Convert normal decimal numbers to binary coded decimal
- byte decToBcd(byte val)
- {
- return ( (val/10*16) + (val%10) );
- }
- // Convert binary coded decimal to normal decimal numbers
- byte bcdToDec(byte val)
- {
- return ( (val/16*10) + (val%16) );
- }
- // Stops the DS1307, but it has the side effect of setting seconds to 0
- // Probably only want to use this for testing
- /*void stopDs1307()
- {
- Wire.beginTransmission(DS1307_I2C_ADDRESS);
- Wire.send(0);
- Wire.send(0x80);
- Wire.endTransmission();
- }*/
- // 1) Sets the date and time on the ds1307
- // 2) Starts the clock
- // 3) Sets hour mode to 24 hour clock
- // Assumes you're passing in valid numbers
- void setDateDs1307(byte second, // 0-59
- byte minute, // 0-59
- byte hour, // 1-23
- byte dayOfWeek, // 1-7
- byte dayOfMonth, // 1-28/29/30/31
- byte month, // 1-12
- byte year) // 0-99
- {
- Wire.beginTransmission(DS1307_I2C_ADDRESS);
- Wire.send(0);
- Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
- Wire.send(decToBcd(minute));
- Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
- // bit 6 (also need to change readDateDs1307)
- Wire.send(decToBcd(dayOfWeek));
- Wire.send(decToBcd(dayOfMonth));
- Wire.send(decToBcd(month));
- Wire.send(decToBcd(year));
- Wire.endTransmission();
- }
- // Gets the date and time from the ds1307
- void getDateDs1307(byte *second,
- byte *minute,
- byte *hour,
- byte *dayOfWeek,
- byte *dayOfMonth,
- byte *month,
- byte *year)
- {
- // Reset the register pointer
- Wire.beginTransmission(DS1307_I2C_ADDRESS);
- Wire.send(0);
- Wire.endTransmission();
- Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
- // A few of these need masks because certain bits are control bits
- *second = bcdToDec(Wire.receive() & 0x7f);
- *minute = bcdToDec(Wire.receive());
- *hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
- *dayOfWeek = bcdToDec(Wire.receive());
- *dayOfMonth = bcdToDec(Wire.receive());
- *month = bcdToDec(Wire.receive());
- *year = bcdToDec(Wire.receive());
- }
- void setup()
- {
- byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
- Wire.begin();
- Serial.begin(9600);
- // Change these values to what you want to set your clock to.
- // You probably only want to set your clock once and then remove
- // the setDateDs1307 call.
- second = 40;
- minute = 45;
- hour = 10;
- dayOfWeek = 6;
- dayOfMonth = 1;
- month = 8;
- year = 9;
- setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
- }
- void loop()
- {
- byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
- getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
- ano = 2000 + year; // Changed to a int so it can show the year in 20XX style
- for(i = 0;i< =7;i++){ // gets 8 samples of temperature
- samples[i] = ( 5 * analogRead(0) * 100) / 1024;
- tempc = tempc + samples[i];
- delay(50);
- }
- tempc = tempc/8; // better precision
- tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit
- if(tempc > maxi) {maxi = tempc;} // set max temperature
- if(tempc < mini) {mini = tempc;} // set min temperature
- if(hour<10) {Serial.print("0");}
- Serial.print(hour, DEC);
- Serial.print(":");
- if(minute<10) {Serial.print("0");}
- Serial.print(minute, DEC);
- Serial.print(":");
- if(second<10) {Serial.print("0");}
- Serial.print(second, DEC);
- Serial.print(" ");
- if(dayOfMonth<10) {Serial.print("0");}
- Serial.print(dayOfMonth, DEC);
- Serial.print("/");
- if(month<10) {Serial.print("0");}
- Serial.print(month, DEC);
- Serial.print("/");
- Serial.print(ano, DEC);
- Serial.print(" Dia da semana: ");
- Serial.print(myStrings[dayOfWeek-1]);
- Serial.print(" - Temperatura:a: ");
- Serial.print(tempc,DEC);
- Serial.print("C , ");
- Serial.print(tempf,DEC);
- Serial.print("F - ");
- Serial.print(maxi,DEC);
- Serial.print(" Max, ");
- Serial.print(mini,DEC);
- Serial.println(" Min");
- tempc = 0;
- delay(600);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement