Präsentation

Dependencies:   mbed

main.cpp

Committer:
drummer
Date:
2015-08-28
Revision:
1:50fceb76f482
Parent:
0:e939a25fbcad

File content as of revision 1:50fceb76f482:

#include "mbed.h"

//Zustände Lampen
#define VORNE_AUS 0
#define VORNE_LEUCHTEN 1
#define VORNE_BLINKEN 2
#define VORNE_BLINKENSCHNELL 3
#define HINTEN_AUS 0
#define HINTEN_LEUCHTEN 1
#define HINTEN_BLINKEN 2
#define ZUSTAND_MAX_VORNE 4
#define ZUSTAND_MAX_HINTEN 3


PwmOut InN(D3);
Timer timer1;
AnalogIn SpannungHallSensor(A0);
AnalogIn SpannungVorKabel(A3);
AnalogIn SpannungNachKabel(A4);

Serial pc(SERIAL_TX, SERIAL_RX); // PINS EINSTELLEN!


DigitalIn BremsTaster(PC_0);

DigitalOut LampeVorne(PA_4);    //Scheinwerfer
DigitalOut LampeHinten(PA_5);

/*
DigitalOut EnableUSB(PB_12);


AnalogIn SpannungBatterie(PB_0);
AnalogIn SpannungNachPMOS(PB_2);


Serial Bluetooth(SERIAL_TX, SERIAL_RX);



*/

const float Kabel_Widerstand = 0.32;

const int PERIODEN_DAUER = 20000;

const float MAX_LADUNG = 5800;
const float MAX_ABFLUSS = 5000;


int time1;
float vol_vorher, akkustand, strom, akku_abfluss;
float vol_nachher;


void SpannungVorher(){
    vol_vorher = 0;
    
    for (int i = 0; i < 300; i++) {
        vol_vorher += SpannungVorKabel.read() * 3.3 * 6;
    }
    vol_vorher /= 300;
}

void SpannungNachher(){
    vol_nachher = 0;
    
    for (int i = 0; i < 300; i++) {
        vol_nachher += SpannungNachKabel.read() * 3.3 * 6;
    }
    vol_nachher /= 300;
}

       
float HallSensorWert(){
    float messung;
    messung = SpannungHallSensor.read() - 0.27; // read adc and rearange the voltage_value,because its 0.27 when the throttle is off
    
    if(messung < 0){          // meas0 isnt allowed to be <0 because its sets the pulsewidht of the pwm
        messung = 0;
    }
    
    messung *= 2;  // creates values between 0 and 1
    
    if(messung > 1){      // meas0 isnt allowed to be >1 because its sets the pulsewidth of the pwm 
        messung = 1;
    }
    
    return messung;
}

int BremsTasterWert(){
    int TasterWert;  
    TasterWert = BremsTaster.read(); // read breaksensor value(1/0)
    return TasterWert; // return value
}



int ZustandVorne = 0;
int ZustandHinten = 0;

void LichtEinstellenVorne(int ZustandNeu) {
    while (ZustandVorne != ZustandNeu) {
        LampeVorne = 1;
        wait_ms(50);
        LampeVorne = 0;
        ZustandVorne++;
        if (ZustandVorne == ZUSTAND_MAX_VORNE) ZustandVorne = 0;
    }
}
    
void LichtEinstellenHinten(int ZustandNeu) {
    while (ZustandHinten != ZustandNeu) {
        LampeHinten = 1;
        wait_ms(50);
        LampeHinten = 0;
        ZustandHinten++;
        if (ZustandHinten == ZUSTAND_MAX_HINTEN) ZustandHinten = 0;
    }
}

float HallSensorWertM = 0;

void MotorInit() {
    InN.period_ms(PERIODEN_DAUER);
    InN.pulsewidth_us(0);
}

void GeschwindigkeitSetzen(){    
        HallSensorWertM = HallSensorWert();

        InN.pulsewidth_us(PERIODEN_DAUER*HallSensorWertM);
}

    
float Ladung_Abfluss(int time, float vol_vorher,float vol_nachher){
    float ladung;
    strom = (vol_vorher - vol_nachher) / (Kabel_Widerstand);
    ladung = strom*time;
    akku_abfluss = akku_abfluss + ladung;
    return akku_abfluss;
    
}
    
void MessungInit() {
    time1 = 0;
    vol_vorher = 0, akkustand = 0, akku_abfluss = 0;
    vol_nachher = 0;
}

void MessungStarten() {
        timer1.start();
        SpannungVorher();
        SpannungNachher();
}

void MessungStoppen() {
    time1 = timer1.read_us();
    timer1.stop();
    timer1.reset();
    akkustand = MAX_LADUNG - Ladung_Abfluss(time1, vol_vorher, vol_nachher);
    pc.printf("Spannung_Batterie=%f, Spannung_nachher=%f, Strom=%f, Akkustand=%f --- \n",vol_vorher,vol_nachher, strom, akkustand);
}

    

int main() {
    
    MotorInit();
    MessungInit();

    while(1) {

        MessungStarten();
        
        if (vol_vorher > 13.2) {
            GeschwindigkeitSetzen();
        }
        
        MessungStoppen();
        
    }
}