con la 1302 mi sono arreso...no vabbè mi è arrivata la 1307 che attendevo per il progetto che dovrò fare e mi concentro su quella, pare che vada (sono ancora ai cavetti volanti) volevo solo sapere come, nel codice che posto qui e recuperato su internet (ho solo modificato la scrittura da lcd a seriale), posso modificare i pin di ingresso dei dati.
So che per l'UNO devo usare 4 e 5, per la MEGA 20 e 21 (SDA e SCL comunque ora non ce l'ho sotto mano) come posso impostare di usarne altri? Perchè avrò una miriade di roba da collegare, non so ancora come sarà disposta quindi mi sarebbe molto di aiuto sapere come posso mettere la mani a tutto. Solo che credo che qui siano impostati nella libreria o qualcosa del genere...
/*
orologio.pde
Il programma mostra il funzionamento del modulo
Modulo Real Time Clock DS1307 della SparkFun
mostrando ora e data sul monitor seriale
Pin Analogic 4 -> SDA DS1307 Sparkfun
Pin Analogic 5 -> SCL DS1307 Sparkfun
Creato il 07/07/2012
da Adriano Gandolfo <http://www.adrirobot.it>
This example code is in the public domain.
*/
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
// Conversione normali numeri decimali in binario decimale
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Conversione decimale binario a normali numeri decimali
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
/*
1) Imposta la data e l'ora del DS1307
2) Avvia l'orologio
3) Imposta la modalità di ora in orologio a 24 ore
*/
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.write(0);
Wire.write(decToBcd(second)); // 0 to bit 7 avvia l'orologio
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(0x10); // invia 0x10 (hex) 00010000 (binario) al registro di controllo - si attiva ad onda quadra
Wire.endTransmission();
}
// Ottiene la data e l'ora dal DS1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Ripristina il puntatore del registro
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alcuni di questi sono necessari, perché le maschere di alcuni bit sono bit di controllo
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f); // Occorre modificare questo se 12 ore am/pm
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void setup()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
Serial.begin(9600);
/*
Modificare i successivi valori se si desidera impostare l'orologio.
Occorre attivare la linea setDateDs1307 una volta quindi rimuovere
la chiamata.
*/
second = 0;
minute = 32;
hour = 17;
dayOfWeek = 2;
dayOfMonth = 19;
month = 8;
year = 13;
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);
Serial.println(" ");
switch(dayOfWeek){
case 1:
Serial.print("Dom");
break;
case 2:
Serial.print("Lun");
break;
case 3:
Serial.print("Mar");
break;
case 4:
Serial.print("Mer");
break;
case 5:
Serial.print("Gio");
break;
case 6:
Serial.print("Ven");
break;
case 7:
Serial.print("Sab");
break;
}
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/20");
Serial.print(year, DEC);
Serial.print(" ");
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);
delay(1000);
}