This is a program that reads from the accelerator and is very flexible regarding many things.
Dependencies: MMA8451Q mbed tsi_sensor
main.cpp
- Committer:
- my_username
- Date:
- 2014-07-12
- Revision:
- 0:f60be651a150
File content as of revision 0:f60be651a150:
#include "mbed.h" //libreria mbed standard #include "MMA8451Q.h" //libreria per usare l'acceleratore #include "tsi_sensor.h" //libreria per usare lo slider #define MMA8451_I2C 0x1d<<1 //indirizzo dell' acceleratore #define PIN_SLI_10 10 // pin che identificano... #define PIN_SLI_9 9 //...lo slider #define RANGE 2 //valore arbitrario usato per rilevare se lo slider viene toccato #define SENSITIVITY 0 //cambiando il valore di una delle 3 assi di una quantità maggiore della SENSITIVITY, avviene la scrittura sulla porta seriale #define AXES 3 //numero degli assi #define SHUT_DOWN 1 //valore del LED spento #define MIN_DENSITY 0.9 //minimo valore della densità per far restare acceso il LED //#define RED 1 //codice del colore rosso //#define GREEN 2 //codice del colore verde //#define BLUE 3 //codice del colore blu #define BLUE_MARGIN_Y -1/3.0 //margine dopo il quale il LED diventa blu ( si riferisce all'asse y ) #define RED_MARGIN_Z 0 //margine dopo il quale il LED diventa rosso ( si riferisce all'asse z ) PwmOut red(LED1); PwmOut green(LED2); PwmOut blue(LED3); float density = 0; void printAxes( float* xyz, float* xyzPrinted ); //scrive i valori xyz sulla porta seriale void ledChange( float* xyz ); //metodo che verifica in quale colore cambiare il LED void makeRed(); void makeGreen(); void makeBlue(); void densityChange( TSIAnalogSlider tsi ); //cambia la densità del LED dato l'input dallo slider int main(){ MMA8451Q acc( PTE25, PTE24, MMA8451_I2C ); //creazione dell'oggetto che controlla l'acceleratore TSIAnalogSlider tsi( PIN_SLI_9, PIN_SLI_10, RANGE ); //creazione dell'oggetto che controlla lo slider float* xyz = new float[AXES]; float* xyzPrinted = new float[AXES]; while(true){ acc.getAccAllAxis( xyz ); if( SENSITIVITY == 0 ) //il cambiamento di densità si svolge solo in questo caso per motivi pratici densityChange( tsi ); ledChange( xyz ); printAxes( xyz, xyzPrinted ); } } void printAxes( float* xyz, float* xyzPrinted ){//, int color ){ for(int i = 0; i < AXES; i += 1) if( abs(xyz[i] - xyzPrinted[i]) > SENSITIVITY ){ for( int i = 0; i < AXES; i += 1 ){ //printf("%c: %.2f ", (unsigned char)i+88, xyz[i]); printf("%.2f:", xyz[i]); //stampa valori dell'inclinazione delimitati con ":" xyzPrinted[i] = xyz[i]; // | } // V printf("\n" ); //in aggiunta stampa codice colore ( cancellato, era: printf("%d\r\n", color); ) fflush(stdout); } } void ledChange( float* xyz ){ //int color; if( xyz[1] < BLUE_MARGIN_Y ){ //xyz[1] è l'asse y makeBlue(); //color = BLUE; } else if( xyz[2] < RED_MARGIN_Z ){ //xyz[2] è l'asse z makeRed(); //color = RED; } else{ makeGreen(); //color = GREEN; } //return color; } void makeRed(){ red = density; green = SHUT_DOWN; blue = SHUT_DOWN; } void makeGreen(){ red = SHUT_DOWN; green = density; blue = SHUT_DOWN; } void makeBlue(){ red = SHUT_DOWN; green = SHUT_DOWN; blue = density; } void densityChange( TSIAnalogSlider tsi ){ if( tsi.readDistance() != 0 ) //se lo slider viene toccato if( (density = SHUT_DOWN - tsi.readPercentage()) > MIN_DENSITY ) //aggiorna la densità e controlla se il LED è "quasi spento" density = SHUT_DOWN; //spegne il LED completamente }