Roboshark / Mbed 2 deprecated Michu_Proeble_V6

Dependencies:   mbed

Fork of Roboshark_V6 by Roboshark

Regler.cpp

Committer:
ahlervin
Date:
2018-05-06
Revision:
9:bdbf4447b55e
Parent:
8:a7f1ee7840d0

File content as of revision 9:bdbf4447b55e:

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

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


using namespace std;

const float Regler :: PERIOD = 0.5f;
const int Regler :: FIXSPEED = 50;
float faktor = 0.1f;



Regler::Regler(AnalogIn& IrRight, AnalogIn& IrLeft, IRSensor& iRSensor):
IrRight (IrRight), IrLeft (IrLeft), iRSensor (iRSensor) {
        
        SpeedR = 0;
        SpeedL = 0;
        ticker.attach(callback(this, &Regler::setSpeed), PERIOD);
    }
     
Regler::~Regler(){
    ticker.detach();
    }
    
    void Regler::setSpeed (){
        measR2 = iRSensor.readR();            // Converts and read the analog input value 
        measL2 = iRSensor.readL(); 
        
        if(measR2 == measL2){                                                   //DAS ISCH MIN GAGAREGLER zum Pröble gsi
                    SpeedR = FIXSPEED;
                    SpeedL = FIXSPEED;
                }else if(measR2 < measL2 && measR2 < 300 && measL2 < 300){      //float style implementiert
                    SpeedR = FIXSPEED;
                    SpeedL = FIXSPEED*1.04;
                }else if(measR2 > measL2 && measR2 < 300 && measL2 < 300){
                    SpeedR = FIXSPEED*1.06;
                    SpeedL = FIXSPEED;
                }
                    
   /*     
        if((measR2 > 100) && (measL2 < 100)) {                //keine Wnad rechts
            if(measL2 > 40){
                div3 = measL2 - 40;
                kor3 = faktor*div3;
                div2 = 0;
                div1 = 0;
                div4 = 0;
                div5 = 0;
                div6 = 0;
                SpeedR = FIXSPEED;
                SpeedL = FIXSPEED + kor3;
            } else if (measL2 < 45){
                div4 = 45 - measR2;
                kor4 = faktor*div4;
                div2 = 0;
                div1 = 0;
                div3 = 0;
                div5 = 0;
                div6 = 0;
                SpeedR = FIXSPEED;
                SpeedL = FIXSPEED + kor4;
                }else { 
            SpeedR = FIXSPEED;
            SpeedL = FIXSPEED;
            }
        }
        if((measL2 > 100) &&(measR2 < 100)) {                //keine Wnad links
            if(measR2 > 47){
                div5 = measR2 - 47;
                kor5 = faktor*div5;
                div2 = 0;
                div1 = 0;
                div4 = 0;
                div6 = 0;
                div3 = 0;
                SpeedR = FIXSPEED;
                SpeedL = FIXSPEED + kor5;
            } else if (measR2 < 52){
                div6 = 52 - measR2;
                kor6 = faktor*div4;
                div2 = 0;
                div1 = 0;
                div3 = 0;
                div4 = 0;
                div5 = 0;
                SpeedR = FIXSPEED + kor6;
                SpeedL = FIXSPEED;
            } else { 
            SpeedR = FIXSPEED;
            SpeedL = FIXSPEED;
            }
        }
        if ((measR2 < measL2)&& (measL2 - measR2 > 3)) {              //IR Sensor werte werden verglichen und die Korrektur wird berechnet
            div1 = measR2 - measL2;                             // An beiden seinen Wände
            kor1 = 0.1f*div1;
                div2 = 0;
                div3 = 0;
                div4 = 0;
                div5 = 0;
                div6 = 0;
            SpeedR = FIXSPEED;
            SpeedL = FIXSPEED + kor1;
        } else if ((measR2 > measL2) && (measR2 - measL2 >3)) {
            div2 = measL2 - measR2;
            kor2 = 0.1f*div2;
                div1 = 0;
                div3 = 0;
                div4 = 0;
                div5 = 0;
                div6 = 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 :: getSpeedR(){
        SpeedR = SpeedR;
        //printf("SpeedR2 = %f\n",SpeedR);
        return SpeedR;
    }
    float Regler :: getSpeedL(){
        SpeedL = SpeedL;
        //printf("SpeedL2 = %f\n",SpeedL);  
        return SpeedL;
    }