Pages: 1 [2]   Go Down
Author Topic: TIX LED CLOCK ARDUINO  (Read 1744 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 2
Posts: 215
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mmmm........magari fosse così semplice!!! ;-) 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
Logged

0
Offline Offline
Full Member
***
Karma: 2
Posts: 215
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
 */
}
Logged

Pages: 1 [2]   Go Up
Jump to: