Programm zur Darstellung der Lage eines Objektes im Raum mit Hilfe eines Beschleunigungssensores, 4 LED's und einem LCD-Display.

Dependencies:   TextLCD mbed

Sensor.cpp

Committer:
Schreeker
Date:
2016-05-24
Revision:
5:c0d6d490dd5b
Parent:
4:ed779bcb8ce6
Child:
6:e57f9887ad02

File content as of revision 5:c0d6d490dd5b:

/********************************************************************************** 
* File name:    Sensor.h
* Zweck:        Beinhaltet alle Funktionen zum Auslesen des Beschleunigungssensors
                bezüglich der X-, Y-, Z-Koordinaten
* Author:       Simon Rutzen, Nils Kemmer
* Changes:      keine
***********************************************************************************/

/*define*/
#define pi 3.141
#define URef 1.6135

#define UDiff 0.3255

/* Referenzmessung bezogen auf die X-Achse*/
// X(-1g) = 1.288 V
// X(1g)  = 1.939 V
// X(0g)  = 1.6135 V
// U/1g   = 0.3255 V

/*Include*/
#include "Sensor.h"
#include "mbed.h"
#include "math.h"

/* Variabeln */
/*Struktur zum Speichern der von den A/D-Wandlern des µC ausgelesenen Messdaten*/
struct SensData stSensData;
/*Struktur zum Speichern der umgerechneten Messdaten von SensData*/
struct WinkelData stWinkelData;
    
/*AnalogIn*/
/*Konfiguriert die angegebenen Pins als analoge Eingaenge*/
AnalogIn oZData(PC_2);
AnalogIn oYData(PC_3);
AnalogIn oXData(PC_4);

void vgetSensData(struct SensData *stSensData){
    /* Variabeln */
    int i=0;                    // Laufvariable
    double XDataRead = 0.0;     // Speichervariabel für X Sampels           
    double YDataRead = 0.0;     // Speichervariabel für Y Sampels
    double ZDataRead = 0.0;     // Speichervariabel für Z Sampels
    
    /*Auslesen der Daten, Mittelung und Speichern in Struktur*/
    for(i=0; i<10000; i++){
    XDataRead += oXData.read_u16();
    //YDataRead += oYData.read_u16();
    //ZDataRead += oZData.read_u16();
    }
    stSensData->wSensX = XDataRead/10000;
    stSensData->wSensY = YDataRead/10000;
    stSensData->wSensZ = ZDataRead/10000;
    
    /* Rücksetzten der Speichervariabeln*/
    XDataRead = 0.0;
    YDataRead = 0.0;
    ZDataRead = 0.0;
    }
    
void vcalcData(struct SensData *stSensData, struct WinkelData *stWinkelData){
    /*Variablen*/
    double dGMessX;
    double dGMessY;
    double dGMessZ;
    /* Umrechnen der Messdaten in Spannungen */
    dGMessX = (stSensData->wSensX/65535.0)*3.3;  
    stWinkelData->i16WinkelY = dGMessX*1000;
    dGMessX = (int)(dGMessX*1000)/1000.0;
    dGMessX = abs(dGMessX-URef)/(UDiff);
    dGMessX = (int)(dGMessX*1000)/1000.0;
    if(dGMessX<=1 || dGMessX>=-1){
    stWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
        }
    /*    
    dGMessY = (stSensData->wSensY/65535.0)*3.3;
    dGMessY = (int)(dGMessY*10000)/10000.0; 
    dGMessY = abs(dGMessY-URef)/UDiff;
    dGMessY = (int)(dGMessY*10000)/10000.0;
    if(dGMessY<=1 || dGMessY>=-1){
    stWinkelData->i16WinkelY = asin(dGMessY)*(180/pi); 
        } */
    }