#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); }