programma commando motori

Dependencies:   mbed HCSR04 mbed-rtos

main.cpp

Committer:
Wonderjack996
Date:
2017-05-23
Revision:
1:009a67d6875f
Parent:
0:637e2ec8d164
Child:
2:7df0fc7d8d3c

File content as of revision 1:009a67d6875f:

#include "mbed.h"

/*I pin utilizzati per TX e RX sono pin morfo, a livello hardware collegare il pin TX dell HC05 al PA_12 e quello RX a PA_11 ( a livello harware vanno invertiti )*/
#define TX PA_11
#define RX PA_12

#define PWMB PC_7  //D9
#define DIRB D8    //D8

#define PWMA PB_4  //D5
#define DIRA D4    //D4

PwmOut motorBpower(PWMB);
DigitalOut motorBdirection(DIRB);

PwmOut motorApower(PWMA);
DigitalOut motorAdirection(DIRA);

Serial pc(USBTX, USBRX); //istanzio oggetto per utilizzo monitor seriale

Serial device(TX, RX); //oggetto per gestione seriale bluethoot

void avanti();
void indietro();
void destra();
void sinistra();
void fermo();

int main() {
    
    unsigned char rx;
    
    motorBpower.period_ms(10);
    motorApower.period_ms(10);
    
    while(true){
        if( device.readable() ) { //funzione simile alla Serial.available() di arduino, solo se il monitor e` attivo permette di utilizzarlo
            rx = device.getc(); //funzione simile alla Serial.read() di arduino, legge il carattere dal seriale del bluethoot
            pc.printf("recived: %c \r\n",rx); //stampa a video
            switch(rx){ //in base alla lettera che riceve sa cosa deve fare
                case 'a':
                    avanti();
                    break;
                case 'b':
                    indietro();
                    break;
                case 'c':
                    destra();
                    break;
                case 'd':
                    sinistra();
                    break;
                case 'e':
                    fermo();
                    break;
            }
        }
    }
    
}

void avanti()
{
    motorBdirection = 1; 
    motorAdirection = 0;
    motorBpower.pulsewidth(0.01); // 100%
    motorApower.pulsewidth(0.01); // 100%
}

void indietro()
{
    motorBdirection = 0; 
    motorAdirection = 1;
    motorBpower.pulsewidth(0.01); // 100%
    motorApower.pulsewidth(0.01); // 100%
}

void destra()
{
    motorBdirection = 0; 
    motorAdirection = 0;
    motorBpower.pulsewidth(0.01); // 100%
    motorApower.pulsewidth(0.007); // 70%
}

void sinistra()
{
    motorBdirection = 1; 
    motorAdirection = 1;
    motorBpower.pulsewidth(0.007); // 100%
    motorApower.pulsewidth(0.01); // 100%
}

void fermo()
{
    motorBpower.pulsewidth(0); // fermo
    motorApower.pulsewidth(0); // fermo
}