DFFTeam
/
LineFollower_4
Smart car linefollower 1.0
main.cpp
- Committer:
- MDevolution
- Date:
- 2016-11-28
- Revision:
- 0:9cabfa16c820
- Child:
- 1:dea1971b7c83
- Child:
- 2:b5a8e835fb14
File content as of revision 0:9cabfa16c820:
#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; }