Centro de Controle de Motores

Dependencies:   TextLCD mbed

moto_passo_v2.txt

Committer:
isabellemm
Date:
16 months ago
Revision:
4:3bc68a7b299d

File content as of revision 4:3bc68a7b299d:

/*******************************************
Motor de Passo
*******************************************/
#include "mbed.h"

Serial envia(PC_10, PC_11);
Serial pc(USBTX, USBRX);

// variáveis
int estado = 0;
float tempo;
char ligar = 'a';
char desligar = 'b';
char men_rec;

// motor de passo
DigitalOut EN_A(D2);
DigitalOut IN1_A(D5);
DigitalOut IN2_A(D4);
DigitalOut EN_B(A4);
DigitalOut IN1_B(A0);
DigitalOut IN2_B(A1);

// entradas
InterruptIn ena_all(D11);
InterruptIn enable(PB_6);
DigitalIn dir(D9);
AnalogIn POT(A5);

// debouncing
Timer debounce;


void muda_en(){
    if (debounce.read_ms()>200){
        estado=!estado;
    }
    debounce.reset();
}


void muda_all(){
    //men_rec = envia.getc();
    if (debounce.read_ms()>200){
        if (estado == 1 || men_rec == 'c'){ // ou
            estado = 0;
            envia.printf("%c", desligar);
        }
        else{
            estado = 1;
            envia.printf("%c", ligar);
        }
    }
    debounce.reset();
}

void queda(){
    debounce.reset();
}

void RX_interrupt(){
    while (envia.readable()){
        men_rec = envia.getc();
    }
}

int main(){    
    enable.rise(&muda_en);
    ena_all.rise(&muda_all);
    debounce.start();
    envia.baud(9600);
    envia.attach(&RX_interrupt, Serial::RxIrq);
    
    // configurações iniciais
    EN_A = 0; 
    EN_B = 0; 
    IN1_A = 0;
    IN2_A = 0;
    IN1_A = 0;
    IN1_B = 0;

    while(1) {
        //men_rec = envia.getc();
        
        if (estado == 1){
            if (POT.read()>0.1f){
                tempo = 0.005+(0.050*POT.read());
            
                //SENTIDO HORÁRIO     
                if (dir.read() == 0){
            
                    // passo 0
                    EN_A = 1;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 0;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(tempo);
                    
                    // passo 1
                    EN_A = 0;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 1;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(tempo);
           
                    // passo 2
                    EN_A = 1;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 0;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(tempo);
                    
                    // passo 3
                    EN_A = 0;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 1;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(tempo);
                }
                
                //SENTIDO ANTI-HORÁRIO
                else if (dir.read() == 1){ 
                
                    // passo 0
                    EN_A = 1;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 0;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(tempo);
                    
                    // passo 1 ("passo 3")
                    EN_A = 0;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 1;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(tempo);
                    
                    // passo 2
                    EN_A = 1;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 0;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(tempo);
                   
                    // passo 3 ("passo 1")
                    EN_A = 0;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 1;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(tempo);
                 }
            }
        }
        
        else{
            EN_A = 0;
            EN_B = 0;
            IN1_A = 0;
            IN2_A = 0;
            IN1_A = 0;
            IN1_B = 0;
        }
    }
}