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:
4:ed779bcb8ce6
Parent:
3:740ab0a19e1d
Child:
5:c0d6d490dd5b

File content as of revision 4:ed779bcb8ce6:

/********************************************************************************** 
* 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.660
#define UDiff 0.332

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

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

void vgetSensData(struct SensData *sSensData){
    /*Auslesen der Daten und Speichern in Struktur*/
    sSensData->wSensX=oXData.read_u16();
    sSensData->wSensY=oYData.read_u16();
    sSensData->wSensZ=oZData.read_u16();
    }
    
void vcalcData(struct SensData *sSensData, struct WinkelData *sWinkelData){
    /*Variablen*/
    double dGMessX;
    double dGMessY;
    double dGMessZ;
    /* Umrechnen der Messdaten in Spannungen */
    dGMessX = (sSensData->wSensX/65535.0)*3.3;
    dGMessX = (int)(dGMessX*1000)/1000.0; // Doublewerte auf 2 Nachkommastellen begrenzen!
    dGMessX = abs(dGMessX-URef)/UDiff;
    dGMessX = (int)(dGMessX*1000)/1000.0;
    if(dGMessX<=1 || dGMessX>=-1){
    sWinkelData->i16WinkelX = asin(dGMessX)*(180/pi);
    }
    
    dGMessY = (sSensData->wSensY/65535.0)*3.3;
    dGMessY = (int)(dGMessY*1000)/1000.0; // Doublewerte auf 2 Nachkommastellen begrenzen!
    dGMessY = abs(dGMessY-URef)/UDiff;
    dGMessY = (int)(dGMessY*1000)/1000.0;
    if(dGMessY<=1 || dGMessY>=-1){
    sWinkelData->i16WinkelY = asin(dGMessY)*(180/pi);
    }
    
    /* Umrechnen der Spannungen in g-Kräfte*/
    /* Umrechnen der g-Kräfte in Winkel*/
    }