/* Diffusion Clock - see http://www.technoblogy.com/show?3AAM David Johnson-Davies - www.technoblogy.com - 17th November 2020 ATtiny85 @ 8 MHz (external crystal; BOD disabled) CC BY 4.0 Licensed under a Creative Commons Attribution 4.0 International license: http://creativecommons.org/licenses/by/4.0/ */ #include // Dot-matrix character definitions char CharMap[10][3] = { { 0x7F, 0x41, 0x7F }, // 0 { 0x00, 0x20, 0x7F }, // 1 { 0x4F, 0x49, 0x79 }, // 2 { 0x49, 0x49, 0x7F }, // 3 { 0x78, 0x08, 0x7F }, // 4 { 0x79, 0x49, 0x4F }, // 5 { 0x7F, 0x49, 0x4F }, // 6 { 0x40, 0x40, 0x7F }, // 7 { 0x7F, 0x49, 0x7F }, // 8 { 0x79, 0x49, 0x7F }, // 9 }; /* // Alternative rounded digits char CharMap[10][3] = { { 0x3E, 0x41, 0x3E }, // 0 { 0x00, 0x20, 0x7F }, // 1 { 0x27, 0x49, 0x31 }, // 2 { 0x2A, 0x49, 0x36 }, // 3 { 0x18, 0x28, 0x7F }, // 4 { 0x7A, 0x49, 0x4E }, // 5 { 0x3E, 0x49, 0x26 }, // 6 { 0x47, 0x48, 0x70 }, // 7 { 0x36, 0x49, 0x36 }, // 8 { 0x30, 0x48, 0x3F }, // 9 }; */ const int addr1 = 117; const int addr2 = 116; void setupDisplay (int addr) { Wire.beginTransmission(addr); Wire.write(0x21); Wire.endTransmission(); Wire.beginTransmission(addr); Wire.write(0x81); Wire.endTransmission(); } // Brightness from 1 to 15 void setBrightness (int addr, int bri) { Wire.beginTransmission(addr); Wire.write(0xe0 + bri); Wire.endTransmission(); } void putColumn (int col, int bits) { int addr; if (col < 8) addr = addr1; else addr=addr2; Wire.beginTransmission(addr); Wire.write((col & 0x07)<<1); Wire.write(bits>>1 | bits<<7); Wire.endTransmission(); } void copyDigit (int digit, int col, int columns[]) { for (int i=0; i<3; i++) columns[col+i] = CharMap[digit][i]; } int pseudoRandom () { static int r = 1; int l = r & 1; r = r>>1; if (l == 1) r = r ^ 0x69; return r; } // Fade out old time void FadeOut(int cols[]) { for (int i=0; i<127; i++) { int r = pseudoRandom(); int col = r & 0xF; int bit = r>>4; cols[col] = cols[col] & ~(1<>4; newcols[col] = newcols[col] | (cols[col] & 1<