#include <TimerOne.h> /* Scrolling Digital Clock Paul Cox Dec 2010 */ // device pins byte rows[8] = {9, 14, 8, 12, 1, 7, 2, 5}; byte cols[8] = {13, 3, 4, 10, 6, 11, 15, 16}; // arduino pin mapping byte pins[16] = {5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6}; byte screen[8] = {0, 0, 0, 0, 0, 0, 0, 0}; volatile byte screenRow = 0; volatile byte screenCol = 0; // big font byte zero[] = {6, 0B00000000, 0B00111110, 0B01111111, 0B01000001, 0B01111111, 0B00111110 }; byte one[] = {5, 0B00000000, 0B01000100, 0B01111111, 0B01111111, 0B01000000 }; byte two[] = {7, 0B00000000, 0B01100010, 0B01110011, 0B01011001, 0B01001001, 0B01101111, 0B01100110 }; byte three[] = {7, 0B00000000, 0B00100010, 0B01100011, 0B01001001, 0B01001001, 0B01111111, 0B00110110 }; byte four[] = {8, 0B00000000, 0B00011000, 0B00011100, 0B00010110, 0B00010011, 0B01111111, 0B01111111, 0B00010000 }; byte five[] = {7, 0B00000000, 0B00100111, 0B01100111, 0B01000101, 0B01000101, 0B01111101, 0B00111001 }; byte six[] = {7, 0B00000000, 0B00111100, 0B01111110, 0B01001011, 0B01001001, 0B01111001, 0B00110000 }; byte seven[] = {7, 0B00000000, 0B00000011, 0B01100011, 0B01110001, 0B00011001, 0B00001111, 0B00000111 }; byte eight[] = {7, 0B00000000, 0B00110110, 0B01111111, 0B01001001, 0B01001001, 0B01111111, 0B00110110, }; byte nine[] = {7, 0B00000000, 0B00000110, 0B01001111, 0B01001001, 0B01101001, 0B00111111, 0B00011110 }; byte colon[] = {3, 0B00000000, 0B00110110, 0B00110110 }; byte space[] = {5, 0B00000000, 0B00000000, 0B00000000, 0B00000000, 0B00000000 }; byte* nums[] = { zero, one, two, three, four, five, six, seven, eight, nine, colon, space }; int time[] = {0,0,10,0,0,10,0,0,11,11,11,11,11,11,11}; int iTimeIndex = 0; int iTimeMax = 15; int iCharIndex = 0; int iCharMax = 0; int iMillis = 0; unsigned long ulmSperS = 1000; unsigned long ulmSperM = (ulmSperS * 60); unsigned long ulmSperH = (ulmSperM * 60); #define REFRESH_INTERVAL 100 #define UPDATE_INTERVAL 150 byte** font = nums; void setup() { Timer1.initialize(REFRESH_INTERVAL); for (int i = 2; i <= 17; i++) { pinMode(i, OUTPUT); } Timer1.attachInterrupt(doubleBuffer); resetAnim(); } void doubleBuffer() { digitalWrite(translatePin(rows[screenRow]), LOW); digitalWrite(translatePin(cols[screenCol]), HIGH); screenCol++; if (screenCol >= 8) { screenCol = 0; screenRow++; if (screenRow >= 8) { screenRow = 0; } } if((screen[screenRow] >> screenCol) & B1 == B1) { digitalWrite(translatePin(rows[screenRow]), HIGH); digitalWrite(translatePin(cols[screenCol]), LOW); } else { digitalWrite(translatePin(rows[screenRow]), LOW); digitalWrite(translatePin(cols[screenCol]), HIGH); } } byte translatePin(byte original) { return pins[original - 1]; } void allOFF() { for (int i = 0; i < 8; i++) { screen[i] = 0; } } void scrollLeft() { for (int i = 0; i < 7; i++) { screen[i] = screen[i+1]; } } void scrollRight() { for (int i = 7; i > 0; i--) { screen[i] = screen[i-1]; } } void makeTime() { // calc hms since we started unsigned long ulMillis = millis(); int iHour = ulMillis / ulmSperH; int iMin = (ulMillis - (iHour * ulmSperH)) / ulmSperM; int iSec = (ulMillis - (iHour * ulmSperH) - (iMin * ulmSperM)) / ulmSperS; time[0] = floor(iHour / 10); time[1] = iHour - (time[0] * 10); time[3] = floor(iMin / 10); time[4] = iMin - (time[3] * 10); time[6] = floor(iSec / 10); time[7] = iSec - (time[6] * 10); } void on(byte row, byte column) { screen[column-1] |= (B1 << (row - 1)); } void off(byte row, byte column) { screen[column-1] &= ~(B1 << (row - 1)); } void resetAnim() { for (int i = 0; i < 8; i++) { screen[i] = B11111111; delay(25); } for (int i = 0; i < 8; i++) { screen[i] = B00000000; delay(25); } } void loop() { makeTime(); drawTime(); delay(UPDATE_INTERVAL); updateTime(); } void drawTime() { int iLoop = 7; int iC = iCharIndex; int iCM = iCharMax; int iT = iTimeIndex; while(iLoop >= 0) { screen[iLoop] = font[time[iT]][iC]; iC++; if (iC > iCM) { iT++; if (iT >= iTimeMax) { iT = 0; } iC = 1; iCM = font[time[iT]][0]; } iLoop--; } } void updateTime() { iCharIndex++; if (iCharIndex > iCharMax) { iTimeIndex++; if (iTimeIndex >= iTimeMax) { iTimeIndex = 0; } iCharIndex = 1; iCharMax = font[time[iTimeIndex]][0]; } }
Hi! Paul
When I am copying the code to the arduino sketch and when compiling it giving an erroe at timer1. initialize. Could you please tell me what this error is about.