miniBLIP - paint on matrix

Dependencies:   USBDevice mbed

Fork of blip_dado by Alberto Piganti

Committer:
pighixxx
Date:
Tue Dec 01 15:15:51 2015 +0000
Revision:
6:cacc8514502c
Parent:
5:03859160e3a9
Child:
7:5b8708227c46
New improved version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pighixxx 4:55d1628dd2e5 1 // miniblip led dado demo
pighixxx 3:2d84c8262139 2
JacobBramley 0:60499ad28ea9 3 #include "mbed.h"
JacobBramley 1:ca76237d2965 4 #include "neopixel.h"
JacobBramley 0:60499ad28ea9 5
pighixxx 3:2d84c8262139 6 // Matrix led output pin
pighixxx 3:2d84c8262139 7 #define DATA_PIN P0_9
JacobBramley 0:60499ad28ea9 8
pighixxx 4:55d1628dd2e5 9 #define ANALOG_PHOTO P0_16
pighixxx 4:55d1628dd2e5 10 #define ANALOG_POTENTIOMETER P0_22
pighixxx 4:55d1628dd2e5 11 #define ANALOG_BUZZER P0_8
pighixxx 4:55d1628dd2e5 12 #define DIGITAL_CIRCLE P0_12
pighixxx 4:55d1628dd2e5 13
pighixxx 4:55d1628dd2e5 14 AnalogIn ain(ANALOG_POTENTIOMETER);
pighixxx 4:55d1628dd2e5 15
pighixxx 4:55d1628dd2e5 16 void fill_pixel(neopixel::Pixel buffer[25], int x, int y, int red, int green, int blue){
pighixxx 4:55d1628dd2e5 17
pighixxx 4:55d1628dd2e5 18 if(x<0) x=0;
pighixxx 4:55d1628dd2e5 19 if(x>4) x=4;
pighixxx 4:55d1628dd2e5 20 if(y<0) y=0;
pighixxx 4:55d1628dd2e5 21 if(y>4) y=4;
pighixxx 4:55d1628dd2e5 22
pighixxx 4:55d1628dd2e5 23
pighixxx 4:55d1628dd2e5 24 int posicion=x+y*5;
pighixxx 4:55d1628dd2e5 25 buffer[posicion].red=red;
pighixxx 4:55d1628dd2e5 26 buffer[posicion].green=green;
pighixxx 4:55d1628dd2e5 27 buffer[posicion].blue=blue;
pighixxx 4:55d1628dd2e5 28 }
pighixxx 4:55d1628dd2e5 29
pighixxx 4:55d1628dd2e5 30 void void_matrix(neopixel::Pixel aux[25], int tam=25){
pighixxx 4:55d1628dd2e5 31
pighixxx 4:55d1628dd2e5 32 for(int i=0;i<tam;i++){
pighixxx 4:55d1628dd2e5 33 aux[i].red=0;
pighixxx 4:55d1628dd2e5 34 aux[i].green=0;
pighixxx 4:55d1628dd2e5 35 aux[i].blue=0;
pighixxx 4:55d1628dd2e5 36 }
JacobBramley 0:60499ad28ea9 37 }
JacobBramley 0:60499ad28ea9 38
pighixxx 5:03859160e3a9 39 int pant[5][5] = {
pighixxx 5:03859160e3a9 40 {0,0,0,0,0},
pighixxx 5:03859160e3a9 41 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 42 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 43 {0,0,0,0,0},
pighixxx 5:03859160e3a9 44 {0,0,0,0,0}
pighixxx 5:03859160e3a9 45 };
pighixxx 5:03859160e3a9 46
pighixxx 5:03859160e3a9 47 int pantR[5][5] = {
pighixxx 5:03859160e3a9 48 {0,0,0,0,0},
pighixxx 6:cacc8514502c 49 {0,0,0,0,0},
pighixxx 5:03859160e3a9 50 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 51 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 52 {0,0,0,0,0}
pighixxx 4:55d1628dd2e5 53 };
pighixxx 4:55d1628dd2e5 54
pighixxx 5:03859160e3a9 55 int pantG[5][5] = {
pighixxx 5:03859160e3a9 56 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 57 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 58 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 59 {0,0,0,0,0},
pighixxx 5:03859160e3a9 60 {0,0,0,0,0}
pighixxx 4:55d1628dd2e5 61 };
pighixxx 4:55d1628dd2e5 62
pighixxx 5:03859160e3a9 63 int pantB[5][5] = {
pighixxx 4:55d1628dd2e5 64 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 65 {0,0,0,0,0},
pighixxx 4:55d1628dd2e5 66 {0,0,0,0,0},
pighixxx 5:03859160e3a9 67 {0,0,0,0,0},
pighixxx 5:03859160e3a9 68 {0,0,0,0,0}
pighixxx 4:55d1628dd2e5 69 };
pighixxx 5:03859160e3a9 70
pighixxx 5:03859160e3a9 71
pighixxx 4:55d1628dd2e5 72
pighixxx 4:55d1628dd2e5 73 void drawVector(int theArray[5][5], neopixel::Pixel * vectorPixel, int r, int g, int b){
pighixxx 4:55d1628dd2e5 74 for(int i = 0;i<5;i++){
pighixxx 4:55d1628dd2e5 75 for(int j = 0; j<5;j++){
pighixxx 4:55d1628dd2e5 76 if(theArray[i][j] == 1)
pighixxx 4:55d1628dd2e5 77 fill_pixel(vectorPixel,i,j,r,g,b);
pighixxx 4:55d1628dd2e5 78 else
pighixxx 4:55d1628dd2e5 79 fill_pixel(vectorPixel,i,j,0,0,0);
pighixxx 4:55d1628dd2e5 80 }
pighixxx 4:55d1628dd2e5 81 }
pighixxx 4:55d1628dd2e5 82 }
JacobBramley 1:ca76237d2965 83 int main()
JacobBramley 1:ca76237d2965 84 {
pighixxx 3:2d84c8262139 85 // Turn off miniblip buzzer
pighixxx 3:2d84c8262139 86 PwmOut speaker(P0_8);
pighixxx 3:2d84c8262139 87 speaker=0.0;
JacobBramley 1:ca76237d2965 88 // Create a temporary DigitalIn so we can configure the pull-down resistor.
JacobBramley 1:ca76237d2965 89 DigitalIn(DATA_PIN, PullDown);
pighixxx 4:55d1628dd2e5 90
pighixxx 4:55d1628dd2e5 91 // Pushbutton
pighixxx 4:55d1628dd2e5 92 DigitalIn pushbutton(P0_23);
pighixxx 4:55d1628dd2e5 93
pighixxx 4:55d1628dd2e5 94 neopixel::Pixel vector[25];
pighixxx 4:55d1628dd2e5 95 void_matrix(vector);
JacobBramley 1:ca76237d2965 96
JacobBramley 1:ca76237d2965 97 // The pixel array control class.
JacobBramley 1:ca76237d2965 98 neopixel::PixelArray array(DATA_PIN);
pighixxx 5:03859160e3a9 99
pighixxx 5:03859160e3a9 100 bool pixState=0;
pighixxx 5:03859160e3a9 101 int pixCount=0;
pighixxx 5:03859160e3a9 102 int OldPos = ain.read() * 26.0f;
pighixxx 5:03859160e3a9 103
pighixxx 5:03859160e3a9 104 int color=0;
pighixxx 5:03859160e3a9 105
JacobBramley 1:ca76237d2965 106 while (1) {
pighixxx 5:03859160e3a9 107 // Read Pot
pighixxx 5:03859160e3a9 108 int posLed = ain.read() * 26.0f;
pighixxx 5:03859160e3a9 109
pighixxx 4:55d1628dd2e5 110 int posx=posLed%5;
pighixxx 4:55d1628dd2e5 111 int posy=int(posLed/5);
pighixxx 5:03859160e3a9 112 if (pixState) fill_pixel(vector,posx,posy,30,30,30); else {
pighixxx 5:03859160e3a9 113 int posx=posLed%5;
pighixxx 5:03859160e3a9 114 int posy=int(posLed/5);
pighixxx 5:03859160e3a9 115 int cred=pantR[posx][posy];
pighixxx 5:03859160e3a9 116 int cblu=pantG[posx][posy];
pighixxx 5:03859160e3a9 117 int cgreen=pantB[posx][posy];
pighixxx 5:03859160e3a9 118 fill_pixel(vector,posx,posy,cred,cblu,cgreen);
pighixxx 5:03859160e3a9 119 }
pighixxx 5:03859160e3a9 120 if (posLed!=OldPos) {
pighixxx 5:03859160e3a9 121 // Delete old pos
pighixxx 5:03859160e3a9 122 int posx=OldPos%5;
pighixxx 5:03859160e3a9 123 int posy=int(OldPos/5);
pighixxx 5:03859160e3a9 124 int cred=pantR[posx][posy];
pighixxx 5:03859160e3a9 125 int cblu=pantG[posx][posy];
pighixxx 5:03859160e3a9 126 int cgreen=pantB[posx][posy];
pighixxx 5:03859160e3a9 127 fill_pixel(vector,posx,posy,cred,cblu,cgreen);
pighixxx 5:03859160e3a9 128 OldPos=posLed;
pighixxx 5:03859160e3a9 129 }
pighixxx 5:03859160e3a9 130
pighixxx 5:03859160e3a9 131 pixCount++;
pighixxx 6:cacc8514502c 132 if (pixCount>8) {
pighixxx 5:03859160e3a9 133 pixCount=0;
pighixxx 5:03859160e3a9 134 pixState^= 1;
pighixxx 5:03859160e3a9 135 }
pighixxx 4:55d1628dd2e5 136 array.update(vector, 64);
pighixxx 4:55d1628dd2e5 137 wait_ms(30);
pighixxx 5:03859160e3a9 138
pighixxx 5:03859160e3a9 139
pighixxx 4:55d1628dd2e5 140 // Wait button
pighixxx 4:55d1628dd2e5 141 if(pushbutton){
pighixxx 5:03859160e3a9 142 //Check
pighixxx 5:03859160e3a9 143 int posx=posLed%5;
pighixxx 5:03859160e3a9 144 int posy=int(posLed/5);
pighixxx 5:03859160e3a9 145 int cred=pantR[posx][posy];
pighixxx 5:03859160e3a9 146 int cblu=pantG[posx][posy];
pighixxx 5:03859160e3a9 147 int cgreen=pantB[posx][posy];
pighixxx 5:03859160e3a9 148 if (cred==0&&cblu==0&cgreen==0) color=30; else color=0;
pighixxx 5:03859160e3a9 149 pantR[posx][posy]=color;
pighixxx 5:03859160e3a9 150 pantG[posx][posy]=0;
pighixxx 5:03859160e3a9 151 pantB[posx][posy]=0;
pighixxx 5:03859160e3a9 152 //fill_pixel(vector,posx,posy,cred,cblu,cgreen);
pighixxx 5:03859160e3a9 153 wait_ms(50);
pighixxx 6:cacc8514502c 154 while (pushbutton) {wait_ms(10);}
pighixxx 4:55d1628dd2e5 155 }
JacobBramley 0:60499ad28ea9 156 }
pighixxx 4:55d1628dd2e5 157 }