
Programa de MIP
Dependencies: bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q
main.cpp@0:eb102efc70ff, 2021-05-19 (annotated)
- Committer:
- anna_dot
- Date:
- Wed May 19 18:56:49 2021 +0000
- Revision:
- 0:eb102efc70ff
- Child:
- 2:273f1db49b50
TSI button fet i completat
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
anna_dot | 0:eb102efc70ff | 1 | #include "mbed.h" |
anna_dot | 0:eb102efc70ff | 2 | #include "WS2812.h" |
anna_dot | 0:eb102efc70ff | 3 | #include "PixelArray.h" |
anna_dot | 0:eb102efc70ff | 4 | #include "TSISensor.h" |
anna_dot | 0:eb102efc70ff | 5 | #include "MMA8451Q.h" |
anna_dot | 0:eb102efc70ff | 6 | |
anna_dot | 0:eb102efc70ff | 7 | |
anna_dot | 0:eb102efc70ff | 8 | #define WS2812_BUF 256 |
anna_dot | 0:eb102efc70ff | 9 | #define NUM_COLORS 6 |
anna_dot | 0:eb102efc70ff | 10 | #define NUM_LEDS_PER_COLOR 10 |
anna_dot | 0:eb102efc70ff | 11 | #define NUM_LEDS_BARRA 4 |
anna_dot | 0:eb102efc70ff | 12 | #define ACCEL_ADRESS_I2C (0X1D<<1) |
anna_dot | 0:eb102efc70ff | 13 | |
anna_dot | 0:eb102efc70ff | 14 | PixelArray px(WS2812_BUF); |
anna_dot | 0:eb102efc70ff | 15 | |
anna_dot | 0:eb102efc70ff | 16 | // See the program page for information on the timing numbers |
anna_dot | 0:eb102efc70ff | 17 | // The given numbers are for the K64F |
anna_dot | 0:eb102efc70ff | 18 | WS2812 ws(D9, WS2812_BUF, 0, 5, 5, 0); |
anna_dot | 0:eb102efc70ff | 19 | MMA8451Q accel(PTE25, PTE24, ACCEL_ADRESS_I2C ); |
anna_dot | 0:eb102efc70ff | 20 | |
anna_dot | 0:eb102efc70ff | 21 | TSISensor tsi; |
anna_dot | 0:eb102efc70ff | 22 | int barra[NUM_LEDS_BARRA]={6,7,8,9}; |
anna_dot | 0:eb102efc70ff | 23 | float tsi_oldRead=0; |
anna_dot | 0:eb102efc70ff | 24 | int counter_tsi=0; |
anna_dot | 0:eb102efc70ff | 25 | |
anna_dot | 0:eb102efc70ff | 26 | //int pixel=8; |
anna_dot | 0:eb102efc70ff | 27 | |
anna_dot | 0:eb102efc70ff | 28 | //void control_tsi(float tsi_newRead); |
anna_dot | 0:eb102efc70ff | 29 | void control_accel(); |
anna_dot | 0:eb102efc70ff | 30 | void update_barra(int led_apagar, int led_encender, int act_barra ); |
anna_dot | 0:eb102efc70ff | 31 | void tsi_ctr_modeBtn(float tsi_newRead); |
anna_dot | 0:eb102efc70ff | 32 | |
anna_dot | 0:eb102efc70ff | 33 | |
anna_dot | 0:eb102efc70ff | 34 | int main() |
anna_dot | 0:eb102efc70ff | 35 | { |
anna_dot | 0:eb102efc70ff | 36 | |
anna_dot | 0:eb102efc70ff | 37 | ws.useII(WS2812::PER_PIXEL); // use per-pixel intensity scaling |
anna_dot | 0:eb102efc70ff | 38 | |
anna_dot | 0:eb102efc70ff | 39 | // set up the colours we want to draw with |
anna_dot | 0:eb102efc70ff | 40 | int colorbuf[NUM_COLORS] = {0x2f0000,0x2f2f00,0x002f00,0x002f2f,0x00002f,0x2f002f}; |
anna_dot | 0:eb102efc70ff | 41 | |
anna_dot | 0:eb102efc70ff | 42 | // for each of the colours (j) write out 10 of them |
anna_dot | 0:eb102efc70ff | 43 | // the pixels are written at the colour*10, plus the colour position |
anna_dot | 0:eb102efc70ff | 44 | // all modulus 60 so it wraps around |
anna_dot | 0:eb102efc70ff | 45 | /*for (int i = 0; i < WS2812_BUF; i++) { |
anna_dot | 0:eb102efc70ff | 46 | px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); |
anna_dot | 0:eb102efc70ff | 47 | }*/ |
anna_dot | 0:eb102efc70ff | 48 | for(int i=0; i<NUM_LEDS_BARRA; i++){ |
anna_dot | 0:eb102efc70ff | 49 | px.Set(barra[i], 0x2f0000); |
anna_dot | 0:eb102efc70ff | 50 | } |
anna_dot | 0:eb102efc70ff | 51 | |
anna_dot | 0:eb102efc70ff | 52 | for(int i=0; i<NUM_LEDS_BARRA; i++){ |
anna_dot | 0:eb102efc70ff | 53 | px.SetI(barra[i]%WS2812_BUF, 0xff); |
anna_dot | 0:eb102efc70ff | 54 | } |
anna_dot | 0:eb102efc70ff | 55 | |
anna_dot | 0:eb102efc70ff | 56 | |
anna_dot | 0:eb102efc70ff | 57 | |
anna_dot | 0:eb102efc70ff | 58 | |
anna_dot | 0:eb102efc70ff | 59 | // now all the colours are computed, add a fade effect using intensity scaling |
anna_dot | 0:eb102efc70ff | 60 | // compute and write the II value for each pixel |
anna_dot | 0:eb102efc70ff | 61 | /*for (int j=0; j<WS2812_BUF; j++) { |
anna_dot | 0:eb102efc70ff | 62 | // px.SetI(pixel position, II value) |
anna_dot | 0:eb102efc70ff | 63 | px.SetI(j%WS2812_BUF, 0xf+(0xf*(j%NUM_LEDS_PER_COLOR))); |
anna_dot | 0:eb102efc70ff | 64 | } |
anna_dot | 0:eb102efc70ff | 65 | |
anna_dot | 0:eb102efc70ff | 66 | */ |
anna_dot | 0:eb102efc70ff | 67 | // Now the buffer is written, rotate it |
anna_dot | 0:eb102efc70ff | 68 | // by writing it out with an increasing offset |
anna_dot | 0:eb102efc70ff | 69 | ws.write(px.getBuf()); |
anna_dot | 0:eb102efc70ff | 70 | while (1) { |
anna_dot | 0:eb102efc70ff | 71 | /*for (int z=WS2812_BUF; z >= 0 ; z--) { |
anna_dot | 0:eb102efc70ff | 72 | ws.write_offsets(px.getBuf(),z,z,z); |
anna_dot | 0:eb102efc70ff | 73 | wait(0.075); |
anna_dot | 0:eb102efc70ff | 74 | }*/ |
anna_dot | 0:eb102efc70ff | 75 | |
anna_dot | 0:eb102efc70ff | 76 | tsi_ctr_modeBtn(tsi.readPercentage()); |
anna_dot | 0:eb102efc70ff | 77 | |
anna_dot | 0:eb102efc70ff | 78 | control_accel(); |
anna_dot | 0:eb102efc70ff | 79 | |
anna_dot | 0:eb102efc70ff | 80 | } |
anna_dot | 0:eb102efc70ff | 81 | |
anna_dot | 0:eb102efc70ff | 82 | } |
anna_dot | 0:eb102efc70ff | 83 | |
anna_dot | 0:eb102efc70ff | 84 | void tsi_ctr_modeBtn(float tsi_newRead){ |
anna_dot | 0:eb102efc70ff | 85 | |
anna_dot | 0:eb102efc70ff | 86 | if(tsi_newRead!=0.0){ |
anna_dot | 0:eb102efc70ff | 87 | if(tsi_newRead>0.6 and tsi_oldRead>0.6){ |
anna_dot | 0:eb102efc70ff | 88 | counter_tsi++; |
anna_dot | 0:eb102efc70ff | 89 | } |
anna_dot | 0:eb102efc70ff | 90 | else { |
anna_dot | 0:eb102efc70ff | 91 | if(tsi_newRead<0.4 and tsi_oldRead<0.4){ |
anna_dot | 0:eb102efc70ff | 92 | counter_tsi++; |
anna_dot | 0:eb102efc70ff | 93 | } |
anna_dot | 0:eb102efc70ff | 94 | else{ |
anna_dot | 0:eb102efc70ff | 95 | counter_tsi=0; |
anna_dot | 0:eb102efc70ff | 96 | } |
anna_dot | 0:eb102efc70ff | 97 | } |
anna_dot | 0:eb102efc70ff | 98 | tsi_oldRead=tsi_newRead; |
anna_dot | 0:eb102efc70ff | 99 | |
anna_dot | 0:eb102efc70ff | 100 | |
anna_dot | 0:eb102efc70ff | 101 | if(counter_tsi == 250){ |
anna_dot | 0:eb102efc70ff | 102 | if( (tsi_newRead < 0.4) && tsi_newRead!=0 ){ //if left |
anna_dot | 0:eb102efc70ff | 103 | if(barra[0]>0){ |
anna_dot | 0:eb102efc70ff | 104 | update_barra((NUM_LEDS_BARRA-1),0, -1 ); |
anna_dot | 0:eb102efc70ff | 105 | } |
anna_dot | 0:eb102efc70ff | 106 | } |
anna_dot | 0:eb102efc70ff | 107 | else{ |
anna_dot | 0:eb102efc70ff | 108 | if(tsi_newRead > 0.6){ //if right |
anna_dot | 0:eb102efc70ff | 109 | if(barra[NUM_LEDS_BARRA-1]<15){ |
anna_dot | 0:eb102efc70ff | 110 | update_barra(0,(NUM_LEDS_BARRA-1), 1 ); |
anna_dot | 0:eb102efc70ff | 111 | } |
anna_dot | 0:eb102efc70ff | 112 | } |
anna_dot | 0:eb102efc70ff | 113 | } |
anna_dot | 0:eb102efc70ff | 114 | //control_tsi(tsi_newRead); |
anna_dot | 0:eb102efc70ff | 115 | ws.write(px.getBuf()); |
anna_dot | 0:eb102efc70ff | 116 | counter_tsi=0; |
anna_dot | 0:eb102efc70ff | 117 | } |
anna_dot | 0:eb102efc70ff | 118 | } |
anna_dot | 0:eb102efc70ff | 119 | else{ |
anna_dot | 0:eb102efc70ff | 120 | counter_tsi=0; |
anna_dot | 0:eb102efc70ff | 121 | } |
anna_dot | 0:eb102efc70ff | 122 | |
anna_dot | 0:eb102efc70ff | 123 | |
anna_dot | 0:eb102efc70ff | 124 | //tsi_oldRead=tsi_newRead; |
anna_dot | 0:eb102efc70ff | 125 | } |
anna_dot | 0:eb102efc70ff | 126 | |
anna_dot | 0:eb102efc70ff | 127 | /*void control_tsi(float tsi_newRead){ |
anna_dot | 0:eb102efc70ff | 128 | float percent= tsi_newRead; //tsi.readPercentage(); |
anna_dot | 0:eb102efc70ff | 129 | if( (percent < 0.4) && percent!=0 ){ //if left |
anna_dot | 0:eb102efc70ff | 130 | if(barra[0]>0){ |
anna_dot | 0:eb102efc70ff | 131 | px.Set(barra[NUM_LEDS_BARRA-1], 0x0); //apagamos el último led |
anna_dot | 0:eb102efc70ff | 132 | //px.SetI(barra[NUM_LEDS_BARRA-1]%WS2812_BUF, 0x0); |
anna_dot | 0:eb102efc70ff | 133 | |
anna_dot | 0:eb102efc70ff | 134 | for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array |
anna_dot | 0:eb102efc70ff | 135 | barra[i]=barra[i]-1; |
anna_dot | 0:eb102efc70ff | 136 | } |
anna_dot | 0:eb102efc70ff | 137 | |
anna_dot | 0:eb102efc70ff | 138 | px.Set(barra[0], 0x2f0000); //encendemos el siguiente led a la izquierda |
anna_dot | 0:eb102efc70ff | 139 | px.SetI(barra[0]%WS2812_BUF, 0xff); |
anna_dot | 0:eb102efc70ff | 140 | |
anna_dot | 0:eb102efc70ff | 141 | //update_barra((NUM_LEDS_BARRA-1),0, -1 ); |
anna_dot | 0:eb102efc70ff | 142 | } |
anna_dot | 0:eb102efc70ff | 143 | } |
anna_dot | 0:eb102efc70ff | 144 | else{ |
anna_dot | 0:eb102efc70ff | 145 | if(percent > 0.6){ //if right |
anna_dot | 0:eb102efc70ff | 146 | if(barra[NUM_LEDS_BARRA-1]<15){ |
anna_dot | 0:eb102efc70ff | 147 | px.Set(barra[0], 0x0); //apagamos el primer led |
anna_dot | 0:eb102efc70ff | 148 | //px.SetI(barra[0]%WS2812_BUF, 0x0); |
anna_dot | 0:eb102efc70ff | 149 | |
anna_dot | 0:eb102efc70ff | 150 | for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array |
anna_dot | 0:eb102efc70ff | 151 | barra[i]=barra[i]+1; |
anna_dot | 0:eb102efc70ff | 152 | } |
anna_dot | 0:eb102efc70ff | 153 | |
anna_dot | 0:eb102efc70ff | 154 | px.Set(barra[NUM_LEDS_BARRA-1], 0x2f0000); //encendemos el siguiente led a la derecha |
anna_dot | 0:eb102efc70ff | 155 | px.SetI(barra[NUM_LEDS_BARRA-1]%WS2812_BUF, 0xff); |
anna_dot | 0:eb102efc70ff | 156 | |
anna_dot | 0:eb102efc70ff | 157 | //update_barra(0,(NUM_LEDS_BARRA-1), 1 ); |
anna_dot | 0:eb102efc70ff | 158 | } |
anna_dot | 0:eb102efc70ff | 159 | |
anna_dot | 0:eb102efc70ff | 160 | } |
anna_dot | 0:eb102efc70ff | 161 | } |
anna_dot | 0:eb102efc70ff | 162 | |
anna_dot | 0:eb102efc70ff | 163 | //ws.write(px.getBuf()); |
anna_dot | 0:eb102efc70ff | 164 | }*/ |
anna_dot | 0:eb102efc70ff | 165 | void update_barra(int led_apagar, int led_encender, int act_barra ){ |
anna_dot | 0:eb102efc70ff | 166 | px.Set(barra[led_apagar], 0x0); //apagamos el último led |
anna_dot | 0:eb102efc70ff | 167 | |
anna_dot | 0:eb102efc70ff | 168 | for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array |
anna_dot | 0:eb102efc70ff | 169 | barra[i]=barra[i]+act_barra; |
anna_dot | 0:eb102efc70ff | 170 | } |
anna_dot | 0:eb102efc70ff | 171 | |
anna_dot | 0:eb102efc70ff | 172 | px.Set(barra[led_encender], 0x2f0000); //encendemos el siguiente led a la izquierda |
anna_dot | 0:eb102efc70ff | 173 | px.SetI(barra[led_encender]%WS2812_BUF, 0xff); |
anna_dot | 0:eb102efc70ff | 174 | } |
anna_dot | 0:eb102efc70ff | 175 | |
anna_dot | 0:eb102efc70ff | 176 | void control_accel(){ |
anna_dot | 0:eb102efc70ff | 177 | float acY= accel.getAccY(); |
anna_dot | 0:eb102efc70ff | 178 | if(acY>0.3){ |
anna_dot | 0:eb102efc70ff | 179 | if(barra[NUM_LEDS_BARRA-1]<15){ |
anna_dot | 0:eb102efc70ff | 180 | px.Set(barra[0], 0x0); //apagamos el primer led |
anna_dot | 0:eb102efc70ff | 181 | //px.SetI(barra[0]%WS2812_BUF, 0x0); |
anna_dot | 0:eb102efc70ff | 182 | |
anna_dot | 0:eb102efc70ff | 183 | for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array |
anna_dot | 0:eb102efc70ff | 184 | barra[i]=barra[i]+1; |
anna_dot | 0:eb102efc70ff | 185 | } |
anna_dot | 0:eb102efc70ff | 186 | |
anna_dot | 0:eb102efc70ff | 187 | px.Set(barra[NUM_LEDS_BARRA-1], 0x2f0000); //encendemos el siguiente led a la derecha |
anna_dot | 0:eb102efc70ff | 188 | px.SetI(barra[NUM_LEDS_BARRA-1]%WS2812_BUF, 0xff); |
anna_dot | 0:eb102efc70ff | 189 | } |
anna_dot | 0:eb102efc70ff | 190 | |
anna_dot | 0:eb102efc70ff | 191 | } |
anna_dot | 0:eb102efc70ff | 192 | else{ |
anna_dot | 0:eb102efc70ff | 193 | if(acY<-0.3){ //if left |
anna_dot | 0:eb102efc70ff | 194 | if(barra[0]>0){ |
anna_dot | 0:eb102efc70ff | 195 | px.Set(barra[NUM_LEDS_BARRA-1], 0x0); //apagamos el último led |
anna_dot | 0:eb102efc70ff | 196 | //px.SetI(barra[NUM_LEDS_BARRA-1]%WS2812_BUF, 0x0); |
anna_dot | 0:eb102efc70ff | 197 | |
anna_dot | 0:eb102efc70ff | 198 | for(int i=0; i<NUM_LEDS_BARRA; i++){ //actualizamos valor del array |
anna_dot | 0:eb102efc70ff | 199 | barra[i]=barra[i]-1; |
anna_dot | 0:eb102efc70ff | 200 | } |
anna_dot | 0:eb102efc70ff | 201 | |
anna_dot | 0:eb102efc70ff | 202 | px.Set(barra[0], 0x2f0000); //encendemos el siguiente led a la izquierda |
anna_dot | 0:eb102efc70ff | 203 | px.SetI(barra[0]%WS2812_BUF, 0xff); |
anna_dot | 0:eb102efc70ff | 204 | } |
anna_dot | 0:eb102efc70ff | 205 | } |
anna_dot | 0:eb102efc70ff | 206 | } |
anna_dot | 0:eb102efc70ff | 207 | } |
anna_dot | 0:eb102efc70ff | 208 | |
anna_dot | 0:eb102efc70ff | 209 |