A demo for Adafruit 64x32 demo with PWM

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

Committer:
davidr99
Date:
Tue Oct 24 03:02:51 2017 +0000
Revision:
4:3e25a10c202c
Parent:
2:6bfb86f8c9d3
Changed to be a faster interrupt and use less time to update display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidr99 0:9f43f6e0d6ad 1 /*
davidr99 1:442e873e4f52 2 Based on http://os.mbed.com/users/RRacer/code/Adafruit-16x32-basic-demo/
davidr99 0:9f43f6e0d6ad 3
davidr99 0:9f43f6e0d6ad 4 */
davidr99 0:9f43f6e0d6ad 5
davidr99 0:9f43f6e0d6ad 6 #include "mbed.h"
davidr99 0:9f43f6e0d6ad 7 #include "rtos.h"
davidr99 2:6bfb86f8c9d3 8 #include "LedMatrix.h"
davidr99 4:3e25a10c202c 9 #include "BufferedSerial.h"
davidr99 4:3e25a10c202c 10
davidr99 4:3e25a10c202c 11 BufferedSerial pc(USBTX, USBRX, 1024); // tx, rx
davidr99 0:9f43f6e0d6ad 12
davidr99 2:6bfb86f8c9d3 13 LedMatrix matrix;
davidr99 0:9f43f6e0d6ad 14
davidr99 0:9f43f6e0d6ad 15 void PaintThread()
davidr99 0:9f43f6e0d6ad 16 {
davidr99 2:6bfb86f8c9d3 17 matrix.Paint();
davidr99 0:9f43f6e0d6ad 18 }
davidr99 0:9f43f6e0d6ad 19
davidr99 4:3e25a10c202c 20 int getNextByte()
davidr99 4:3e25a10c202c 21 {
davidr99 4:3e25a10c202c 22 char value = 0;
davidr99 4:3e25a10c202c 23
davidr99 4:3e25a10c202c 24 while(pc.readable() == 0);
davidr99 4:3e25a10c202c 25 value = pc.getc();
davidr99 4:3e25a10c202c 26 return value;
davidr99 4:3e25a10c202c 27 }
davidr99 4:3e25a10c202c 28
davidr99 0:9f43f6e0d6ad 29 int main()
davidr99 0:9f43f6e0d6ad 30 {
davidr99 0:9f43f6e0d6ad 31 Ticker ticker;
davidr99 4:3e25a10c202c 32 matrix.Init();
davidr99 4:3e25a10c202c 33
davidr99 4:3e25a10c202c 34 pc.baud(460800);
davidr99 4:3e25a10c202c 35
davidr99 4:3e25a10c202c 36 #if defined(TARGET_STM32F767ZI)
davidr99 4:3e25a10c202c 37 ticker.attach_us(PaintThread, 15);
davidr99 4:3e25a10c202c 38 #elif defined(TARGET_STM32F303K8)
davidr99 4:3e25a10c202c 39 ticker.attach_us(PaintThread, 25);
davidr99 4:3e25a10c202c 40 #endif
davidr99 4:3e25a10c202c 41
davidr99 4:3e25a10c202c 42 uint16_t currentX = 0, currentY = 0;
davidr99 0:9f43f6e0d6ad 43
davidr99 2:6bfb86f8c9d3 44 while(1) {
davidr99 4:3e25a10c202c 45
davidr99 4:3e25a10c202c 46 /*
davidr99 4:3e25a10c202c 47 int c = getNextByte(); // Read byte from master
davidr99 4:3e25a10c202c 48
davidr99 4:3e25a10c202c 49 switch (c)
davidr99 4:3e25a10c202c 50 {
davidr99 4:3e25a10c202c 51 case 'L': // Location
davidr99 4:3e25a10c202c 52 currentX = (getNextByte() << 8) + getNextByte();
davidr99 4:3e25a10c202c 53 currentY = (getNextByte() << 8) + getNextByte();
davidr99 4:3e25a10c202c 54 pc.printf("X: %d, Y: %d\n", currentX, currentY);
davidr99 4:3e25a10c202c 55 break;
davidr99 4:3e25a10c202c 56
davidr99 4:3e25a10c202c 57 case 'G': // Set background
davidr99 4:3e25a10c202c 58 {
davidr99 4:3e25a10c202c 59 uint16_t c = getNextByte() | (getNextByte() << 8);
davidr99 4:3e25a10c202c 60
davidr99 4:3e25a10c202c 61 for(int y=0;y<HEIGHT;y++)
davidr99 4:3e25a10c202c 62 {
davidr99 4:3e25a10c202c 63 for(int x=0;x<WIDTH;x++)
davidr99 4:3e25a10c202c 64 {
davidr99 4:3e25a10c202c 65 matrix.drawPixel(x, y, c);
davidr99 4:3e25a10c202c 66 }
davidr99 4:3e25a10c202c 67 }
davidr99 4:3e25a10c202c 68 }
davidr99 4:3e25a10c202c 69 break;
davidr99 4:3e25a10c202c 70
davidr99 4:3e25a10c202c 71 case 'B': // Load buffer
davidr99 4:3e25a10c202c 72 for(int y=0;y<HEIGHT;y++)
davidr99 4:3e25a10c202c 73 {
davidr99 4:3e25a10c202c 74 for(int x=0;x<WIDTH;x++)
davidr99 4:3e25a10c202c 75 {
davidr99 4:3e25a10c202c 76 uint16_t c = getNextByte() | (getNextByte() << 8);
davidr99 4:3e25a10c202c 77 matrix.drawPixel(x, y, c);
davidr99 4:3e25a10c202c 78 }
davidr99 4:3e25a10c202c 79 }
davidr99 4:3e25a10c202c 80 break;
davidr99 4:3e25a10c202c 81
davidr99 4:3e25a10c202c 82 case 'C': // Color
davidr99 4:3e25a10c202c 83 {
davidr99 4:3e25a10c202c 84 uint16_t c = getNextByte() | (getNextByte() << 8);
davidr99 4:3e25a10c202c 85 matrix.drawPixel(currentX, currentY, c);
davidr99 4:3e25a10c202c 86
davidr99 4:3e25a10c202c 87 currentX++;
davidr99 4:3e25a10c202c 88 if (currentX >= WIDTH)
davidr99 4:3e25a10c202c 89 {
davidr99 4:3e25a10c202c 90 currentX = 0;
davidr99 4:3e25a10c202c 91 currentY++;
davidr99 4:3e25a10c202c 92 }
davidr99 4:3e25a10c202c 93
davidr99 4:3e25a10c202c 94 if (currentY >= HEIGHT)
davidr99 4:3e25a10c202c 95 {
davidr99 4:3e25a10c202c 96 currentY = 0;
davidr99 4:3e25a10c202c 97 }
davidr99 4:3e25a10c202c 98 }
davidr99 4:3e25a10c202c 99 break;
davidr99 4:3e25a10c202c 100
davidr99 4:3e25a10c202c 101 case 'D': // Double Buffer
davidr99 4:3e25a10c202c 102 {
davidr99 4:3e25a10c202c 103 bool dBuffer = getNextByte() == 1;
davidr99 4:3e25a10c202c 104 matrix.SetDoubleBuffer(dBuffer);
davidr99 4:3e25a10c202c 105 }
davidr99 4:3e25a10c202c 106 break;
davidr99 4:3e25a10c202c 107
davidr99 4:3e25a10c202c 108 case 'S': // Swap Buffers
davidr99 4:3e25a10c202c 109 {
davidr99 4:3e25a10c202c 110 bool copyBuffer = getNextByte() == 1;
davidr99 4:3e25a10c202c 111 matrix.Swap(copyBuffer);
davidr99 4:3e25a10c202c 112 }
davidr99 4:3e25a10c202c 113 break;
davidr99 4:3e25a10c202c 114
davidr99 4:3e25a10c202c 115 case 'T': // Text
davidr99 4:3e25a10c202c 116 {
davidr99 4:3e25a10c202c 117 int16_t x = getNextByte() | (getNextByte() << 8);
davidr99 4:3e25a10c202c 118 int16_t y = getNextByte() | (getNextByte() << 8);
davidr99 4:3e25a10c202c 119 int size = getNextByte();
davidr99 4:3e25a10c202c 120 uint16_t color = getNextByte() | (getNextByte() << 8);
davidr99 4:3e25a10c202c 121
davidr99 4:3e25a10c202c 122 matrix.setCursor(x, y);
davidr99 4:3e25a10c202c 123 matrix.setTextColor(color);
davidr99 4:3e25a10c202c 124 matrix.setTextSize(size);
davidr99 4:3e25a10c202c 125
davidr99 4:3e25a10c202c 126 int length = getNextByte();
davidr99 4:3e25a10c202c 127 for(int c = 0; c< length;c++)
davidr99 4:3e25a10c202c 128 {
davidr99 4:3e25a10c202c 129 matrix.print((char) getNextByte());
davidr99 4:3e25a10c202c 130 }
davidr99 4:3e25a10c202c 131 }
davidr99 4:3e25a10c202c 132 break;
davidr99 4:3e25a10c202c 133 }
davidr99 4:3e25a10c202c 134 */
davidr99 2:6bfb86f8c9d3 135
davidr99 4:3e25a10c202c 136 /*
davidr99 2:6bfb86f8c9d3 137 for(int c=0;c<64;c++)
davidr99 2:6bfb86f8c9d3 138 {
davidr99 2:6bfb86f8c9d3 139 matrix.setCursor(20, 12);
davidr99 2:6bfb86f8c9d3 140 matrix.setTextColor(matrix.ColorHSV(c * 22, 255, 255, true));
davidr99 2:6bfb86f8c9d3 141 matrix.setTextSize(1);
davidr99 2:6bfb86f8c9d3 142 matrix.println("Test!");
davidr99 2:6bfb86f8c9d3 143 Thread::wait(200);
davidr99 2:6bfb86f8c9d3 144 }
davidr99 0:9f43f6e0d6ad 145
davidr99 4:3e25a10c202c 146 */
davidr99 4:3e25a10c202c 147 for(int x=0;x<WIDTH;x++)
davidr99 0:9f43f6e0d6ad 148 {
davidr99 0:9f43f6e0d6ad 149 for(int y=0;y<32;y++)
davidr99 0:9f43f6e0d6ad 150 {
davidr99 2:6bfb86f8c9d3 151 matrix.drawPixel(x, y, matrix.ColorHSV(x * 22, 255, 255, true));
davidr99 0:9f43f6e0d6ad 152 }
davidr99 0:9f43f6e0d6ad 153 }
davidr99 0:9f43f6e0d6ad 154
davidr99 2:6bfb86f8c9d3 155 Thread::wait(5000);
davidr99 0:9f43f6e0d6ad 156
davidr99 0:9f43f6e0d6ad 157 for(int c=0; c<16; c++) {
davidr99 4:3e25a10c202c 158 for(int x=c; x<((WIDTH-1)-c); x++) {// Top side
davidr99 2:6bfb86f8c9d3 159 matrix.drawPixel(x,c,matrix.Color444(c, 0, 0));
davidr99 0:9f43f6e0d6ad 160 Thread::wait(10);
davidr99 0:9f43f6e0d6ad 161 }
davidr99 4:3e25a10c202c 162 for(int y=c; y<((HEIGHT-1)-c); y++) {// Right side
davidr99 4:3e25a10c202c 163 matrix.drawPixel((WIDTH-1)-c,y, matrix.Color444(0, c, 0));
davidr99 0:9f43f6e0d6ad 164 Thread::wait(10);
davidr99 0:9f43f6e0d6ad 165 }
davidr99 4:3e25a10c202c 166 for(int x=((WIDTH-1)-c); x>=c; x--) {// Bottom side
davidr99 4:3e25a10c202c 167 matrix.drawPixel(x,((HEIGHT-1)-c), matrix.Color444(0, 0, c));
davidr99 0:9f43f6e0d6ad 168 Thread::wait(10);
davidr99 0:9f43f6e0d6ad 169 }
davidr99 4:3e25a10c202c 170 for(int y=((HEIGHT-1)-c); y>=c; y--) { // Left side
davidr99 2:6bfb86f8c9d3 171 matrix.drawPixel(c,y, matrix.Color444(0, c, 0));
davidr99 0:9f43f6e0d6ad 172 Thread::wait(10);
davidr99 0:9f43f6e0d6ad 173 }
davidr99 0:9f43f6e0d6ad 174 }
davidr99 0:9f43f6e0d6ad 175
davidr99 0:9f43f6e0d6ad 176 Thread::wait(1000);
davidr99 0:9f43f6e0d6ad 177 }
davidr99 0:9f43f6e0d6ad 178 }