Abhinav Sinha vor 7 Jahren
Commit
a69967a7e9
1 geänderte Dateien mit 382 neuen und 0 gelöschten Zeilen
  1. 382 0
      Word_clock.ino

+ 382 - 0
Word_clock.ino

@@ -0,0 +1,382 @@
+#include "Wire.h"
+#include <FastLED.h>
+
+#define LED_PIN     5
+#define NUM_LEDS    98
+#define BRIGHTNESS  64
+#define LED_TYPE    WS2812
+#define COLOR_ORDER GRB
+#define DS3231_I2C_ADDRESS 0x68
+
+CRGB leds[NUM_LEDS];
+CRGB primaryColor = CRGB::White;
+
+byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
+
+byte count;
+
+// 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) );
+}
+
+void setup()
+{
+  Wire.begin();
+  Serial.begin(9600);
+  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
+  FastLED.setBrightness(  BRIGHTNESS );
+  count = 0;
+  // set the initial time here:
+  // DS3231 seconds, minutes, hours, day, date, month, year
+  //setDS3231time(30,13,0,5,8,11,18);
+}
+void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
+dayOfMonth, byte month, byte year)
+{
+  // sets time and date data to DS3231
+  Wire.beginTransmission(DS3231_I2C_ADDRESS);
+  Wire.write(0); // set next input to start at the seconds register
+  Wire.write(decToBcd(second)); // set seconds
+  Wire.write(decToBcd(minute)); // set minutes
+  Wire.write(decToBcd(hour)); // set hours
+  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
+  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
+  Wire.write(decToBcd(month)); // set month
+  Wire.write(decToBcd(year)); // set year (0 to 99)
+  Wire.endTransmission();
+}
+
+void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek,
+byte *dayOfMonth, byte *month, byte *year)
+{
+  Wire.beginTransmission(DS3231_I2C_ADDRESS);
+  Wire.write(0); // set DS3231 register pointer to 00h
+  Wire.endTransmission();
+  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
+  // request seven bytes of data from DS3231 starting from register 00h
+  *second = bcdToDec(Wire.read() & 0x7f);
+  *minute = bcdToDec(Wire.read());
+  *hour = bcdToDec(Wire.read() & 0x3f);
+  *dayOfWeek = bcdToDec(Wire.read());
+  *dayOfMonth = bcdToDec(Wire.read());
+  *month = bcdToDec(Wire.read());
+  *year = bcdToDec(Wire.read());
+}
+
+void displayTime()
+{
+  //byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
+  // retrieve data from DS3231
+  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
+  &year);
+  // send it to the serial monitor
+  Serial.print(hour, DEC);
+  // convert the byte variable to a decimal number when displayed
+  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(" ");
+  Serial.print(dayOfMonth, DEC);
+  Serial.print("/");
+  Serial.print(month, DEC);
+  Serial.print("/");
+  Serial.print(year, DEC);
+  Serial.print(" Day of week: ");
+  switch(dayOfWeek){
+  case 1:
+    Serial.println("Sunday");
+    break;
+  case 2:
+    Serial.println("Monday");
+    break;
+  case 3:
+    Serial.println("Tuesday");
+    break;
+  case 4:
+    Serial.println("Wednesday");
+    break;
+  case 5:
+    Serial.println("Thursday");
+    break;
+  case 6:
+    Serial.println("Friday");
+    break;
+  case 7:
+    Serial.println("Saturday");
+    break;
+  }
+}
+void loop()
+{
+  displayTime(); // display the real-time clock data on the Serial Monitor,
+  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
+  &year);
+  setLeds();
+  FastLED.show();
+  delay(1000); // every second
+}
+
+void setLeds(){
+  clearAllLeds();
+  /*
+  leds[count] = CRGB::White;
+  count++;
+  if(count == NUM_LEDS)
+    count = 0;
+  */
+
+  //byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
+  setIt();
+  setIs();
+  setMinutes();
+  setHours();
+  setOclock();
+  
+}
+
+void clearAllLeds(){
+  for(int i = 0; i < NUM_LEDS; i++){
+    leds[i] = CRGB::Black;
+  }
+}
+void setIt(){
+  //if(second & B00000001){
+    leds[0] = primaryColor;
+    leds[1] = primaryColor;
+  //}
+}
+
+void setIs(){
+  leds[2] = primaryColor;
+  leds[3] = primaryColor;
+}
+
+void setMinutes(){
+  if(minute < 3){
+    //do nothing
+  }
+  else if(minute < 8){
+    //5 past
+    setFive();
+    setMinutesLeds();
+    setPast();
+  }
+  else if(minute < 13){
+    //10 past
+    setTen();
+    setMinutesLeds();
+    setPast();
+  }
+  else if(minute < 18){
+    //Quarter past
+    setQuarter();
+    setPast();
+  }
+  else if(minute < 23){
+    //20 past
+    setTwenty();
+    setMinutesLeds();
+    setPast();
+  }
+  else if(minute < 28){
+    //25 past
+    setTwenty();
+    setFive();
+    setMinutesLeds();
+    setPast();
+  }
+  else if(minute < 33){
+    //half past
+    setHalf();
+    setPast();
+  }
+  else if(minute < 38){
+    //25 to
+    setTwenty();
+    setFive();
+    setMinutesLeds();
+    setTo();
+  }
+  else if(minute < 43){
+    //20 to
+    setTwenty();
+    setMinutesLeds();
+    setTo(); 
+  }
+  else if(minute < 48){
+    //Quarter to
+    setQuarter();
+    setTo();
+  }
+  else if(minute < 53){
+    //10 to
+    setTen();
+    setMinutesLeds();
+    setTo();
+  }
+  else if(minute < 58){
+    //5 to
+    setFive();
+    setMinutesLeds();
+    setTo();
+  }
+  else{
+    //minutes = 58 or 59
+    //do nothing
+  }
+}
+void setFive(){
+//five = leds 24-27
+    for(int i = 24; i < 28; i++){
+      leds[i] = primaryColor;
+    }
+}
+void setTen(){
+//ten = leds 4-6
+    for(int i = 4; i < 7; i++){
+      leds[i] = primaryColor;
+    }
+}
+
+void setQuarter(){
+//Quarter = leds 17-23
+    for(int i = 17; i < 24; i++){
+      leds[i] = primaryColor;
+    }
+}
+void setTwenty(){
+//twenty = leds 11-16
+    for(int i = 11; i < 17; i++){
+      leds[i] = primaryColor;
+    }
+}
+void setHalf(){
+//half = leds 7-10
+    for(int i = 7; i < 11; i++){
+      leds[i] = primaryColor;
+    }
+}
+
+void setMinutesLeds(){
+//minutes = leds 28-34
+    for(int i = 28; i < 35; i++){
+      leds[i] = primaryColor;
+    }
+}
+
+void setPast(){
+//past = leds 43-46
+    for(int i = 43; i < 47; i++){
+      leds[i] = primaryColor;
+    }
+}
+
+void setTo(){
+//to = leds 41-42
+    for(int i = 41; i < 43; i++){
+      leds[i] = primaryColor;
+    }
+}
+
+void setHours(){
+  if(hour > 12)
+    hour = hour-12;
+  if((hour == 1 && minute < 33) || (hour == 12 && minute >= 33) || (hour == 0 && minute >= 33)){
+    //set 1
+    for(int i = 38; i < 41; i++){
+      leds[i] = primaryColor;
+    }   
+  }
+  if((hour == 2 && minute < 33) || (hour == 1 && minute >= 33)){
+    //set 2
+    for(int i = 35; i < 38; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 3 && minute < 33) || (hour == 2 && minute >= 33)){
+    //set 3
+    for(int i = 47; i < 52; i++){
+      leds[i] = primaryCo"telemetry.enableTelemetry": falselor;
+    }
+  }
+  if((hour == 4 && minute < 33) || (hour == 3 && minute >= 33)){
+    //set 4
+    for(int i = 52; i < 56; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 5 && minute < 33) || (hour == 4 && minute >= 33)){
+    //set 5
+    for(int i = 56; i < 60; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 6 && minute < 33) || (hour == 5 && minute >= 33)){
+    //set 6
+    for(int i = 70; i < 73; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 7 && minute < 33) || (hour == 6 && minute >= 33)){
+    //set 7
+    for(int i = 65; i < 70; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 8 && minute < 33) || (hour == 7 && minute >= 33)){
+    //set 8
+    for(int i = 60; i < 65; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 9 && minute < 33) || (hour == 8 && minute >= 33)){
+    //set 9
+    for(int i = 73; i < 77; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 10 && minute < 33) || (hour == 9 && minute >= 33)){
+    //set 10
+    for(int i = 77; i < 80; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 11 && minute < 33) || (hour == 10 && minute >= 33)){
+    //set 11
+    for(int i = 80; i < 86; i++){
+      leds[i] = primaryColor;
+    }
+  }
+  if((hour == 12 && minute < 33) || (hour == 11 && minute >= 33)||(hour == 0 && minute < 33)){
+    //set 12
+    for(int i = 92; i < 98; i++){
+      leds[i] = primaryColor;
+    }
+  }
+
+}
+
+void setOclock(){
+  if((minute < 3) || (minute >= 58)){
+    for(int i = 86; i < 92; i++){
+      leds[i] = primaryColor;
+    }
+  }
+}