TIX LED CLOCK ARDUINO

Ciao a tutti, x chi non conoscesse il tix led clock, è questo qua http://www.thinkgeek.com/homeoffice/lights/7437/

sul forum ho trovato questo sketch, e sono in contatto con l'utente che l'ha scritto x emularlo su arduino. qua posto il link del forum con il codice (thanks SilverCG)

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1268523298

lo sto testando su una matrice di led già pronta, e x questo non ho problemi. Ho problemi invece sul come settare l'orario, ho provato tramite l'apposito sketch x processing della libreria datetime, sembra che un refresh lo faccia, ma non riesco proprio a vedere un nesso tra i led accesi e l'ora attuale... sto cercando di capire se tante volte ci fosse un "mischiamento" di collegamento tra i pin da collegare alle colonne e righe, ma pare tutto ok... i led si accendono in modo random ma mantenendo una parvenza di "ordine orario".... se qualcuno ha fatto qualche prova con questo codice o abbia voglia di perdercisi un attimo x aiutarmi... grazie!!

Nessuno che mi aiuta?!?!!? helllpppp!!!!!!!!!!!!!!!! ;)

Problemi risolti, tante volte a qualcuno interessasse fare questo orologio!! Adesso visualizzo correttamente l'ora sulla matrice, in formato 24h. Quello di cui avrei bisogno, se possibile, qualche aiuto per collegarci un rtc tipo il ds1302, per fare la sincronizzazione automatica dell'ora in caso di mancata alimentazione!!!

Acc.... possibile nessuno che abbia esperienze o idee su come interfacciare un rtc a questo sketch!?! Spero di non diventare noioso, ma spero tanto che qualcuno venga in mio aiuto, grazie ancora!!!

Scusa ma non ho capito in che modo si legge l'ora su quell'orologio !!!

il quadrante è diviso in 4 campi, il primo ha 3 led, il secondo 9, il terzo 6 led ed il quarto nuovamente nove. per esempio se fossero le 12.34, troveresti accesi 1 led nel primo campo, 2 nel secondo, 3 nel terzo e 4 nell'ultimo. La particolarità sta nel fatto che ogni tot secondi cambia la posizione dei led accesi, mantenendo però lo stesso numero... non so se mi sono spiegato!!! è la replica di quello venduto su thinkgeek

ciao nytro81

Hai provato di leggere le specifiche tecniche? http://datasheets.maxim-ic.com/en/ds/DS1302.pdf

Ciao Uwe

Certo, ho già provato con successo a leggere e far scrivere su seriale (o su display lcd) l'ora e la data, ma non trovo il modo di far leggere all'orologio che già è in funzione l'ora in arrivo dal ds1302, questo è il mio problema!!

Hai visto questa libreria? http://quadpoint.org/projects/arduino-ds1302

non capisco cosa vuoi dire con: "ma non trovo il modo di far leggere all'orologio che già è in funzione l'ora in arrivo dal ds1302" Manda il sketch che usi. Ciao Uwe

Questo è lo sketch che uso. ha la possibilità di sincronizzare l’ora tramite seriale, tramite uno sketch in processing, ma a me servirebbe come detto prima la possibilità che in automatico prendesse l’ora dal rtc… grazie intanto x l’interessamento!!!

/*#################################################

---- Tix LED Clock ----

###Copyright 2010 - Dave Johnson - SilverCG.com ###

— this code includes 3 rows of multiplexed###

leds to display a clock

#################################################*/

#include <DateTime.h>
#include <DateTimeStrings.h>
#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_HEADER 255 // Header tag for serial time sync message

int colpins = {2,3,4,5,6,7,8,9,10};
int rowpins = {12, 11, 13};
char top;
long timer;
const long muxInterval = 20;
int mux = 0;
int x;
int timesync;
int hourlist2[3];
int hourlist[9];
int minlist2[6];
int minlist[9];
int oldminute;

void setup() {
Serial.begin(19200);
for (int pin=0; pin<9; pin++) {
pinMode( colpins[pin], OUTPUT );
}
for (int pin=0; pin<3; pin++) {
pinMode( rowpins[pin], OUTPUT );
}
DateTime.sync(DateTime.makeTime(0, 34, 12, 10, 4, 2010));;

}

