Parcial Junio Sistemas Embebidos Juan Eguidazu

Dependencies:   mbed tsi_sensor MMA8451Q

Revision:
0:25fa9c2b3c2a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 22 03:52:08 2020 +0000
@@ -0,0 +1,330 @@
+#include "mbed.h"
+#include "tsi_sensor.h"
+#include "MMA8451Q.h"
+/* This defines will be replaced by PinNames soon */
+#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+#define ELEC0 9
+#define ELEC1 10
+#elif defined (TARGET_KL05Z)
+#define ELEC0 9
+#define ELEC1 8
+#else
+#error TARGET NOT DEFINED
+#endif
+#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+PinName const SDA = PTE25;
+PinName const SCL = PTE24;
+#elif defined (TARGET_KL05Z)
+PinName const SDA = PTB4;
+PinName const SCL = PTB3;
+#elif defined (TARGET_K20D50M)
+PinName const SDA = PTB1;
+PinName const SCL = PTB0;
+#else
+#error TARGET NOT DEFINED
+#endif
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+
+DigitalOut rled(LED_RED);
+DigitalOut gled(LED_GREEN);
+DigitalOut bled(LED_BLUE);
+DigitalOut ledon(PTD4);
+AnalogIn tensionV(PTB0);
+DigitalIn tensionD(PTA12);
+// Definicion de patas
+TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
+Ticker pulsador;
+Ticker ledoon;
+Ticker ledoff;
+Ticker analogread;
+void TIMER(void);
+void LEDV(void);
+void LEDON(void);
+void MAQLEDON(void);
+void LEDOFF(void);
+void MAQLEDOFF(void);
+void R_LRC();
+void RECEPCION(void);
+void onCharReceived();
+void ANGIN(void);
+int casosledon=0;
+int tiempoledon=0;
+int estadoon=0;
+int casosledoff=0;
+int tiempoledoff=0;
+int estadooff=0;
+float j=0;
+bool hab=0;
+int t=0;
+int x, y, z, v, d;
+int bytenum=0;
+char buffer[3];
+char LRC=0;
+int phab=0;
+//Definimos que el puerto serie se llama pc
+Serial pc(USBTX, USBRX);
+//Variable donde se guarda lo leido
+char   c = '\0';
+//bit usado como flag para procesar datos
+bool newdata = false;   //Se pone en true cuando hay nuevos datos
+int main(void)
+{
+    //Ejecutar onCharReceived por cada entrada por puerto
+    pc.attach(&onCharReceived);
+    MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+    //printf("MMA8451 ID: %d\n", acc.getWhoAmI());
+    pulsador.attach(&TIMER,0.1);
+    ledoon.attach(&LEDON,0.1);
+    ledoff.attach(&LEDOFF,0.1);
+    analogread.attach(&ANGIN,0.2);
+    while (true) {
+        j=tsi.readPercentage();
+        x = int ((abs(acc.getAccX()))*100);
+        y = int ((abs(acc.getAccY()))*100);
+        z = int ((abs(acc.getAccZ()))*100);
+        if(j>0&&t==0) {
+            hab=!hab;
+            if(hab == 1) {
+                tiempoledon = 2;
+                casosledon = 0;
+                estadoon = 1;
+            }
+            t=3;
+        }
+        if(hab==1) {
+            MAQLEDON();
+            LEDV();
+            RECEPCION();
+
+            switch(phab) {
+                default:
+                    phab=0;
+                    break;
+                case 1:
+                    sprintf(buffer,"X%d",x);
+                    R_LRC();
+                    printf("\n\n $%s%X)\n\n",buffer,LRC);
+                    phab=0;
+                    break;
+                case 2:
+                    sprintf(buffer,"Y%d",y);
+                    R_LRC();
+                    printf("\n\n $%s%X)\n\n",buffer,LRC);
+                    phab=0;
+                    break;
+                case 3:
+                    sprintf(buffer,"Z%d",z);
+                    R_LRC();
+                    printf("\n\n $%s%X)\n\n",buffer,LRC);
+                    phab=0;
+                    break;
+                case 4:
+                    sprintf(buffer,"V%d",v);
+                    R_LRC();
+                    printf("\n\n $%s%X)\n\n",buffer,LRC);
+                    phab=0;
+                    break;
+                case 5:
+                    sprintf(buffer,"D%d",d);
+                    R_LRC();
+                    printf("\n\n $%s%X)\n\n",buffer,LRC);
+                    phab=0;
+                    break;
+            }
+        } else
+            MAQLEDOFF();
+        rled=1;
+        bled=1;
+        gled=1;
+    }
+}
+void TIMER(void)
+{
+    if(t==0) {
+        t=0;
+    } else {
+        t--;
+    }
+}
+void LEDV(void)
+{
+    if(v<=10&&v>0) {
+        rled=0;
+        bled=1;
+        gled=1;
+    } else if(v<=20&&v>10) {
+        rled=1;
+        bled=1;
+        gled=0;
+    } else if(v<=33&&v>20) {
+        rled=1;
+        bled=0;
+        gled=1;
+    }
+}
+void LEDON(void)
+{
+    if(tiempoledon<=0) {
+        tiempoledon=0;
+    } else {
+        tiempoledon--;
+    }
+}
+void MAQLEDON(void)
+{
+    switch(estadoon) {
+        case 0:
+            ledon = 0;
+            if(tiempoledon == 0) {
+                estadoon = 1;
+                tiempoledon = 2;
+            }
+            break;
+        case 1:
+            ledon=1;
+            if(tiempoledon==0) {
+                estadoon=0;
+                casosledon++;
+                if(casosledon < 3) {
+                    tiempoledon=2;
+                } else if(casosledon == 3) {
+                    tiempoledon = 15;
+                    casosledon = 0;
+                }
+                break;
+            }
+    }
+}
+void LEDOFF(void)
+{
+    if(tiempoledoff==0) {
+        tiempoledoff=0;
+    } else {
+        tiempoledoff--;
+    }
+}
+void MAQLEDOFF(void)
+{
+    switch(estadooff) {
+        case 0:
+            ledon=1;
+            casosledoff++;
+            if(tiempoledoff==0) {
+                estadooff=1;
+                tiempoledoff=10;
+                break;
+            } else {
+                break;
+            }
+        case 1:
+            ledon=0;
+            if(tiempoledoff==0) {
+                estadooff=0;
+                tiempoledoff=5;
+                break;
+            } else {
+                break;
+            }
+    }
+}
+void R_LRC()
+{
+    for (int b = 0; b < sizeof(buffer); b++) {
+        LRC ^= buffer[b];
+    }
+}
+//Callback cuando se detecta una entrada
+void onCharReceived()
+{
+    //Copiamos lo leido en c
+    c = pc.getc();
+    newdata = true;
+}
+void RECEPCION(void)
+{
+    if(newdata) {
+        switch(bytenum) {
+            case 0:
+                if(c=='$') {
+                    bytenum=1;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+            case 1:
+                if(c=='X') {
+                    bytenum=2;
+                    break;
+                } else if(c=='Y') {
+                    bytenum=3;
+                    break;
+                } else if(c=='Z') {
+                    bytenum=4;
+                    break;
+                } else if(c=='V') {
+                    bytenum=5;
+                    break;
+                } else if(c=='D') {
+                    bytenum=6;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+            case 2:
+                if(c==')') {
+                    phab=1;
+                    bytenum=0;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+            case 3:
+                if(c==')') {
+                    phab=2;
+                    bytenum=0;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+            case 4:
+                if(c==')') {
+                    phab=3;
+                    bytenum=0;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+            case 5:
+                if(c==')') {
+                    phab=4;
+                    bytenum=0;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+            case 6:
+                if(c==')') {
+                    if(tensionD==1)
+                        d=11;
+                    else
+                        d=10;
+                    phab=5;
+                    bytenum=0;
+                    break;
+                } else {
+                    bytenum=0;
+                    break;
+                }
+        }
+    }
+}
+void ANGIN(void)
+{
+    v = int ((tensionV.read()*3.3)*10);
+}