A demo for Adafruit 64x32 demo with PWM

Dependencies:   mbed-rtos BufferedSerial Adafruit_GFX_MBED LedMatrix-PWM FastIO mbed-dev

main.cpp

Committer:
davidr99
Date:
2017-10-24
Revision:
4:3e25a10c202c
Parent:
2:6bfb86f8c9d3

File content as of revision 4:3e25a10c202c:

/*
Based on http://os.mbed.com/users/RRacer/code/Adafruit-16x32-basic-demo/

*/

#include "mbed.h"
#include "rtos.h"
#include "LedMatrix.h"
#include "BufferedSerial.h"

BufferedSerial pc(USBTX, USBRX, 1024); // tx, rx

LedMatrix matrix;

void PaintThread()
{
    matrix.Paint();
}

int getNextByte()
{
    char value = 0;
    
    while(pc.readable() == 0);
    value = pc.getc();
    return value;
}

int main()
{
    Ticker ticker;
    matrix.Init();
    
    pc.baud(460800);
    
    #if defined(TARGET_STM32F767ZI)
    ticker.attach_us(PaintThread, 15);
    #elif defined(TARGET_STM32F303K8)
    ticker.attach_us(PaintThread, 25);
    #endif   
    
    uint16_t currentX = 0, currentY = 0;
    
    while(1) {       
    
    /*
        int c = getNextByte();   // Read byte from master
        
        switch (c)
        {
            case 'L':   // Location
                currentX = (getNextByte() << 8) + getNextByte();
                currentY = (getNextByte() << 8) + getNextByte();
                pc.printf("X: %d, Y: %d\n", currentX, currentY);
                break;
                
            case 'G': // Set background
                {
                    uint16_t c = getNextByte() | (getNextByte() << 8);
                    
                    for(int y=0;y<HEIGHT;y++)
                    {            
                        for(int x=0;x<WIDTH;x++)
                        {
                            matrix.drawPixel(x, y, c);
                        }
                    }
                }
                break;
                
            case 'B':   // Load buffer            
                for(int y=0;y<HEIGHT;y++)
                {            
                    for(int x=0;x<WIDTH;x++)
                    {
                        uint16_t c = getNextByte() | (getNextByte() << 8);
                        matrix.drawPixel(x, y, c);
                    }
                }
                break;
                    
            case 'C':   // Color
                {
                    uint16_t c = getNextByte() | (getNextByte() << 8);
                    matrix.drawPixel(currentX, currentY, c);
                    
                    currentX++;
                    if (currentX >= WIDTH)
                    {
                        currentX = 0;
                        currentY++;
                    }
                    
                    if (currentY >= HEIGHT)
                    {
                        currentY = 0;
                    }
                }
                break;
                
            case 'D':   // Double Buffer
                {
                    bool dBuffer = getNextByte() == 1;
                    matrix.SetDoubleBuffer(dBuffer);
                }
                break;
                
            case 'S':   // Swap Buffers
                {
                    bool copyBuffer = getNextByte() == 1;
                    matrix.Swap(copyBuffer);
                }
                break;
                
            case 'T':   // Text
                {
                    int16_t x = getNextByte() | (getNextByte() << 8);
                    int16_t y = getNextByte() | (getNextByte() << 8);              
                    int size = getNextByte();
                    uint16_t color = getNextByte() | (getNextByte() << 8);
                    
                    matrix.setCursor(x, y);
                    matrix.setTextColor(color);
                    matrix.setTextSize(size);
        
                    int length = getNextByte();
                    for(int c = 0; c< length;c++)
                    {
                        matrix.print((char) getNextByte());
                    }
                }
                break;
            }
        */

        /*
        for(int c=0;c<64;c++)
        {
            matrix.setCursor(20, 12);
            matrix.setTextColor(matrix.ColorHSV(c * 22, 255, 255, true));
            matrix.setTextSize(1);
            matrix.println("Test!");
            Thread::wait(200);
        }
    
        */
        for(int x=0;x<WIDTH;x++)
        {
            for(int y=0;y<32;y++)
            {
                matrix.drawPixel(x, y, matrix.ColorHSV(x * 22, 255, 255, true));
            }   
        }
        
        Thread::wait(5000);
    
        for(int c=0; c<16; c++) {
            for(int x=c; x<((WIDTH-1)-c); x++) {// Top side
                matrix.drawPixel(x,c,matrix.Color444(c, 0, 0));
                Thread::wait(10);
            }
            for(int y=c; y<((HEIGHT-1)-c); y++) {// Right side
                matrix.drawPixel((WIDTH-1)-c,y, matrix.Color444(0, c, 0));
                Thread::wait(10);
            }
            for(int x=((WIDTH-1)-c); x>=c; x--) {// Bottom side
                matrix.drawPixel(x,((HEIGHT-1)-c), matrix.Color444(0, 0, c));
                Thread::wait(10);
            }
            for(int y=((HEIGHT-1)-c); y>=c; y--) { // Left side
                matrix.drawPixel(c,y, matrix.Color444(0, c, 0));
                Thread::wait(10);
            }
        }
        
        Thread::wait(1000);
    }
}