/* void hoursplit(){
*/

void loop(){
int hour = (DateTime.Hour);
int minute = (DateTime.Minute);
int seconds = (DateTime.Second);
int newhour = 0;

if (seconds == 0 || timesync == 1) {
Serial.println(seconds);
// reset
for (int i = 0; i < 9; i++){
minlist = 0;
_ hourlist = 0;_
* }*
* for (int i = 0; i < 6; i++) {*
_ minlist2 = 0;
* }
for (int i = 0; i < 3; i++) {
hourlist2 = 0;
} *_

* //math*
* //------------- start new code ---- july 22 2010 —*
* if (hour == hour){*
// if (hour > 12){
// newhour = hour - 12;
// }
// if (hour < 12) {
// newhour = hour;
// }
// if (newhour == newhour){
// if (newhour == 0) {
// hourlist2[0] = 1;
// hourlist[0] = 1;
// hourlist[1] = 1;
// }
// if (newhour == 12){
// hourlist2[0] = 1;
// hourlist[0] = 1;
// hourlist[1] = 1;
// }
// if (newhour == 11){
// hourlist2[0] = 1;
// hourlist[0] = 1;
// }
// if (newhour == 10){
// hourlist2[0] = 1;
// hourlist2[1] = 0;
// hourlist2[2] = 0;
// for (int i = 0; i < 9; i++){
// hourlist = 0;
// }
// }
* if (hour > 19 && hour < 24) {*
* hourlist2[0] = 1;*
* hourlist2[1] = 1;*
* int subhour = hour - 20;*
* for (int i = 0; i < subhour; i++){*
_ hourlist = 1;
* }
}
if (hour > 9 && hour < 20) {
hourlist2[0] = 1;
int subhour = hour - 10;
for (int i = 0; i < subhour; i++){
hourlist = 1;
}
}*_

* if (hour > 0 && hour < 10) {*
* for (int i = 0; i < hour; i++){*
_ hourlist = 1;
* }
}
if (hour == 0){
}
//--------------------end new code*

* if (minute >= 0 and minute < 10) {
minlist2[0] = 0;
minlist2[1] = 0;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 0;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 10 and minute < 20) {
minlist2[0] = 1;
minlist2[1] = 0;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 10;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 20 and minute < 30) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 20;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 30 and minute < 40) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 30;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 40 and minute < 50) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 1;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 40;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 50 and minute < 60) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 1;
minlist2[4] = 1;
minlist2[5] = 0;
minute -= 50;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
}
timesync = 0;
}
// Random function*

if (seconds == 0 || seconds == 5 || seconds == 10 || seconds == 15 || seconds == 20 || seconds == 25 || seconds == 30 || seconds == 35 || seconds == 40 || seconds == 45 || seconds == 50 || seconds == 55){
* if (x == 1){
x = 0;
for (int a=0; a<9; a++){
int r = random(a,9);
int temp = minlist[a];
minlist[a] = minlist[r];
minlist[r] = temp;*_

* }*
* for (int a=0; a<9; a++){*
* int r = random(a,9);*
* int temp = hourlist[a];*
* hourlist[a] = hourlist[r];*
* hourlist[r] = temp;*
* }*
* for (int a=0; a<6; a++){*
* int r = random(a,6);*
* int temp = minlist2[a];*
* minlist2[a] = minlist2[r];*
* minlist2[r] = temp;*
* }*
* for (int a=0; a<3; a++){*
* int r = random(a,3);*
* int temp = hourlist2[a];*
* hourlist2[a] = hourlist2[r];*
* hourlist2[r] = temp;*
* }*
* }*
}
// random off for 10 seconds
if (seconds == 1 || seconds == 6 || seconds == 11 || seconds == 16 || seconds == 21 || seconds == 26 || seconds == 31 || seconds == 36 || seconds == 41 || seconds == 46 || seconds == 51 || seconds == 56){
* x = 1;*
}
// draw
int rowone[] = {hourlist2[0], hourlist[0], hourlist[1], hourlist[2], minlist2[0], minlist2[1], minlist[0], minlist[1], minlist[2]};
int rowtwo[] = {hourlist2[1], hourlist[3], hourlist[4], hourlist[5], minlist2[2], minlist2[3], minlist[3], minlist[4], minlist[5]};
int rowthree[] = {hourlist2[2], hourlist[6], hourlist[7], hourlist[8], minlist2[4], minlist2[5], minlist[6], minlist[7], minlist[8]};

