5 by 14 Neo array
Dependencies: mbed
main.cpp@0:a32d1a85a830, 2017-06-12 (annotated)
- Committer:
- RogerJKelly
- Date:
- Mon Jun 12 16:57:43 2017 +0000
- Revision:
- 0:a32d1a85a830
working display using ARM to drive display.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RogerJKelly | 0:a32d1a85a830 | 1 | #include "mbed.h" |
RogerJKelly | 0:a32d1a85a830 | 2 | |
RogerJKelly | 0:a32d1a85a830 | 3 | #include "NeoMatrix.h" |
RogerJKelly | 0:a32d1a85a830 | 4 | |
RogerJKelly | 0:a32d1a85a830 | 5 | //#include "WS2812.h" |
RogerJKelly | 0:a32d1a85a830 | 6 | //#include "PixelArray.h" |
RogerJKelly | 0:a32d1a85a830 | 7 | |
RogerJKelly | 0:a32d1a85a830 | 8 | #define WS2812_BUF 70 |
RogerJKelly | 0:a32d1a85a830 | 9 | |
RogerJKelly | 0:a32d1a85a830 | 10 | #define Color(r, g, b) ((r&0xFF)<<16 | (g&0xFF) << 8 | (b&0xFF)) // pack colors |
RogerJKelly | 0:a32d1a85a830 | 11 | |
RogerJKelly | 0:a32d1a85a830 | 12 | #define Red (Color(255,0,0)) |
RogerJKelly | 0:a32d1a85a830 | 13 | #define Green (Color(0,255,0)) |
RogerJKelly | 0:a32d1a85a830 | 14 | #define Blue (Color(0,0,255)) |
RogerJKelly | 0:a32d1a85a830 | 15 | |
RogerJKelly | 0:a32d1a85a830 | 16 | |
RogerJKelly | 0:a32d1a85a830 | 17 | // for KL25Z |
RogerJKelly | 0:a32d1a85a830 | 18 | //DigitalOut CPU_Mon(PTD5); // to measure time in output loop |
RogerJKelly | 0:a32d1a85a830 | 19 | // for LPC1768 |
RogerJKelly | 0:a32d1a85a830 | 20 | //DigitalOut CPU_Mon(p21); // to measure time in output loop |
RogerJKelly | 0:a32d1a85a830 | 21 | // for STM32F103 Nucleo |
RogerJKelly | 0:a32d1a85a830 | 22 | DigitalOut CPU_Mon(PB_6); // to measure time in output loop |
RogerJKelly | 0:a32d1a85a830 | 23 | |
RogerJKelly | 0:a32d1a85a830 | 24 | DigitalOut myled(LED1); |
RogerJKelly | 0:a32d1a85a830 | 25 | //DigitalOut myled2(LED2); |
RogerJKelly | 0:a32d1a85a830 | 26 | //DigitalOut myled3(LED3); |
RogerJKelly | 0:a32d1a85a830 | 27 | |
RogerJKelly | 0:a32d1a85a830 | 28 | //PixelArray px(WS2812_BUF); |
RogerJKelly | 0:a32d1a85a830 | 29 | //NeoArr = px(1); |
RogerJKelly | 0:a32d1a85a830 | 30 | |
RogerJKelly | 0:a32d1a85a830 | 31 | // See the program page for information on the timing numbers |
RogerJKelly | 0:a32d1a85a830 | 32 | // The given numbers are for the K64F: 0, 5, 5, 0 |
RogerJKelly | 0:a32d1a85a830 | 33 | // K64F, KL46Z: 0, 5, 5, 0 |
RogerJKelly | 0:a32d1a85a830 | 34 | //NeoArr array(PTD2, 1, 0, 5, 5, 0); |
RogerJKelly | 0:a32d1a85a830 | 35 | // LPC1768: 5, 10, 10, 15 |
RogerJKelly | 0:a32d1a85a830 | 36 | //NeoArr array(p18, 1, 5, 10, 10, 15); |
RogerJKelly | 0:a32d1a85a830 | 37 | // STM32F103 Nucleo: 0, 5, 5, 0 |
RogerJKelly | 0:a32d1a85a830 | 38 | NeoArr array(PC_7, 1, 0, 5, 5, 0); |
RogerJKelly | 0:a32d1a85a830 | 39 | |
RogerJKelly | 0:a32d1a85a830 | 40 | Ticker timer; |
RogerJKelly | 0:a32d1a85a830 | 41 | char second_tick; |
RogerJKelly | 0:a32d1a85a830 | 42 | |
RogerJKelly | 0:a32d1a85a830 | 43 | // -- sets a flag every time the 5 second timer fires |
RogerJKelly | 0:a32d1a85a830 | 44 | void attime() |
RogerJKelly | 0:a32d1a85a830 | 45 | { |
RogerJKelly | 0:a32d1a85a830 | 46 | second_tick = true; |
RogerJKelly | 0:a32d1a85a830 | 47 | //HazLed = 1; // turn Haz Led off |
RogerJKelly | 0:a32d1a85a830 | 48 | //NmeaPrint = true; |
RogerJKelly | 0:a32d1a85a830 | 49 | } |
RogerJKelly | 0:a32d1a85a830 | 50 | |
RogerJKelly | 0:a32d1a85a830 | 51 | //const unsigned char smile_img[8] = {0x1E,0x21,0xD2,0xC0,0xD2,0xCC,0x21,0x1E}; // smiley |
RogerJKelly | 0:a32d1a85a830 | 52 | void scroll_str(char *buff, int i) |
RogerJKelly | 0:a32d1a85a830 | 53 | { |
RogerJKelly | 0:a32d1a85a830 | 54 | //int start_px, end_px; |
RogerJKelly | 0:a32d1a85a830 | 55 | //start_px = n; |
RogerJKelly | 0:a32d1a85a830 | 56 | //end_px = n * -6; |
RogerJKelly | 0:a32d1a85a830 | 57 | |
RogerJKelly | 0:a32d1a85a830 | 58 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 59 | array.drawChar(0,i,0,buff[0], 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 60 | array.drawChar(0,i+6,0,buff[1], 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 61 | array.drawChar(0,i+12,0,buff[2], 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 62 | if ( buff[3] == '&' ) |
RogerJKelly | 0:a32d1a85a830 | 63 | array.drawChar(0,i+18,0,buff[3], 255,255,0); |
RogerJKelly | 0:a32d1a85a830 | 64 | else |
RogerJKelly | 0:a32d1a85a830 | 65 | array.drawChar(0,i+18,0,buff[3], 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 66 | //CPU_Mon = 1; |
RogerJKelly | 0:a32d1a85a830 | 67 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 68 | |
RogerJKelly | 0:a32d1a85a830 | 69 | } |
RogerJKelly | 0:a32d1a85a830 | 70 | |
RogerJKelly | 0:a32d1a85a830 | 71 | int main() |
RogerJKelly | 0:a32d1a85a830 | 72 | { |
RogerJKelly | 0:a32d1a85a830 | 73 | char led_str[6]; |
RogerJKelly | 0:a32d1a85a830 | 74 | char c; |
RogerJKelly | 0:a32d1a85a830 | 75 | int distance = 900; |
RogerJKelly | 0:a32d1a85a830 | 76 | float bright = 0.2; // 20% is bright enough for most indoor use and should run without need for external power |
RogerJKelly | 0:a32d1a85a830 | 77 | |
RogerJKelly | 0:a32d1a85a830 | 78 | array.setBrightness(bright); // set brightness to default 0.2 |
RogerJKelly | 0:a32d1a85a830 | 79 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 80 | myled = 1; |
RogerJKelly | 0:a32d1a85a830 | 81 | wait_ms(500); |
RogerJKelly | 0:a32d1a85a830 | 82 | myled = 0; |
RogerJKelly | 0:a32d1a85a830 | 83 | wait_ms(500); |
RogerJKelly | 0:a32d1a85a830 | 84 | myled = 1; |
RogerJKelly | 0:a32d1a85a830 | 85 | second_tick = false; |
RogerJKelly | 0:a32d1a85a830 | 86 | timer.attach(&attime, 1); |
RogerJKelly | 0:a32d1a85a830 | 87 | c = '0'; |
RogerJKelly | 0:a32d1a85a830 | 88 | |
RogerJKelly | 0:a32d1a85a830 | 89 | while (true) |
RogerJKelly | 0:a32d1a85a830 | 90 | { |
RogerJKelly | 0:a32d1a85a830 | 91 | while ( 1 ) |
RogerJKelly | 0:a32d1a85a830 | 92 | { |
RogerJKelly | 0:a32d1a85a830 | 93 | /****************************** |
RogerJKelly | 0:a32d1a85a830 | 94 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 95 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 96 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 97 | array.drawChar(0,0,0,'V', 1,128,1); |
RogerJKelly | 0:a32d1a85a830 | 98 | array.drawChar(0,5,0,'C', 1,128,1); |
RogerJKelly | 0:a32d1a85a830 | 99 | array.drawChar(0,10,0,'P', 1,128,1); |
RogerJKelly | 0:a32d1a85a830 | 100 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 101 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 102 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 103 | array.drawChar(0,0,0,'2', 128,128,1); |
RogerJKelly | 0:a32d1a85a830 | 104 | array.drawChar(0,5,0,'8', 128,128,1); |
RogerJKelly | 0:a32d1a85a830 | 105 | array.drawChar(0,10,0,'7', 128,128,1); |
RogerJKelly | 0:a32d1a85a830 | 106 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 107 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 108 | ******************************/ |
RogerJKelly | 0:a32d1a85a830 | 109 | /********************************** |
RogerJKelly | 0:a32d1a85a830 | 110 | for (char i='A'; i<'Z'; i+=3 ) |
RogerJKelly | 0:a32d1a85a830 | 111 | { |
RogerJKelly | 0:a32d1a85a830 | 112 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 113 | array.drawChar(0,0,0,i, 1,128,1); |
RogerJKelly | 0:a32d1a85a830 | 114 | array.drawChar(0,5,0,i+1, 128,1,1); |
RogerJKelly | 0:a32d1a85a830 | 115 | array.drawChar(0,10,0,i+2, 1,1,128); |
RogerJKelly | 0:a32d1a85a830 | 116 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 117 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 118 | } |
RogerJKelly | 0:a32d1a85a830 | 119 | *************************************/ |
RogerJKelly | 0:a32d1a85a830 | 120 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 121 | array.drawChar(0,0,0,'?', 128,0,0); |
RogerJKelly | 0:a32d1a85a830 | 122 | array.drawChar(0,5,0,'6', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 123 | array.drawChar(0,9,0,':', 128,1,1); |
RogerJKelly | 0:a32d1a85a830 | 124 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 125 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 126 | |
RogerJKelly | 0:a32d1a85a830 | 127 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 128 | array.drawChar(0,0,0,'?', 128,0,0); |
RogerJKelly | 0:a32d1a85a830 | 129 | array.drawChar(0,5,0,'1', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 130 | array.drawChar(0,9,0,';', 128,1,1); |
RogerJKelly | 0:a32d1a85a830 | 131 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 132 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 133 | |
RogerJKelly | 0:a32d1a85a830 | 134 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 135 | array.drawChar(0,0,0,'?', 128,0,0); |
RogerJKelly | 0:a32d1a85a830 | 136 | array.drawChar(0,5,0,'8', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 137 | array.drawChar(0,9,0,'^', 128,1,1); |
RogerJKelly | 0:a32d1a85a830 | 138 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 139 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 140 | |
RogerJKelly | 0:a32d1a85a830 | 141 | /**************************************************** |
RogerJKelly | 0:a32d1a85a830 | 142 | array.fillScreen(0,128, 0, 0); |
RogerJKelly | 0:a32d1a85a830 | 143 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 144 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 145 | |
RogerJKelly | 0:a32d1a85a830 | 146 | array.fillScreen(0,0, 128, 0); |
RogerJKelly | 0:a32d1a85a830 | 147 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 148 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 149 | |
RogerJKelly | 0:a32d1a85a830 | 150 | array.fillScreen(0,0, 0, 128); |
RogerJKelly | 0:a32d1a85a830 | 151 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 152 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 153 | |
RogerJKelly | 0:a32d1a85a830 | 154 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 155 | for(int i=0; i<14; i++) |
RogerJKelly | 0:a32d1a85a830 | 156 | { |
RogerJKelly | 0:a32d1a85a830 | 157 | for(int n=0; n<5; n++) |
RogerJKelly | 0:a32d1a85a830 | 158 | { |
RogerJKelly | 0:a32d1a85a830 | 159 | array.setPixel(0, i, n, 128, 0, 128); |
RogerJKelly | 0:a32d1a85a830 | 160 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 161 | wait_ms(200); |
RogerJKelly | 0:a32d1a85a830 | 162 | } |
RogerJKelly | 0:a32d1a85a830 | 163 | } |
RogerJKelly | 0:a32d1a85a830 | 164 | |
RogerJKelly | 0:a32d1a85a830 | 165 | wait_ms(2000); |
RogerJKelly | 0:a32d1a85a830 | 166 | *****************************************/ |
RogerJKelly | 0:a32d1a85a830 | 167 | |
RogerJKelly | 0:a32d1a85a830 | 168 | //for ( i = |
RogerJKelly | 0:a32d1a85a830 | 169 | /***************************************** |
RogerJKelly | 0:a32d1a85a830 | 170 | //sprintf( led_str, "VCP", distance, c); |
RogerJKelly | 0:a32d1a85a830 | 171 | for(int i=7;i>=-16;i--) |
RogerJKelly | 0:a32d1a85a830 | 172 | { |
RogerJKelly | 0:a32d1a85a830 | 173 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 174 | array.drawChar(0,i,0,'V', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 175 | array.drawChar(0,i+6,0,'C', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 176 | array.drawChar(0,i+12,0,'P', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 177 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 178 | //scroll_str( led_str, i ); |
RogerJKelly | 0:a32d1a85a830 | 179 | wait_ms(75); |
RogerJKelly | 0:a32d1a85a830 | 180 | } |
RogerJKelly | 0:a32d1a85a830 | 181 | wait_ms(100); |
RogerJKelly | 0:a32d1a85a830 | 182 | for(int i=7;i>=-16;i--) |
RogerJKelly | 0:a32d1a85a830 | 183 | { |
RogerJKelly | 0:a32d1a85a830 | 184 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 185 | array.drawChar(0,i,0,'2', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 186 | array.drawChar(0,i+6,0,'7', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 187 | array.drawChar(0,i+12,0,'1', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 188 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 189 | //scroll_str( led_str, i ); |
RogerJKelly | 0:a32d1a85a830 | 190 | wait_ms(75); |
RogerJKelly | 0:a32d1a85a830 | 191 | } |
RogerJKelly | 0:a32d1a85a830 | 192 | wait_ms(100); |
RogerJKelly | 0:a32d1a85a830 | 193 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 194 | array.showImageRGB(0, 1, 255, 255, 0); |
RogerJKelly | 0:a32d1a85a830 | 195 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 196 | wait_ms(400); |
RogerJKelly | 0:a32d1a85a830 | 197 | *******************************************/ |
RogerJKelly | 0:a32d1a85a830 | 198 | //wait_ms(4000); |
RogerJKelly | 0:a32d1a85a830 | 199 | } |
RogerJKelly | 0:a32d1a85a830 | 200 | //sprintf( led_str, "%3d%c", distance, c); |
RogerJKelly | 0:a32d1a85a830 | 201 | /************************************************* |
RogerJKelly | 0:a32d1a85a830 | 202 | while ( 1 ) |
RogerJKelly | 0:a32d1a85a830 | 203 | { |
RogerJKelly | 0:a32d1a85a830 | 204 | if ( distance > 500 ) c = '$'; |
RogerJKelly | 0:a32d1a85a830 | 205 | else c = '&'; |
RogerJKelly | 0:a32d1a85a830 | 206 | sprintf( led_str, "%3d%c", distance, c); |
RogerJKelly | 0:a32d1a85a830 | 207 | for(int i=7;i>=-24;i--) |
RogerJKelly | 0:a32d1a85a830 | 208 | { |
RogerJKelly | 0:a32d1a85a830 | 209 | //myled = 1; |
RogerJKelly | 0:a32d1a85a830 | 210 | //CPU_Mon = 1; |
RogerJKelly | 0:a32d1a85a830 | 211 | //array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 212 | //array.drawChar(0,i,0,'2', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 213 | //array.drawChar(0,i+6,0,'4', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 214 | //array.drawChar(0,i+12,0,'8', 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 215 | //array.drawChar(0,i+18,0,'$', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 216 | //CPU_Mon = 1; |
RogerJKelly | 0:a32d1a85a830 | 217 | //array.write(); |
RogerJKelly | 0:a32d1a85a830 | 218 | //myled = 0; |
RogerJKelly | 0:a32d1a85a830 | 219 | //CPU_Mon = 0; |
RogerJKelly | 0:a32d1a85a830 | 220 | scroll_str( led_str, i ); |
RogerJKelly | 0:a32d1a85a830 | 221 | wait_ms(75); |
RogerJKelly | 0:a32d1a85a830 | 222 | } |
RogerJKelly | 0:a32d1a85a830 | 223 | //wait_ms(500); |
RogerJKelly | 0:a32d1a85a830 | 224 | //array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 225 | //array.showImageRGB(0, 1, 255, 255, 0); |
RogerJKelly | 0:a32d1a85a830 | 226 | //array.drawChar(0,i+18,0,'$', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 227 | //array.write(); |
RogerJKelly | 0:a32d1a85a830 | 228 | //wait_ms(500); |
RogerJKelly | 0:a32d1a85a830 | 229 | distance -= 108; |
RogerJKelly | 0:a32d1a85a830 | 230 | if ( distance < 100 ) distance = 900; |
RogerJKelly | 0:a32d1a85a830 | 231 | } |
RogerJKelly | 0:a32d1a85a830 | 232 | |
RogerJKelly | 0:a32d1a85a830 | 233 | if ( second_tick == true ) |
RogerJKelly | 0:a32d1a85a830 | 234 | { |
RogerJKelly | 0:a32d1a85a830 | 235 | second_tick = false; |
RogerJKelly | 0:a32d1a85a830 | 236 | array.clear(); |
RogerJKelly | 0:a32d1a85a830 | 237 | array.drawChar(0,0,1,c, 128,128,128); |
RogerJKelly | 0:a32d1a85a830 | 238 | if ( c > '7' ) |
RogerJKelly | 0:a32d1a85a830 | 239 | array.drawChar(0,4,0,'^', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 240 | else if ( c > '4' ) |
RogerJKelly | 0:a32d1a85a830 | 241 | array.drawChar(0,4,0,':', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 242 | else if ( c == '3' ) |
RogerJKelly | 0:a32d1a85a830 | 243 | array.drawChar(0,5,1,'>', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 244 | else if ( c == '2' ) |
RogerJKelly | 0:a32d1a85a830 | 245 | array.drawChar(0,5,1,'<', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 246 | else |
RogerJKelly | 0:a32d1a85a830 | 247 | array.drawChar(0,4,0,';', 255,0,0); |
RogerJKelly | 0:a32d1a85a830 | 248 | array.write(); |
RogerJKelly | 0:a32d1a85a830 | 249 | c++; |
RogerJKelly | 0:a32d1a85a830 | 250 | if ( c > '9' ) c = '0'; |
RogerJKelly | 0:a32d1a85a830 | 251 | } |
RogerJKelly | 0:a32d1a85a830 | 252 | *******************************************/ |
RogerJKelly | 0:a32d1a85a830 | 253 | } |
RogerJKelly | 0:a32d1a85a830 | 254 | } |