code for basic movement of robot

Dependencies:   MODSERIAL QEI mbed

main.cpp

Committer:
Technical_Muffin
Date:
2015-10-23
Revision:
14:41d069cf4701
Parent:
13:6cea4a9fcf7a

File content as of revision 14:41d069cf4701:

#include "mbed.h"
#include "QEI.h"
#include "MODSERIAL.h"
//#include <"math.h">

QEI motor1(D13,D12,NC, 624);//encoder for motor 1
QEI motor2(D11,D10,NC, 624);//encoder for motor 2
MODSERIAL pc(USBTX,USBRX);
DigitalOut direction1(D7);//direction input for motor 1
DigitalOut direction2(D4);//direction input for motor 2
PwmOut speed1(D6);//speed input for motor 1
PwmOut speed2(D5);//speed input for motor 2
InterruptIn button1(PTC6);//test button for starting motor 1 using intteruptin function
InterruptIn button2(PTA4);//test button for starting motor 2 using interruptin function
DigitalOut led1(LED_RED);
DigitalOut led2(LED_BLUE);
DigitalOut led3(LED_GREEN);
bool motor1_dir=0;//set the direction of motor 1
bool motor2_dir = 0;//set the direction of motor 1

void changedirmotor1(){
        motor1_dir = !motor1_dir;//code for changing direction of motor 1
        }
void changedirmotor2(){
        motor2_dir = !motor2_dir;//code for changing direction of motor 2
        }        


int main()
{
   float cycle = 0.3;//define the speed of the motor
   bool motor1_on = 1;//set the on variable of motor 1
   
   bool motor2_on =1;//set the on variable of motor 2
   int n1=1;//numeric condtions to determine if the speed needs to be increased
   int n2=1;
   bool CW =1;
   bool CCW = 0;
   button1.mode(PullDown);//setting the modes for the way the button signals are registered
   button2.mode(PullDown);

while(1){
       led3.write(0);
       led1.write(1);
       led2.write(1);
       pc.baud(115200);
       
       button1.fall(changedirmotor1);//replacement code for toggle function,  thus changing direction when pressed
       /*
        int diffa1 = -button1.read();//read out the button 1 signal and calculate if it is being pressed or released interrupt function might work better as toggle
        wait(0.3);//from this we can determine if the rotation direction needs to be reversed.
        int diffb1 = button1.read();
        int button_toggle1 = diffa1-diffb1;
        if(button_toggle1 == 1 && motor1_dir == CW){
                motor1_dir = CCW;
                }
        else if(button_toggle1 == 1 && motor1_dir == CCW){
                motor1_dir = CW;
                }       
       */
       if(button1.read() !=motor1_on){//check if button 1 is pressed
                  led3.write(1);
                  led1.write(0);
              while(n1 == 1){
                  speed1.write(cycle);//write speed only on first run through the loop
                  direction1.write(motor1_dir);//turn motor CCW or CW 
                  
                  n1=0;
                  }
                          }
            else if (button1.read() == motor1_on){//when button is released
                while(n1==0){//check if the first run was done
                    speed1.write(0);//if so set speed to 0 and reset the run counter
                    n1=1;
                    }
                }
                button2.fall(changedirmotor2);//replacement code for toggle function,  thus changing direction when pressed
 
       /*
       int diffa2 = button2.read();//read out the button 2 signal and calculate if it is being pressed or released
       wait(0.3);//from this we can determine if the rotation direction needs to be reversed.
       int diffb2 = button2.read();
       int button_toggle2 = diffa2-diffb2;
       if(button_toggle2 == 1 && motor2_dir == CW){
                motor2_dir = CCW;
                }
        else if(button_toggle2 == 1 && motor2_dir == CCW){
                motor2_dir = CW;
                }
    */
   
       if(button2.read()!=motor2_on){//check if button 2 is pressed
                  led3.write(1);
                  led2.write(0);
              while(n2 == 1){
                  speed2.write(cycle);//write speed only on first run through the loop
                  direction2.write(motor2_dir);//turn motor CCW or CW 
                  
                  n2=0;
                  }
                          }
            else if (button2.read() == motor2_on){//when button is released
                while(n2==0){//check if the first run was done
                    speed2.write(0);//if so set speed to 0 and reset the run counter
                    n2=1;
                    }
                }                
}
}