pabs

Dependencies:   mbed motor

Revision:
1:3ca91ad8e927
Parent:
0:51c12cc34baf
Child:
4:8249fab4d8d3
--- a/main.cpp	Thu Feb 01 12:59:21 2018 +0000
+++ b/main.cpp	Fri Dec 14 14:24:52 2018 +0000
@@ -1,24 +1,34 @@
 /*
-Simple Routine for Nucleo Board for ROCO103PP Buggy Motor COntrol and Microswitches
+Simple Routine for Nucleo Board for ROCO104 Buggy Motor Control and Microswitches
+Heavy edit from previous ROCO103PP code
+Motor Class can now be instansiated with all four pins needed to control the H Bridge
+with a member functions as follows
+
+Motor::Speed(float A, Float B) range -0.1 to +1.0 to give full reverse to full forward for A/B motors
+Motor::Stop()       STOP
+Motor::Fwd(float)   Forward but floating point number (range 0.0 to 1.0)
+Motor::Rev(float)   Reverse but floating point number (range 0.0 to 1.0)
+
 Plymouth University
 M.Simpson 31st October 2016
-Editted 03/02/2017
+Edited 03/02/2017
+Edited 06/12/2018
 */
 #include "mbed.h"
 #include "motor.h"
 #include "tunes.h"
+
 #define TIME_PERIOD 2             //Constant compiler Values here 2 equates to 2ms or 500Hz base Frequency
 #define DUTY 0.9                  //DUTY of 1.0=100%, 0.4=40% etc.,
 
 DigitalIn microswitch1(D4);       //Instance of the DigitalIn class called 'microswitch1'
 DigitalIn microswitch2(D3);       //Instance of the DigitalIn class called 'microswitch2'
 
-Motor motor_A(D7,D8);             //Instances of the Motor Class see motor.h anf motor.cpp
-Motor motor_B(D9,D10);            //They must be connected to these ports D7,D8 & D9,D10
+Motor Wheel(D13,D11,D9,D10);      //Instance of the Motor Class called 'Wheel' see motor.h and motor.cpp
 
 DigitalIn myButton(USER_BUTTON);  //USER_BUTTON is the Blue Button on the NUCLEO Board
 
-DigitalOut led(LED1);             //LED1 is the Green LED on the NUCLEO board
+DigitalOut led(LED3);             //LED1 is the Green LED on the NUCLEO board
                                   //N.B. The RED LED is the POWER Indicator
                                   //and the Multicoloured LED indicates status of the ST-LINK Programming cycle
 
@@ -26,121 +36,96 @@
                                   //This is Pseudo RS232 over USB the NUCLEO will appear as a COMx Port see device Manager on PC used
                                   //Use PuTTY to monitor check COMx and BAUD rate (115200)
 
