mit dem hani pröblet, han ganz en eifache regler gschribe. s probelm isch aber das er amigs nid id mitti vom feld fahrt

Dependencies:   mbed

Fork of Roboshark_V6 by Roboshark

Regler.cpp

Committer:
ahlervin
Date:
2018-05-03
Revision:
6:7bbcdd07bc2d
Child:
7:862d80e0ea2d

File content as of revision 6:7bbcdd07bc2d:

/*Roboshark V5
Regler.cpp
Erstellt: V.Ahlers
geändert: V.Ahlers
V.5.18
Regler zum geradeaus fahren
*/

#include <cmath>
#include "Regler.h"


using namespace std;

const float Regler :: PERIOD = 0.2f;
const int Regler :: FIXSPEED = 50;
float faktor = 0.02;



Regler::Regler(AnalogIn& IrRight, AnalogIn& IrLeft):
IrRight (IrRight), IrLeft (IrLeft) {
        
        SpeedR = 0;
        SpeedL = 0;
        ticker.attach(callback(this, &Regler::setSpeed), PERIOD);
    }
     
Regler::~Regler(){
    ticker.detach();
    }
    
    void Regler::setSpeed (){
        measR2 = IrRight.read();            // Converts and read the analog input value (value from 0.0 to 1.0)
        measR2 = measR2* 1000;              // Change the value to be in the 0 to 1000 range
        measL2 = IrLeft.read();             // Converts and read the analog input value (value from 0.0 to 1.0)
        measL2 = measL2 * 1000;             // Change the value to be in the 0 to 1000 range
        
        if((measR2 < 100)) {
            if(measL2 > 280){
                div3 = measL2 - 280;
                kor3 = faktor*div3;
                div2 = 0;
                div1 = 0;
                div4 = 0;
                SpeedR = FIXSPEED;
                SpeedL = FIXSPEED + kor3;
            } else if (measR2 < 280){
                div4 = 280 - measR2;
                kor4 = faktor*div4;
                div2 = 0;
                div1 = 0;
                div3 = 0;
                SpeedR = FIXSPEED + kor4;
                SpeedL = FIXSPEED;
                }
    
        if ((measR2 > measL2) && (meas2R > 100)) {              //IR Sensor werte werden verglichen und die Korrektur wird berechnet
            div1 = measR2 - measL2;
            kor1 = faktor*div1;
            div2 = 0;
            SpeedR = FIXSPEED;
            SpeedL = FIXSPEED + kor1;
        } else if ((measR2 < measL2)&& meas2R > 100) {
            div2 = measL2 - measR2;
            kor2 = 0.02f*div2;
            div1 = 0;
            SpeedR = FIXSPEED + kor2;
            SpeedL = FIXSPEED;
        } else { 
            SpeedR = FIXSPEED;
            SpeedL = FIXSPEED;
            }
//printf("Div1 = %f\n",div1);
//printf("Div2 = %f\n",div2);  
//printf("SpeedR1 = %f\n",SpeedR);
//printf("SpeedL1 = %f\n",SpeedL);        
}
float Regler :: get_SpeedR (){
        SpeedR = SpeedR;
        //printf("SpeedR2 = %f\n",SpeedR);
        return SpeedR;
    }
float Regler :: get_SpeedL (){
        SpeedL = SpeedL;
        //printf("SpeedL2 = %f\n",SpeedL);  
        return SpeedL;
    }