Programa de MIP

Dependencies:   bloques ball mbed WS2812 PixelArray tsi_sensor TSI bloque MMA8451Q

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?

UserRevisionLine numberNew 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