if (millis() - timer < muxInterval)
* {*
* timer = millis();*
* mux++;*
* if (mux > 2){*
* mux = 0;*
* }*
* for (int i = 0; i <=8; i++){*
_ digitalWrite(colpins*, LOW);
}
digitalWrite(rowpins[0], LOW);
digitalWrite(rowpins[1], LOW);
digitalWrite(rowpins[2], LOW);*_

* if (mux == 0) {*
* for (int i = 8; i >= 0; i–) {*
_ if (rowone == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[0], HIGH);
}
}
}*_

* if (mux == 1) {*
* for (int i = 8; i >= 0; i–) {*
_ if (rowthree == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[2], HIGH);
}
}
}
if (mux == 2) {
for (int i = 8; i >= 0; i–) {
if (rowtwo == 1){
digitalWrite(colpins, HIGH);
digitalWrite(rowpins[1], HIGH);
}
}
}
}*_

// Time
unsigned long prevtime;
* if( getPCtime()) { // try to get time sync from pc*
* Serial.print("Clock synced at: ");*
* Serial.println(DateTime.now(),DEC);*
* }*
* if(DateTime.available()) { // update clocks if time has been synced*
* digitalWrite(13,LOW); // first flash the LED*
* prevtime = DateTime.now();*
* DateTime.available(); //refresh the Date and time properties*
* }*
}
boolean getPCtime() {
* // if time sync available from serial port, update time and return true*
* while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits*
* if( Serial.read() == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
_ char c= Serial.read();
top = c;
if( c >= ‘0’ && c <= ‘9’){
pctime = (10 * pctime) + (c - ‘0’) ; // convert digits to a number
}
}
timesync = 1;
DateTime.sync(pctime); // Sync Arduino clock to the time received on the serial port*

* return true; // return true if time message received on the serial port*
* }
}
return false; //if no message return false*

}_

Scusa, ho risposto a metà.... ma non trovo il modo di far leggere all'orologio che già è in funzione l'ora in arrivo dal ds1302" significa che non trovo il modo di inserire la lettura dell'ora del rtc, ed il successivo utilizzo all'interno dello sketch.... non so se mi sono spiegato!! In pratica così com'è già funziona, xò devo settare manualmente l'ora da programmazione ogni volta che lo resetto, quindi le soluzioni sono: o trovo il modo di far leggere automaticamente l'ora dal ds1302, o da un ricevitore DCF77 per la ricezione della sincronizzazione tipo orologio atomico, oppure inserire 1 pulsante (soluzione + drastica ma comunque utile) che mi permetta di far andare + veloce lo scorrimento del tempo, rendendo possibile il settaggio manuale dell'ora... praticamente tenendolo premuto il tempo scorre velocemente fino all'ora desiderata, lasciandolo torna a scorrere alla frequenza di 60 sec/min

Altrimenti 2 pulsanti che vanno ad agire sulle variabili delle ore e dei minuti, facendole incrementare di 1 ad ogni pressione, fino ad arrivare all’ora desiderata… ma a dirla onestamente, questo sketch (almeno x quanto riguarda la parte del conteggio del tempo) è troppo complicato x le mie competenze attuali, per questo sto cercando così disperatamente un aiuto!!!

semplice Tu hai un orologio (RTC) fatto col DS1302. prendi il tempo da lí. al posto di

