Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed tsi_sensor MMA8451Q
main.cpp
- Committer:
- juaneguidazu
- Date:
- 2020-06-22
- Revision:
- 0:25fa9c2b3c2a
File content as of revision 0:25fa9c2b3c2a:
#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);
}