DFFTeam
/
LineFollower_4
Smart car linefollower 1.0
Diff: main.cpp
- Revision:
- 0:9cabfa16c820
- Child:
- 1:dea1971b7c83
- Child:
- 2:b5a8e835fb14
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Nov 28 10:34:24 2016 +0000 @@ -0,0 +1,128 @@ +#include "mbed.h" +#include "Motor.h" + +#define N true +#define B false +#define NUMSENS 4 +#define SPEED 0.35 + +/*----------------------------------------------------------------------------// +Con velocità base di 0.3 + +//----------------------------------------------------------------------------*/ + + + +//----------------------------------------------------------------------------// +// Inizializzazione dei Pin // +//----------------------------------------------------------------------------// + +Motor MotS(D9, D10, D11); //pwm (E1), fwd (1A), rev (1B) motore sinistro +Motor MotD(D6, D7, D8); //pwm (E2), fwd (2A), rev (2B) motore destro +DigitalIn start(PC_13); +DigitalIn sensd[] = {D2, D3, D4, D5}; //array dei sensori digitali, da sinistra a destra +AnalogIn sensa[] = {A0, A1, A2, A3}; //array dei sensori analogici, da sinistra a destra + + +int LetturaSensore(void); +void Avanti(void); +void Destra(int curv); +void Sinistra(int curv); +void Inversione(void); + +Serial pc(USBTX, USBRX); + +//----------------------------------------------------------------------------// + +int stato = 0; + +int main() +{ + + while(start==1) {} + + while(1) { + stato = LetturaSensore(); + //pc.printf("stato %i\r\n", stato); + + // andare avanti + if(stato==6) { + Avanti(); + } + // Girare a sinistra + else if(stato==12||stato==14) { + Sinistra(0); + } + // Girare a destra + else if(stato==3||stato==7) { + Destra(0); + } + // Girare stretta a sinistra + else if(stato==8) { + Sinistra(1); + } + // Girare stretta a destra + else if(stato==1) { + Destra(1); + } + else if(stato==15) { + wait_ms(200); + if(stato==15){ + Inversione(); + } + } + wait_ms(150); + } +} + +//----------------------------------------------------------------------------// +// Funzioni // +//----------------------------------------------------------------------------// +void Avanti(){ + MotS.speed(SPEED); + MotD.speed(SPEED); +} +void Destra(int curv){ + if(curv == 0){ + MotS.speed(SPEED); + MotD.speed(SPEED-0.1); + }else if(curv == 1){ + MotS.speed(SPEED+0.1); + MotD.speed(SPEED-0.2); + } +} +void Sinistra(int curv){ + if(curv == 0){ + MotS.speed(SPEED-0.1); + MotD.speed(SPEED); + }else if(curv == 1){ + MotS.speed(SPEED-0.2); + MotD.speed(SPEED+0.1); + } +} +void Inversione(){ + MotS.speed(-0.35); + MotD.speed(0.35); +} + +//Funzione potenza utilizzata per la conversione da binario a decimale +int pow(int a, int ex){ + if(ex==0) + return 1; + if(ex==1) + return a; + + int c=a; + for(; ex!=1; ex=ex-1){ + a=a*c; + } + return a; +} + +//Lettura sensore e conversione dello stato da binario->decimale +int LetturaSensore(){ + int data = 0; + for(int i=NUMSENS-1; i>=0; i=i-1) + data = data + sensd[i]*pow(2,NUMSENS-1-i); + return data; +} \ No newline at end of file