void loop(){ int hour = (DateTime.Hour); int minute = (DateTime.Minute); int seconds = (DateTime.Second);

leggi l' ora e i minuti dal RTC

Ciao Uwe

E' proprio questo il problema... non so come interpretare edd inserire la parte di script del 1302 nello script che ho già!! Forse dovrei mettere questa parte

snprintf(buf, sizeof(buf), "%s %02d-%02d-%04d %02d:%02d:%02d", day, t.date, t.mon, t.yr, t.hr, t.min, t.sec);

ed usare t.hr, t.min e t.sec al posto di hour, minute e seconds?

sí; scrivi: dopo aver chiamato la funzione che ti legge l' orologio: hour = (t.hr); minute = (t.min); seconds = (t.sec); ecc Ovviamente devi includere la libreria che gestisce la comunicazione col 1302. Ciao Uwe

mmmm…magari fosse così semplice!!! :wink: dunque, posto le “modifiche” che ho apportato con il tuo suggerimento (spero senza troppi errori!!)

#include <stdio.h>
#include <string.h>
#include <DS1302.h>
#include <DateTime.h>
#include <DateTimeStrings.h>
#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_HEADER 255 // Header tag for serial time sync message

uint8_t CE_PIN = 14;
uint8_t IO_PIN = 15;
uint8_t SCLK_PIN = 16;
int colpins = {2,3,4,5,6,7,8,9,10};
int rowpins = {12, 11, 13};
char buf[50];
char day[10];
char top;
long timer;
const long muxInterval = 20;
int mux = 0;
int x;
int timesync;
int hourlist2[3];
int hourlist[9];
int minlist2[6];
int minlist[9];
int oldminute;
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
void print_time()
{
/* Get the current time and date from the chip */
Time t = rtc.time();
snprintf(buf, sizeof(buf), “%s %02d-%02d-%04d %02d:%02d:%02d”,
day,
t.date, t.mon, t.yr,
t.hr, t.min, t.sec);}
void setup() {
Serial.begin(19200);
for (int pin=0; pin<9; pin++) {
pinMode( colpins[pin], OUTPUT );
}
for (int pin=0; pin<3; pin++) {
pinMode( rowpins[pin], OUTPUT );
}
DateTime.sync(DateTime.makeTime(0, 34, 12, 10, 4, 2010));;

}

/* void hoursplit(){
*/

void loop(){
int hour = (t.hr);
int minute = (t.min);
int seconds = (t.sec);
int newhour = 0;

if (seconds == 0 || timesync == 1) {
Serial.println(seconds);
// reset
for (int i = 0; i < 9; i++){
minlist = 0;
_ hourlist = 0;_
* }*
* for (int i = 0; i < 6; i++) {*
_ minlist2 = 0;
* }
for (int i = 0; i < 3; i++) {
hourlist2 = 0;
} *_

* //math*
* //------------- start new code ---- july 22 2010 —*
* if (hour == hour){*
// if (hour > 12){
// newhour = hour - 12;
// }
// if (hour < 12) {
// newhour = hour;
// }
// if (newhour == newhour){
// if (newhour == 0) {
// hourlist2[0] = 1;
// hourlist[0] = 1;
// hourlist[1] = 1;
// }
// if (newhour == 12){
// hourlist2[0] = 1;
// hourlist[0] = 1;
// hourlist[1] = 1;
// }
// if (newhour == 11){
// hourlist2[0] = 1;
// hourlist[0] = 1;
// }
// if (newhour == 10){
// hourlist2[0] = 1;
// hourlist2[1] = 0;
// hourlist2[2] = 0;
// for (int i = 0; i < 9; i++){
// hourlist = 0;
// }
// }
* if (hour > 19 && hour < 24) {*
* hourlist2[0] = 1;*
* hourlist2[1] = 1;*
* int subhour = hour - 20;*
* for (int i = 0; i < subhour; i++){*
_ hourlist = 1;
* }
}
if (hour > 9 && hour < 20) {
hourlist2[0] = 1;
int subhour = hour - 10;
for (int i = 0; i < subhour; i++){
hourlist = 1;
}
}*_

* if (hour > 0 && hour < 10) {*
* for (int i = 0; i < hour; i++){*
_ hourlist = 1;
* }
}
if (hour == 0){
}
//--------------------end new code*

* if (minute >= 0 and minute < 10) {
minlist2[0] = 0;
minlist2[1] = 0;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 0;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 10 and minute < 20) {
minlist2[0] = 1;
minlist2[1] = 0;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 10;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 20 and minute < 30) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 20;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 30 and minute < 40) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 30;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 40 and minute < 50) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 1;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 40;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 50 and minute < 60) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 1;
minlist2[4] = 1;
minlist2[5] = 0;
minute -= 50;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
}
timesync = 0;
}
// Random function*

