Colour sensors calibrated

Dependencies:   mbed-rtos mbed Servo QEI

Fork of ICRSEurobot13 by Thomas Branch

Files at this revision

API Documentation at this revision

Comitter:
twighk
Date:
Fri Mar 29 11:35:34 2013 +0000
Child:
1:8119211eae14
Commit message:
Main motors and motor encoders

Changed in this revision

Actuators/MainMotor/MainMotor.h Show annotated file Show diff for this revision Revisions of this file
Actuators/Servo/Servo.h Show annotated file Show diff for this revision Revisions of this file
Sensors/Encoder/Encoder.h Show annotated file Show diff for this revision Revisions of this file
Sensors/Encoder/QEI.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Actuators/MainMotor/MainMotor.h	Fri Mar 29 11:35:34 2013 +0000
@@ -0,0 +1,29 @@
+
+// Eurobot13 MainMotor.h
+
+#include "mbed.h"
+
+class MainMotor{
+    private:
+    PwmOut PWM1;
+    PwmOut PWM2;
+    
+    public:
+    MainMotor(PinName pin1, PinName pin2) : PWM1(pin1), PWM2(pin2){
+    }
+    
+    void operator()(float in){
+        power(in);
+    }
+    
+    void power(float power){
+        if( power > 0 ){
+            PWM1 = power;
+            PWM2 = 0;
+        } else {
+            PWM1 = 0;
+            PWM2 = -power;    
+        }
+    }
+
+};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Actuators/Servo/Servo.h	Fri Mar 29 11:35:34 2013 +0000
@@ -0,0 +1,30 @@
+
+// Eurobot13 Servo.h
+
+#include "mbed.h"
+
+class Servo{
+    private:
+    PwmOut PWM;
+    
+    public:
+    Servo(PinName pin1) : PWM(pin1){
+    }
+    
+    void operator()(float in){
+        PWM = in;
+    }
+    
+    void clockwise() { // full lock clockwise
+        PWM = .135;
+    }
+    
+    void anticlockwise() { // full lock anticlockwise
+        PWM = .025;
+    }
+    
+    void relax() { // servo applies no force
+        PWM = 0;
+    }
+
+};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sensors/Encoder/Encoder.h	Fri Mar 29 11:35:34 2013 +0000
@@ -0,0 +1,29 @@
+
+// Eurobot13 Encoder.cpp
+
+#include "QEI.h"
+#include "mbed.h"
+
+class Encoder{
+private:
+    DigitalIn green, yellow;
+    QEI wheel;
+    
+public:
+    Encoder(PinName pGreen, PinName pYellow)
+        : green(pGreen)
+        , yellow(pYellow)
+        , wheel(pGreen,pYellow, NC, 624)
+        {
+    green.mode(PullUp);
+    yellow.mode(PullUp);
+    }
+    
+    int getPoint(void){
+        return wheel.getPulses();
+    }
+    
+    void reset (void){
+        return wheel.reset();
+    }
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sensors/Encoder/QEI.lib	Fri Mar 29 11:35:34 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/aberk/code/QEI/#5c2ad81551aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 29 11:35:34 2013 +0000
@@ -0,0 +1,127 @@
+
+// Eurobot13 main.cpp
+
+#include "mbed.h"
+
+#include "Actuators/MainMotor/MainMotor.h"
+#include "Sensors/Encoder/Encoder.h"
+#include "Actuators/Servo/Servo.h"
+
+PwmOut Led(LED1);
+
+void motortest();
+void encodertest();
+void motorencodetest();
+void motorencodetestline();
+void motorsandservostest();
+
+int main() {
+    //motortest();
+    //encodertest();
+    //motorencodetest();
+    motorencodetestline();
+    //motorsandservostest();
+}
+
+void motorsandservostest(){
+    Encoder Eleft(p27, p28), Eright(p30, p29);
+    MainMotor mleft(p24,p23), mright(p21,p22);
+    Servo sTop(p25), sBottom(p26);
+    Serial pc(USBTX, USBRX);
+    const float speed = 0.0;
+    const float dspeed = 0.0;
+    
+    Timer servoTimer;
+    mleft(speed); mright(speed);
+    servoTimer.start();
+    while (true){
+        pc.printf("Position is: %i \t %i \n\r", Eleft.getPoint(), Eright.getPoint());
+        if (Eleft.getPoint() < Eright.getPoint()){
+            mleft(speed);
+            mright(speed - dspeed);
+        } else {
+            mright(speed);
+            mleft(speed - dspeed);
+        }
+        if (servoTimer.read() < 1){
+            sTop.clockwise();
+        } else if (servoTimer.read() < 4) {
+            sTop.relax();
+        } else if (servoTimer.read() < 5) {
+            sBottom.anticlockwise();
+            //Led=1;
+        } else if (servoTimer.read() < 6) {
+            sBottom.clockwise();
+            //Led=0;
+        } else if (servoTimer.read() < 7) {
+            sBottom.relax();
+        }else {
+            sTop.anticlockwise();
+        }
+        if (servoTimer.read() >= 9) servoTimer.reset();
+    }
+}
+
+void motorencodetestline(){
+    Encoder Eleft(p27, p28), Eright(p30, p29);
+    MainMotor mleft(p24,p23), mright(p21,p22);
+    Serial pc(USBTX, USBRX);
+    const float speed = 0.2;
+    const float dspeed = 0.1;
+
+    mleft(speed); mright(speed);
+    while (true){
+    //left 27 cm = 113 -> 0.239 cm/pulse
+    //right 27 cm = 72 -> 0.375 cm/pulse
+        pc.printf("Position is: %i \t %i \n\r", (int)(Eleft.getPoint()*0.239), (int)(Eright.getPoint()*0.375));
+        if (Eleft.getPoint()*0.239 < Eright.getPoint()*0.375){
+            mright(speed - dspeed);
+        } else {
+            mright(speed + dspeed);
+        }
+    }
+
+}
+
+void motorencodetest(){
+    Encoder Eleft(p28, p27), Eright(p29, p30);
+    MainMotor mleft(p23,p24), mright(p22,p21);
+    Serial pc(USBTX, USBRX);
+    
+    const float speed = -0.3;
+    const int enc = -38;
+    while(true){
+        mleft(speed); mright(0);
+        while(Eleft.getPoint()>enc){
+            pc.printf("Position is: %i \t %i \n\r", Eleft.getPoint(), Eright.getPoint());
+        }
+        Eleft.reset(); Eright.reset();
+        mleft(0); mright(speed);
+        while(Eright.getPoint()>enc){
+            pc.printf("Position is: %i \t %i \n\r", Eleft.getPoint(), Eright.getPoint());
+        }
+        Eleft.reset(); Eright.reset();
+    }
+}
+
+void encodertest(){
+    Encoder E1(p28, p27);
+    Encoder E2(p29, p30);
+    Serial pc(USBTX, USBRX);
+    while(1){
+        wait(0.1);
+        pc.printf("Position is: %i \t %i \n\r", E1.getPoint(), E2.getPoint());
+    }
+
+}
+void motortest(){
+    MainMotor mright(p22,p21), mleft(p23,p24);
+    while(1) {
+        wait(1);
+        mleft(0.8); mright(0.8);
+        wait(1);
+        mleft(-0.2); mright(0.2);
+        wait(1);
+        mleft(0); mright(0);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Mar 29 11:35:34 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/5e5da4a5990b
\ No newline at end of file