//include libaries #include #include "RTClib.h" #include //define variables #define SER_Pin 8 //rtc - SER_IN #define RCLK_Pin 7 //rtc - L_CLOCK #define SRCLK_Pin 6 //rtc - CLOCK #define NUM_REGISTERS 4 //shift out registers - how many registers are in the chain int Reset = 4; //shift out registers - Reset int OEpin = 5; //shift out registers - OutputEnable Pin int power = 9; //control //shift out registers - initaize shifter using the Shifter library Shifter shifter(SER_Pin, RCLK_Pin, SRCLK_Pin, NUM_REGISTERS); int time_min;//rtc - control int counter = 0;//counter for minutes that the clock is running //rtc - numbers plexi digits matrix int time_digits_array[10][7] = { { 1, 1, 1, 0, 1, 1, 1 } ,{ 0, 1, 0, 0, 0, 1, 0 } ,{ 1, 1, 0, 1, 1, 0, 1} ,{ 1, 1, 0, 1, 0, 1, 1 } ,{ 0, 1, 1, 1, 0, 1, 0 } ,{ 1, 0, 1, 1, 0, 1, 1 } ,{ 1, 0, 1, 1, 1, 1, 1 } ,{ 1, 1, 0, 0, 0, 1, 0 } ,{ 1, 1, 1, 1, 1, 1, 1 } ,{ 1, 1, 1, 1, 0, 1, 0 } }; //rtc - numbers plexi digits matrix reverse /* int time_digits_rev_array[10][7] = { { 1, 1, 1, 0, 1, 1, 1 } ,{ 0, 1, 0, 0, 1, 0, 0 } ,{ 1, 0, 1, 1, 1, 0, 1} ,{ 1, 1, 0, 1, 1, 0, 1 } ,{ 0, 1, 0, 1, 1, 1, 0 } ,{ 1, 1, 0, 1, 0, 1, 1 } ,{ 1, 1, 1, 1, 0, 1, 1 } ,{ 1, 0, 1, 1, 0, 1, 0 } ,{ 1, 1, 1, 1, 1, 1, 1 } ,{ 0, 1, 0, 1, 1, 1, 1 } }; */ RTC_DS1307 rtc;//rtc - create object void setup () { pinMode(Reset, OUTPUT);//shift out register pinMode(OEpin, OUTPUT);//shift out register pinMode(power, OUTPUT);//control digitalWrite(Reset, HIGH); digitalWrite(power, HIGH);//turn on analogWrite(OEpin, 0);//pwm leds 255 alle_aus();//all leds are turned off Serial.begin(57600); Serial.println("init..."); #ifdef AVR Wire.begin(); #else Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due #endif rtc.begin();//rtc - begin //rtc - set time if (! rtc.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(__DATE__, __TIME__)); } Serial.println("clock loaded"); Serial.println("Strip Test:"); shifter.setAll(HIGH); shifter.write(); delay(2000); shifter.setAll(LOW); shifter.write(); for(int o = 0; o < 28; o++){ change_one(o, 1); shifter.write(); delay(50); } shifter.setAll(LOW); shifter.write(); glide(); } void loop () { time_check(); } void alle_aus(){ shifter.clear(); //set all pins on the shift register chain to LOW shifter.write(); //send changes to the chain and display them } void change_one(int led, int led_status){ if(led_status == 1){ shifter.setPin(led, HIGH); //set pin x in the chain HIGH } else{ shifter.setPin(led, LOW); //set pin x in the chain LOW } } void time_check(){ DateTime now = rtc.now(); int minuten = now.minute(); int stunden = now.hour(); int minuten1 = minuten / 10; int minuten2 = minuten - (minuten1*10); int stunden1 = stunden / 10; int stunden2 = stunden - (stunden1*10); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); if (time_min != now.minute()){ alle_aus(); if(counter != 0){ repulse(); pulse(); } counter++; if(counter > 30){ analogWrite(OEpin, 125); } time_min = now.minute(); Serial.println("min Uhrzeitänderung"); int minu = now.minute(); int std = now.hour(); Serial.println(); Serial.print("std 1: ");Serial.print(stunden1); Serial.println(); Serial.print("std 2: ");Serial.print(stunden2); Serial.println(); Serial.print("min 1: ");Serial.print(minuten1); Serial.println(); Serial.print("min 2: ");Serial.print(minuten2); Serial.println(); //LED 0-6 for(int s=0; s<7; s++){ Serial.println("time_digits_array[");Serial.print(stunden1);Serial.print("][");Serial.print(s);Serial.print("] = ");Serial.print(time_digits_array[stunden1][s]); if(time_digits_array[stunden1][s] == 0){ change_one(s, 0); } else{ change_one(s, 1); } } //LED 7-13 for(int g=7; g<14; g++){ Serial.println("time_digits_array[");Serial.print(stunden2);Serial.print("][");Serial.print(g);Serial.print("] = ");Serial.print(time_digits_array[stunden2][g]); if(time_digits_array[stunden2][g-7] == 0){ change_one(g, 0); } else{ change_one(g, 1); } } //LED 14-20 for(int f=14; f<21; f++){ Serial.println("time_digits_array[");Serial.print(minuten1);Serial.print("][");Serial.print(f);Serial.print("] = ");Serial.print(time_digits_array[minuten1][f]); if(time_digits_array[minuten1][f-14] == 0){ change_one(f, 0); } else{ change_one(f, 1); } } //LED 21-27 for(int h=21; h<28; h++){ Serial.println("time_digits_array[");Serial.print(minuten2);Serial.print("][");Serial.print(h);Serial.print("] = ");Serial.print(time_digits_array[minuten2][h]); if(time_digits_array[minuten2][h-21] == 0){ change_one(h, 0); } else{ change_one(h, 1); } } shifter.write(); //send changes to the chain and display them //notice how you only call write after you make all the changes you want to make if(counter > 60){ alle_aus(); } } else{delay(1000);} } void pulse(){ for(int o = 28; o > -1; o--){ change_one(o, 1); shifter.write(); delay(50); } alle_aus(); } void repulse(){ for(int o = 0; o < 28; o++){ change_one(o, 1); shifter.write(); delay(50); } alle_aus(); } void glide(){ for(int k = 0; k<4; k++){ alle_aus(); change_one(1+k*7, 1); change_one(4+k*7, 1); shifter.write(); delay(100); alle_aus(); change_one(0+k*7, 1); change_one(3+k*7, 1); change_one(6+k*7, 1); shifter.write(); delay(100); alle_aus(); change_one(2+k*7, 1); change_one(5+k*7, 1); shifter.write(); delay(100); } }