if (seconds == 0 || seconds == 5 || seconds == 10 || seconds == 15 || seconds == 20 || seconds == 25 || seconds == 30 || seconds == 35 || seconds == 40 || seconds == 45 || seconds == 50 || seconds == 55){
* if (x == 1){
x = 0;
for (int a=0; a<9; a++){
int r = random(a,9);
int temp = minlist[a];
minlist[a] = minlist[r];
minlist[r] = temp;*_

* }*
* for (int a=0; a<9; a++){*
* int r = random(a,9);*
* int temp = hourlist[a];*
* hourlist[a] = hourlist[r];*
* hourlist[r] = temp;*
* }*
* for (int a=0; a<6; a++){*
* int r = random(a,6);*
* int temp = minlist2[a];*
* minlist2[a] = minlist2[r];*
* minlist2[r] = temp;*
* }*
* for (int a=0; a<3; a++){*
* int r = random(a,3);*
* int temp = hourlist2[a];*
* hourlist2[a] = hourlist2[r];*
* hourlist2[r] = temp;*
* }*
* }*
}
// random off for 10 seconds
if (seconds == 1 || seconds == 6 || seconds == 11 || seconds == 16 || seconds == 21 || seconds == 26 || seconds == 31 || seconds == 36 || seconds == 41 || seconds == 46 || seconds == 51 || seconds == 56){
* x = 1;*
}
// draw
int rowone[] = {hourlist2[0], hourlist[0], hourlist[1], hourlist[2], minlist2[0], minlist2[1], minlist[0], minlist[1], minlist[2]};
int rowtwo[] = {hourlist2[1], hourlist[3], hourlist[4], hourlist[5], minlist2[2], minlist2[3], minlist[3], minlist[4], minlist[5]};
int rowthree[] = {hourlist2[2], hourlist[6], hourlist[7], hourlist[8], minlist2[4], minlist2[5], minlist[6], minlist[7], minlist[8]};

if (millis() - timer < muxInterval)
* {*
* timer = millis();*
* mux++;*
* if (mux > 2){*
* mux = 0;*
* }*
* for (int i = 0; i <=8; i++){*
_ digitalWrite(colpins*, LOW);
}
digitalWrite(rowpins[0], LOW);
digitalWrite(rowpins[1], LOW);
digitalWrite(rowpins[2], LOW);*_

* if (mux == 0) {*
* for (int i = 8; i >= 0; i–) {*
_ if (rowone == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[0], HIGH);
}
}
}*_

* if (mux == 1) {*
* for (int i = 8; i >= 0; i–) {*
_ if (rowthree == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[2], HIGH);
}
}
}
if (mux == 2) {
for (int i = 8; i >= 0; i–) {
if (rowtwo == 1){
digitalWrite(colpins, HIGH);
digitalWrite(rowpins[1], HIGH);
}
}
}
}*_

// Time
unsigned long prevtime;
* if( getPCtime()) { // try to get time sync from pc*
* Serial.print("Clock synced at: ");*
* Serial.println(DateTime.now(),DEC);*
* }*
* if(DateTime.available()) { // update clocks if time has been synced*
* digitalWrite(13,LOW); // first flash the LED*
* prevtime = DateTime.now();*
* DateTime.available(); //refresh the Date and time properties*
* }*
}
boolean getPCtime() {
* // if time sync available from serial port, update time and return true*
* while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits*
* if( Serial.read() == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
_ char c= Serial.read();
top = c;
if( c >= ‘0’ && c <= ‘9’){
pctime = (10 * pctime) + (c - ‘0’) ; // convert digits to a number
}
}
timesync = 1;
DateTime.sync(pctime); // Sync Arduino clock to the time received on the serial port*

* return true; // return true if time message received on the serial port*
* }
}
return false; //if no message return false*

}
Ho inserito le librerie x la comunicazione col ds1302 e modificato i campi delle variabili secondi, minuti ed ore, xò mi da un errore, " In function ‘void loop()’:
error: ‘t’ was not declared in this scope", come se non riconoscesse la variabile t.hr sulla riga
* int hour = (t.hr);*
che ne pensi?! ps grazie veramente x il tuo aiuto, mi sei molto prezioso in questa fase!!! ;D_

