Controlador de motor-de-passo

Dependencies:   mbed

main.cpp

Committer:
diogonac
Date:
2021-04-25
Revision:
0:3674c9e06d98

File content as of revision 0:3674c9e06d98:

#include "mbed.h"

Serial pc (USBTX, USBRX);

AnalogIn eixo_X(A0);
AnalogIn eixo_Y(A1);
InterruptIn botao_in(PA_8);

BusOut motor_x(PA_9, PC_7, PB_6, PA_7);
BusOut motor_y(PA_11, PB_12, PB_11, PB_2);

double frequencia; //Hz
double velocidade = 0.2; //RPM
double tempo; //Segundos
int i;
int X;
int Y;
int botao_estado;
bool rotacao;


void SW()
{
    if(botao_estado == 0) {

        rotacao = !rotacao;
    }
}


int main()
{
    motor_x = 0x00;
    motor_y = 0x00;
    pc.baud(115200);
    rotacao = 0;
    botao_in.rise(&SW);
    frequencia = (2048*velocidade)/60;
    tempo = (1/frequencia);

    while(1) {

        X = eixo_X.read_u16();
        Y = eixo_Y.read_u16();
        botao_estado = botao_in.read();

        pc.printf("X=%4d, Y=%4d, botao_estado=%d, rotacao_estado=%d \r\n", X, Y, botao_estado, rotacao);

        if(31000 <= X &  X <= 35000) {

            motor_x = 0x00;
        } else {
            if (rotacao == 0) {
                for(i = 0; i < 4; i++) {

                    motor_x = 1 <<= i;
                    //motor_x = 1 << i+2;
                    wait(tempo);
                }
            }

            if(rotacao == 1) {
                for(i = 3; i > -1; i--) {
                    motor_x = 1 << i;
                    wait(tempo);
                }
            }
        }

//        if(31000 <= Y &  Y <= 35000) {
//
//            motor_y = 0x00;
//        }
//
//        else {
//            if (rotacao == 0) {
//                for(i = 0; i < 4; i++) {
//                    motor_y = 1 << i;
//                    wait(tempo);
//                }
//            }
//
//            if(rotacao == 1) {
//                for(i = 3; i > -1; i--) {
//                    motor_y = 1 << i;
//                    wait(tempo);
//                }
//            }
//        }
    }
}