Arduino WordClock

saturno:
Right now everything follows very nearly the original project from Riva, besides the enclosure.
What I would like to do in the future is to change the rotary encoder with two capacitive touch buttons to make it real stealthy :wink:
I like that idea, it annoyed me so much having buttons sticking out the back on the first wordclock I built I went for the hidden rotary encoder on the second version. It means you have to remove the back to adjust the clock but I have not needed to do that for about 8 months now. The clock back almost sits on the encoder shaft so pressing the clock back will scroll the date & temperature.

In order to make it work with the three MAX7219, I had to modify the MAX library provided by Riva.
Initially, the library only supported 2 MAX ICs and to make the four corner leds work, I had to make it support all possible addresses of the three MAXes.
The library is just a cut down version of the LedControl library. I had cut it down because the original clock used a ATmega8 and I was running out of Flash memory. The current code has a constant to define how many MAX chips are connected and should work.

const int numDevices = 2;               // Number of MAX7219 LED Driver Chips (1-8)

I just didn't realize yet how I will introduce some extended ASCII characters.
Just add then to this array.

prog_uchar font10x7 [] PROGMEM = {      // Large Ascii Font Matrix

I didn't yet found where should I extend the loadBufferLong to accept all of the 255 characters. I think it is from the standard AVR library...
The loadBuferLong is not from the ARV library. Just change the 0x7F to the new upper limit on the characters in the font10x7 array.

void loadBufferLong(int ascii){

if (ascii >= 0x20 && ascii <=0x7f){




You will also need to adjust this code to send pixel data to the extra MAX chip.


// Display Buffer on LED matrix
void printBufferLong(){
    for (int a=0;a<7;a++){                              // Loop 7 times for a 10x7 font
        unsigned long x = bufferLong [a];              // Get buffer entry
        int y = (x>>24) & 0xff;                        // Mask off left hand character
        lc.setRow(1,a,y);                              // Send row to relevent MAX7219 chip
        y = (x>>16) & 0xff;                            // Mask off right hand character
        lc.setRow(0,a,y);                              // Send row to relevent MAX7219 chip
    }
}




The other suggestion of replacing some unused characters of the fefault ASCII table is easier to implement. The only problem is that I did not figured yet how can I concatenate a character specified at the position 0x7f (for example) in an Birthday message or in a string of a Month...
I did see that for example you've used the character 0x7f (the 127 position) with the º character and that you've specified it's use in the temperature string.
How can I use such a character in a month string? Let's say "Março" that means March?
If your using Windows then you could use character map to build the string up using the characters you need and then copy/paste into the sketch. As your matrix is a higher density you probably don't need the extra wide font I use and could maybe find/define the entire ASCII set with little problem. 

Ho! Here are some pictures:
Looking good, I like the higher density of LED's