Orologio completato e perfettamente funzionante, con funzione di mantenimento dell’ora anche in caso di spegnimento e riaccensione!!! Posto qua il codice modificato alla perfezione dal mitico uwefed per l’integrazione del ds1302

#include <stdio.h>
#include <string.h>
#include <DS1302.h>
//#include <DateTime.h>
//#include <DateTimeStrings.h>
#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_HEADER 255 // Header tag for serial time sync message

uint8_t CE_PIN = 14;
uint8_t IO_PIN = 15;
uint8_t SCLK_PIN = 16;
int colpins = {2,3,4,5,6,7,8,9,10};
int rowpins = {12, 11, 13};
char buf[50];
char day[10];
char top;
long timer;
const long muxInterval = 20;
int mux = 0;
int x;
int timesync;
int hourlist2[3];
int hourlist[9];
int minlist2[6];
int minlist[9];
int oldminute;

DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN); //definisce pin per collegamento RTC
/*
void print_time()
{
// Get the current time and date from the chip
Time t = rtc.time();
snprintf(buf, sizeof(buf), “%s %02d-%02d-%04d %02d:%02d:%02d”, // estrae i diversi valori dalla stringa del che il RTC da.
day,
t.date, t.mon, t.yr,
t.hr, t.min, t.sec);
}
*/
void setup() {
Serial.begin(19200);

for (int pin=0; pin<9; pin++) {
pinMode( colpins[pin], OUTPUT );
}
for (int pin=0; pin<3; pin++) {
pinMode( rowpins[pin], OUTPUT );
}
/* setta l orologio RTC
rtc.write_protect(false);
rtc.halt(false);
Time t(3, 5, 19, 2010, 21, 16, 37);

rtc.time(t);
*/
}

void loop(){

Time t = rtc.time(); //prende l’ ora dal RTC
int hour = t.hr;
int minute = t.min;
int seconds = t.sec;
int newhour = 0;

if (seconds == 0 || timesync == 1) {
Serial.println(seconds);
// reset
for (int i = 0; i < 9; i++){
minlist = 0;
_ hourlist = 0;_
* }*
* for (int i = 0; i < 6; i++) {*
_ minlist2 = 0;
* }
for (int i = 0; i < 3; i++) {
hourlist2 = 0;
} *_

* if (hour > 19 && hour < 24) {*
* hourlist2[0] = 1;*
* hourlist2[1] = 1;*

* int subhour = hour - 20;*
* for (int i = 0; i < subhour; i++){*
_ hourlist = 1;
* }
}
if (hour > 9 && hour < 20) {
hourlist2[0] = 1;
int subhour = hour - 10;
for (int i = 0; i < subhour; i++){
hourlist = 1;
}
}*_

* if (hour > 0 && hour < 10) {*
* for (int i = 0; i < hour; i++){*
_ hourlist = 1;
* }
}
if (hour == 0){
}*_

//--------------------end new code
* if (minute >= 0 and minute < 10) {*
* minlist2[0] = 0;*
* minlist2[1] = 0;*
* minlist2[2] = 0;*
* minlist2[3] = 0;*
* minlist2[4] = 0;*
* minlist2[5] = 0;*
* minute -= 0;*
* for (int i = 0; i < minute; i++){*
_ minlist = 1;
* }
}
if (minute >= 10 and minute < 20) {
minlist2[0] = 1;
minlist2[1] = 0;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 10;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 20 and minute < 30) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 0;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 20;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 30 and minute < 40) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 0;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 30;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 40 and minute < 50) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 1;
minlist2[4] = 0;
minlist2[5] = 0;
minute -= 40;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
if (minute >= 50 and minute < 60) {
minlist2[0] = 1;
minlist2[1] = 1;
minlist2[2] = 1;
minlist2[3] = 1;
minlist2[4] = 1;
minlist2[5] = 0;
minute -= 50;
for (int i = 0; i < minute; i++){
minlist = 1;
}
}
}*