-//The Following line is a Function Prototype
-int motor(float speedA, float speedB);    //call as motor('Speed of MotorA Left','Speed of MotorB Right')
-                                          //Where speed ranges from -1.0 to +1.0 inclusive rto give full reverse to full forward
-                                          //And of course 0.0 will stop the Motor
 
 //Variable 'duty' for programmer to use to vary speed as required set here to #define compiler constant see above
 float duty=DUTY;
 //
 int main ()
 {
-  pc.baud(115200);            //BAUD Rate to 115200
-  pc.printf("ROCO103PP Demonstration Robot Buggy Plymouth University 2016/17\n\r");
+  pc.baud(115200);               //BAUD Rate to 115200
+  pc.printf("ROCO104 Demonstration Robot Buggy Plymouth University 2018/19\n\r");
 
-  motor_A.Period_in_ms(TIME_PERIOD);    //Set frequency of the PWMs
-  motor_B.Period_in_ms(TIME_PERIOD);
+  Wheel.Period_in_ms(TIME_PERIOD);//Set frequency of the PWMs
+
   //
   //--------------------------- your strategy goes between the two dashed lines ---------------------------------------------   
   //
-  motor(0.0f,0.0f);                     // Ensure Motors are stopped - For the curious, this function is defined at the end of this file.
+    Wheel.Stop();
     
-  close_encounter(1);                     //tune to play Announce start!
-  //twinkle(1);                                        //see tunes.h for alternatives or make your own!
-  //jingle_bells(1);
-    while(myButton==1)
-    {                                       //Wait here for USER Button (Blue) on Nucleo Board (goes to zero when pressed)
-        led=0;                                //and flash green LED whilst waiting
+    close_encounter(1);     //tune to play Announce start!
+    //twinkle(1);           //see tunes.h for alternatives or make your own!
+    //jingle_bells(1);
+
+    while(myButton==0)
+    {                       //Wait here for USER Button (Blue) on Nucleo Board (goes to zero when pressed)
+        led=0;              //and flash green LED whilst waiting
         wait(0.1);
         led=1; 
         wait(0.1);
-    if(microswitch1==1)
-    {
-        pc.printf("Switch1 = %4.2fV\n\r",(float)microswitch1*3.3f);//printing value of microswitch1 in PuTTy window on PC
-                                                                  //NB this is a Digital Input and so returns a Boolean 1 or 0
-                                                                  //and so 'cast' the result into a 'float' type and multiply by 3.3!
-                                                                  // see the instruction doc on how to install putty.
-        tone1();
+        //Test Microswitches with two different tones see tunes.cpp tunes.h
+        if(microswitch1==1)
+        {
+            pc.printf("Switch1 = %4.2fV\n\r",(float)microswitch1*3.3f);
+                            //printing value of microswitch1 in PuTTy window on PC
+                            //NB this is a Digital Input and so returns a Boolean 1 or 0
+                            //and so 'cast' the result into a 'float' type and multiply by 3.3!
+                            //to indicate voltage applied to pin.
+                            //see the instruction doc on how to install putty.
+            tone1();
+        }
+        if(microswitch2==1)
+        {
+            pc.printf("Switch 2 pressed\n\r");  //Another example of how to print a message telling about the program workings.
+            tone2();
+        }
     }
-    //Test Microswitches with two different tones see tunes.cpp tunes.h
-    if(microswitch2==1)
-    {
-        pc.printf("Switch 2 pressed\n\r");  //Another example of how to print a message telling about the program workings.
-                tone2();
-    }
-  }
   
-  while(true)                 //Repeat the following forever
+    while(true)                             //Repeat the following forever NB always true!
     {
-      motor(duty,duty);     //Start Moving forward 
+        Wheel.Speed(duty,duty);             //Move Foward
     
-            while(microswitch1==0&&microswitch2==0){wait(0.05);} //short delay for debounce/noise
+        while(microswitch1==0&&microswitch2==0){wait(0.05);}// Loop here till a microswitch activates
+                                                            // NB short delay for debounce/noise(Electrical)
 
-      motor(0,0);         //STOP Motors
-      wait(0.1);          //Allow time for motors to stop
+        Wheel.Stop();                       //STOP
+        wait(0.1);                          //Allow time for motors to stop
       
-            if(microswitch1==1)   //Execute the following code if microswitch1 is activated
+            if(microswitch1==1)             //Execute the following code if microswitch1 is activated
             { 
-                motor(0.0f,0.0f);   //Stop the Motors
+                Wheel.Stop();               //STOP
                 tone1();
-                motor(-duty,-duty);
+                Wheel.Speed(-duty,-duty);   //Move Back
                 wait(2.0f);
-                motor(0,0);
-                wait(1.0f);
-                motor(-duty,duty);
-                wait(2.0f);
-                motor(0,0);
-                wait(1.0f);
+                Wheel.Stop();               //STOP
+                wait(0.1f);
+                Wheel.Speed(-duty,duty);    //SPIN anti-clockwise
+                wait(0.75f);
+                Wheel.Stop();               //STOP
+                wait(0.1f);
             }
 
-            if(microswitch2==1)   //Execute the following code if microswitch2 is activated
+            if(microswitch2==1)             //Execute the following code if microswitch2 is activated
             {
-                motor(0.0f,0.0f);   //Stop the Motors
+                Wheel.Stop();               //STOP
                 tone2();
-                motor(-duty,-duty);
+                Wheel.Speed(-duty,-duty);   //Move Back
                 wait(2.0f);
-                motor(0,0);
+                Wheel.Stop();               //STOP
                 wait(1.0f);
-                motor(duty,-duty);
-                wait(2.0f);
-                motor(0,0);
-                wait(1.0f);
+                Wheel.Speed(duty,-duty);    //SPIN clockwise
+                wait(0.75f);
+                Wheel.Stop();               //STOP
+                wait(0.1f);
             }
-  }
+    }// go back to start of while loop
 }
 //
 //----------------------------------------------------------------------------------------------
 //
-
-//Small function to control motors use as motor(1.0,-0.5) Motor A full speed forward Motor B half speed reversed
-int motor(float speedA, float speedB){
-   if(speedA>1.0f||speedA<-1.0f){ //CHECK speedA Value is in Range!
-      return -1;                  //return ERROR code -1=speedA Value out of range! EXIT Function
-   }
-   if(speedB>1.0f||speedA<-1.0f){ //CHECK speedB Value is in Range!
-      return -2;                  //return ERROR code -2=speedB Value out of range! EXIT Function
-   }
-   //If speed values have passed the checks above then the following code will be executed
-   if(speedA<0.0f){
-     motor_A.Rev(-speedA);
-   }
-   else{
-     motor_A.Fwd(speedA);
-   }
-   if(speedB<0.0f){
-     motor_B.Rev(-speedB);
-   }
-   else{
-     motor_B.Fwd(speedB);
-   }
-   return 0;                      //Return ERROR code Zero i.e. NO ERROR success!
-}
-
-/*      //Consider these lines of code to Accelerate the motors
+        //Consider these lines of code to Accelerate the motors
 //      for (float i=0.5f; i<=1.0f; i+=0.01f) //Accelerate  from 50% to 100%
 //      { 
-//        motor(i,i);
+//        Wheel.Speed(i,i);
 //        wait(0.1f);
 //      }
-*/
+