controller

Dependencies:   mbed sMotor

main.cpp

Committer:
IngmarLoohuis
Date:
2016-11-01
Revision:
0:8dc46da67c9f

File content as of revision 0:8dc46da67c9f:

//  28BYJ-48 stepper motor example
//  showing how to control a unipolar stepper motor by mbed digital output ports.
//  Tested on the Nucleo F103RB Board
//  Based on http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
//  Using the ULN2003A Driver.

#include "mbed.h"
Serial pc(USBTX,USBRX);
Ticker t0;
Ticker t7;

volatile bool fn0_go = false;
void fn0_activate(){ fn0_go = true; }; //Activates the go−flag
volatile bool fn7_go = false;
void fn7_activate(){ fn7_go = true; }; //Activates the go−flag  
 
BusOut motor_out(D0, D1, D2, D3);  // blue - pink - yellow - orange

int up = 1;
int down = 0;

int begin_step = 0; 
int teller = 0;

int motor3_direction = up; // direction

void motor3_position()
{
 switch(begin_step)
        { 
            case 0: motor_out = 0x1; break;  // 0001
            case 1: motor_out = 0x3; break;  // 0011
            case 2: motor_out = 0x2; break;  // 0010   
            case 3: motor_out = 0x6; break;  // 0110
            case 4: motor_out = 0x4; break;  // 0100
            case 5: motor_out = 0xC; break;  // 1100
            case 6: motor_out = 0x8; break;  // 1000
            case 7: motor_out = 0x9; break;  // 1001
            
            default: motor_out = 0x0; break; // 0000
        }
  
        if(motor3_direction==1)
        { 
        begin_step++;
         teller++;
        } 
         else
         { 
         begin_step--; 
          teller--;
        }
        if(begin_step>7)begin_step=0; 
        if(begin_step<0)begin_step=7; 
        pc.printf("steps = %i/n/r",teller);
        
       // if(teller<=-10000)//WANNEER DE FUNCTIE VAN RICHTING VERANDERD(MOET NOG STOPPEN WORDEN)
        //{
       //motor3_direction=1;
       // }
}

void motor3_clean()
{
 switch(begin_step)
        { 
            case 0: motor_out = 0x1; break;  // 0001
            case 1: motor_out = 0x3; break;  // 0011
            case 2: motor_out = 0x2; break;  // 0010   
            case 3: motor_out = 0x6; break;  // 0110
            case 4: motor_out = 0x4; break;  // 0100
            case 5: motor_out = 0xC; break;  // 1100
            case 6: motor_out = 0x8; break;  // 1000
            case 7: motor_out = 0x9; break;  // 1001
            
            default: motor_out = 0x0; break; // 0000
        }
  
        if(motor3_direction==1)
        { 
        begin_step++;
         teller++;
        } 
         else
         { 
         begin_step--; 
          teller--;
        }
        if(begin_step>7)begin_step=0; 
        if(begin_step<0)begin_step=7; 
        pc.printf("steps = %i/n/r",teller);
        
       if(teller<=-1000)//WANNEER DE FUNCTIE VAN RICHTING VERANDERD(MOET NOG STOPPEN WORDEN)
        {
       motor3_direction=up;
        }
        if(teller>=1000)//WANNEER DE FUNCTIE VAN RICHTING VERANDERD(MOET NOG STOPPEN WORDEN)
        {
       motor3_direction=down;
        }

}

int main()
{
 t0.attach(&fn0_activate, 0.0014f);
 //t7.attach(&fn7_activate, 0.0014f);
pc.baud(115200);
    while(1)
    {
         if(fn0_go)
        {
        fn0_go = false;
        motor3_position();
        }
        //if(fn7_go)
        //{
        //fn7_go = false;
        //motor3_clean();
        //}
    } 
}