timesync = 0;_

// Random function
if ((seconds == 0) || (seconds == 5) || (seconds == 10) || (seconds == 15) || (seconds == 20) || (seconds == 25) || (seconds == 30) || (seconds == 35) || (seconds == 40) || (seconds == 45) || (seconds == 50) || (seconds == 55))
{
if (x == 1){
* x = 0;*
* for (int a=0; a<9; a++){*
* int r = random(a,9);*
* int temp = minlist[a];*
* minlist[a] = minlist[r];*
* minlist[r] = temp;*

* }*
* for (int a=0; a<9; a++){*
* int r = random(a,9);*
* int temp = hourlist[a];*
* hourlist[a] = hourlist[r];*
* hourlist[r] = temp;*
* }*
* for (int a=0; a<6; a++){*
* int r = random(a,6);*
* int temp = minlist2[a];*
* minlist2[a] = minlist2[r];*
* minlist2[r] = temp;*
* }*
* for (int a=0; a<3; a++){*
* int r = random(a,3);*
* int temp = hourlist2[a];*
* hourlist2[a] = hourlist2[r];*
* hourlist2[r] = temp;*
* }*
}
}
// random off for 10 seconds
if (seconds == 1 || seconds == 6 || seconds == 11 || seconds == 16 || seconds == 21 || seconds == 26 || seconds == 31 || seconds == 36 || seconds == 41 || seconds == 46 || seconds == 51 || seconds == 56){
x = 1;
}

// draw

int rowone[] = {hourlist2[0], hourlist[0], hourlist[1], hourlist[2], minlist2[0], minlist2[1], minlist[0], minlist[1], minlist[2]};
int rowtwo[] = {hourlist2[1], hourlist[3], hourlist[4], hourlist[5], minlist2[2], minlist2[3], minlist[3], minlist[4], minlist[5]};
int rowthree[] = {hourlist2[2], hourlist[6], hourlist[7], hourlist[8], minlist2[4], minlist2[5], minlist[6], minlist[7], minlist[8]};

if (millis() - timer < muxInterval)
{
* timer = millis();*
* mux++;*
* if (mux > 2){*
* mux = 0;*
* }*
* for (int i = 0; i <=8; i++){*
_ digitalWrite(colpins*, LOW);*_

* }*
* digitalWrite(rowpins[0], LOW);*
* digitalWrite(rowpins[1], LOW);*
* digitalWrite(rowpins[2], LOW);*

* if (mux == 0) {*
* for (int i = 8; i >= 0; i–) {*
_ if (rowone == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[0], HIGH);
}
}
}*_

if (mux == 1) {
* for (int i = 8; i >= 0; i–) {*
_ if (rowthree == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[2], HIGH);
}
}
}*_

if (mux == 2) {
* for (int i = 8; i >= 0; i–) {*
_ if (rowtwo == 1){
digitalWrite(colpins*, HIGH);
digitalWrite(rowpins[1], HIGH);
}
}
}
}*_

// Time
/*
unsigned long prevtime;
if( getPCtime()) { // try to get time sync from pc
* Serial.print("Clock synced at: ");*
* Serial.println(DateTime.now(),DEC);*
}
if(DateTime.available()) { // update clocks if time has been synced
* digitalWrite(13,LOW); // first flash the LED*
* prevtime = DateTime.now();*

* DateTime.available(); //refresh the Date and time properties*
}
}
*/
/*
boolean getPCtime() {
// if time sync available from serial port, update time and return true
while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits
* if( Serial.read() == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
_ char c= Serial.read();
top = c;
if( c >= ‘0’ && c <= ‘9’){
pctime = (10 * pctime) + (c - ‘0’) ; // convert digits to a number
}
}
timesync = 1;
DateTime.sync(pctime); // Sync Arduino clock to the time received on the serial port*

* return true; // return true if time message received on the serial port*
* }
}
return false; //if no message return false
/

}_