Parcial Junio Sistemas Embebidos Juan Eguidazu

Dependencies:   mbed tsi_sensor MMA8451Q

Files at this revision

API Documentation at this revision

Comitter:
juaneguidazu
Date:
Mon Jun 22 03:52:08 2020 +0000
Commit message:
Parcial Junio; Sistemas Embebidos; Juan Eguidazu;

Changed in this revision

MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
tsi_sensor.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Mon Jun 22 03:52:08 2020 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
--- /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);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Jun 22 03:52:08 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsi_sensor.lib	Mon Jun 22 03:52:08 2020 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Kojto/code/tsi_sensor/#976904559b5c