Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC
- #include <Time.h> //http://www.arduino.cc/playground/Code/Time
- #include <Wire.h> //http://arduino.cc/en/Reference/Wire (included withArduino IDE)
- int latchPin = 10;
- int clockPin = 11;
- int dataPin = 12;
- int enablePin = 9;
- int hour_adjust=8;
- int mylasthour=0;
- int mylastminute=0;
- int MeineFolge[9] = { 2, 1, 0, 3, 6, 5, 4, 7 };
- void setup() {
- //RTC.set(1521872250);
- pinMode(latchPin, OUTPUT);
- pinMode(clockPin, OUTPUT);
- pinMode(dataPin, OUTPUT);
- pinMode(enablePin, OUTPUT);
- pinMode(hour_adjust, INPUT);
- digitalWrite(latchPin, 0);
- digitalWrite(enablePin, 1);
- digitalWrite(hour_adjust, HIGH);
- if(digitalRead(hour_adjust)==HIGH)
- setSyncProvider(summertime);
- else
- setSyncProvider(wintertime);
- if (timeStatus() != timeSet)
- Serial.println("Unable to sync with the RTC");
- else
- Serial.println("RTC has set the system time");
- setSyncInterval(30);
- }
- time_t wintertime(){
- time_t time=RTC.get()+3600;
- return time;
- }
- time_t summertime(){
- time_t time=RTC.get()+7200;
- return time;
- }
- void loop() {
- if(mylasthour!=hour()|| mylastminute!=minute())
- {
- settime(hour(), minute(), 0);
- mylasthour=hour();
- mylastminute=minute();
- }
- }
- void settime(unsigned int Stunden, unsigned int Minuten, unsigned int temp) {
- shiftOut(dataPin, clockPin, LSBFIRST,swapNibbles(reverse(mysort(uint2bcd(Minuten)))));
- shiftOut(dataPin, clockPin, LSBFIRST,swapNibbles(reverse(mysort(uint2bcd(Stunden)))));
- digitalWrite(latchPin, 1); // flick the latch to putthe data on the output pins
- delay(100);
- digitalWrite(latchPin, 0);
- delay(100);
- }
- static unsigned int uint2bcd(unsigned int ival)// macht aus einem zweistelligem Int ein B11110000 Doppelbcd
- {
- return ((ival / 10) << 4) | (ival % 10);
- }
- unsigned char swapNibbles(unsigned char x) //macht aus B00001111 B11110000 Nibbles=halbes Byte
- {
- return ( (x & 0x0F) << 4 | (x & 0xF0) >> 4 );
- }
- unsigned char reverse(unsigned char b) { //macht aus einem B0000001 ein B1000000
- b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
- b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
- b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
- return b;
- }
- unsigned int mysort(unsigned int ival) //sortiert BCD zu den Pins des Schieberegisters //Pins zu B ABCDABCD
- {
- uint8_t mytempival = 0;
- for (int i = 0; i < 7; i++) {
- if (bitRead(ival, i) == 1) {
- bitWrite(mytempival, MeineFolge[i], 1);
- }
- }
- return mytempival;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement