Ross Gardiner / Mbed 2 deprecated PiballNeoController

Dependencies:   NeoStrip SerialDriver mbed-rtos mbed

Committer:
rossng
Date:
Sun Jan 31 02:50:56 2016 +0000
Revision:
4:cea8cd2c44e4
Parent:
3:d331c534064f
Child:
5:522612e4b18d
Add some nice ticker-based patterns to the ring and grid

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rossng 0:0513e7187b87 1 #include "mbed.h"
rossng 0:0513e7187b87 2 #include "SerialDriver.h"
rossng 2:868c8a43e4b7 3 #include "NeoStrip.h"
rossng 2:868c8a43e4b7 4 #include "gt.h"
rossng 0:0513e7187b87 5
rossng 4:cea8cd2c44e4 6 #define NUM_INDIVIDUALS 7
rossng 4:cea8cd2c44e4 7 #define NUM_RING 16
rossng 4:cea8cd2c44e4 8 #define NUM_GRID 40
rossng 4:cea8cd2c44e4 9 #define NUM_ROWS 5
rossng 4:cea8cd2c44e4 10 #define NUM_COLUMNS 8
rossng 2:868c8a43e4b7 11
rossng 1:6feb61c0e4a1 12 SerialDriver rpi(p9, p10);
rossng 1:6feb61c0e4a1 13 SerialDriver pc(USBTX, USBRX);
rossng 0:0513e7187b87 14 DigitalOut myled(LED1);
rossng 4:cea8cd2c44e4 15 NeoStrip strip(p18, NUM_INDIVIDUALS + NUM_RING + NUM_GRID);
rossng 4:cea8cd2c44e4 16 Ticker t;
rossng 4:cea8cd2c44e4 17
rossng 4:cea8cd2c44e4 18 int ring_position = 0;
rossng 4:cea8cd2c44e4 19 int grid_col = 0;
rossng 0:0513e7187b87 20
rossng 0:0513e7187b87 21 int flash();
rossng 4:cea8cd2c44e4 22 void set_pattern(NeoStrip strip, uint8_t r, uint8_t g, uint8_t b);
rossng 4:cea8cd2c44e4 23 void update_pixels();
rossng 0:0513e7187b87 24
rossng 2:868c8a43e4b7 25 int main() {
rossng 4:cea8cd2c44e4 26 pc.printf("MBED: startup\r\n");
rossng 4:cea8cd2c44e4 27
rossng 4:cea8cd2c44e4 28 set_pattern(strip, 255, 255, 255);
rossng 4:cea8cd2c44e4 29
rossng 4:cea8cd2c44e4 30 t.attach(&update_pixels, 0.05);
rossng 2:868c8a43e4b7 31
rossng 0:0513e7187b87 32 // setup serial port
rossng 1:6feb61c0e4a1 33 rpi.baud(115200);
rossng 0:0513e7187b87 34
rossng 0:0513e7187b87 35 char* line_buffer = (char*) malloc(100*sizeof(char));
rossng 0:0513e7187b87 36
rossng 1:6feb61c0e4a1 37 char c = rpi.getc();
rossng 0:0513e7187b87 38 int pos = 0;
rossng 0:0513e7187b87 39
rossng 0:0513e7187b87 40 while (c != '\n' && c != '\r') {
rossng 4:cea8cd2c44e4 41 pc.printf("MBED: read %c\r\n", c);
rossng 0:0513e7187b87 42 line_buffer[pos] = c;
rossng 1:6feb61c0e4a1 43 c = rpi.getc();
rossng 1:6feb61c0e4a1 44 pos++;
rossng 0:0513e7187b87 45 }
rossng 0:0513e7187b87 46
rossng 1:6feb61c0e4a1 47 line_buffer[pos] = '\0';
rossng 4:cea8cd2c44e4 48 pc.printf("MBED: read newline\r\n");
rossng 1:6feb61c0e4a1 49
rossng 1:6feb61c0e4a1 50 rpi.printf("ack\n");
rossng 4:cea8cd2c44e4 51 pc.printf("MBED: sent ack\r\n");
rossng 0:0513e7187b87 52
rossng 0:0513e7187b87 53 int result = strcmp(line_buffer, "hello");
rossng 0:0513e7187b87 54
rossng 0:0513e7187b87 55 if (result == 0) {
rossng 4:cea8cd2c44e4 56 pc.printf("MBED: matched, updating strip\r\n");
rossng 4:cea8cd2c44e4 57 set_pattern(strip, 255, 0, 0);
rossng 1:6feb61c0e4a1 58 } else {
rossng 1:6feb61c0e4a1 59 pc.printf("Did not match.\n");
rossng 1:6feb61c0e4a1 60 pc.printf(line_buffer);
rossng 0:0513e7187b87 61 }
rossng 0:0513e7187b87 62 }
rossng 0:0513e7187b87 63
rossng 0:0513e7187b87 64
rossng 0:0513e7187b87 65 int flash() {
rossng 0:0513e7187b87 66 while(1) {
rossng 0:0513e7187b87 67 myled = 1;
rossng 0:0513e7187b87 68 wait(0.2);
rossng 0:0513e7187b87 69 myled = 0;
rossng 0:0513e7187b87 70 wait(0.2);
rossng 0:0513e7187b87 71 }
rossng 2:868c8a43e4b7 72 }
rossng 2:868c8a43e4b7 73
rossng 4:cea8cd2c44e4 74 void set_pattern(NeoStrip strip, uint8_t r, uint8_t g, uint8_t b) {
rossng 4:cea8cd2c44e4 75 strip.setBrightness(0.05);
rossng 4:cea8cd2c44e4 76 //strip.setPixels(0, N, gt_img);
rossng 4:cea8cd2c44e4 77 for (int p = 0; p < 64; p++) {
rossng 4:cea8cd2c44e4 78 strip.setPixel(p, r, g, b);
rossng 4:cea8cd2c44e4 79 }
rossng 2:868c8a43e4b7 80 strip.write();
rossng 4:cea8cd2c44e4 81 }
rossng 4:cea8cd2c44e4 82
rossng 4:cea8cd2c44e4 83 void update_pixels() {
rossng 4:cea8cd2c44e4 84 strip.setBrightness(0.05);
rossng 4:cea8cd2c44e4 85 // update ring
rossng 4:cea8cd2c44e4 86 strip.setPixel(NUM_INDIVIDUALS + ring_position, 255, 255, 255);
rossng 4:cea8cd2c44e4 87 ring_position = (ring_position + 1) % NUM_RING;
rossng 4:cea8cd2c44e4 88 strip.setPixel(NUM_INDIVIDUALS + ring_position, 255, 0, 0);
rossng 4:cea8cd2c44e4 89
rossng 4:cea8cd2c44e4 90 // update grid
rossng 4:cea8cd2c44e4 91 for (int i = grid_col; i < NUM_GRID; i += NUM_COLUMNS) {
rossng 4:cea8cd2c44e4 92 strip.setPixel(NUM_INDIVIDUALS + NUM_RING + i, 255, 255, 255);
rossng 4:cea8cd2c44e4 93 }
rossng 4:cea8cd2c44e4 94 grid_col = (grid_col + 1) % NUM_COLUMNS;
rossng 4:cea8cd2c44e4 95
rossng 4:cea8cd2c44e4 96 for (int i = grid_col; i < NUM_GRID; i += NUM_COLUMNS) {
rossng 4:cea8cd2c44e4 97 strip.setPixel(NUM_INDIVIDUALS + NUM_RING + i, 255, 0, 0);
rossng 4:cea8cd2c44e4 98 }
rossng 4:cea8cd2c44e4 99
rossng 4:cea8cd2c44e4 100 strip.write();
rossng 0:0513e7187b87 101 }