4180 final project slave mbed code

Dependencies:   4DGL-uLCD-SE Motor mbed-rtos mbed

Files at this revision

API Documentation at this revision

Comitter:
ihansw
Date:
Fri Dec 09 15:31:23 2016 +0000
Commit message:
ece4180 final project slave mbed code

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
Motor.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-rtos.lib 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/4DGL-uLCD-SE.lib	Fri Dec 09 15:31:23 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Motor.lib	Fri Dec 09 15:31:23 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/simon/code/Motor/#f265e441bcd9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Dec 09 15:31:23 2016 +0000
@@ -0,0 +1,502 @@
+#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "Motor.h"
+#include "rtos.h"
+#include "stdio.h"
+ 
+//Motors
+Motor m_R(p21, p5, p6); // pwm, fwd, rev _ right wheel
+Motor m_L(p22, p7, p8); // pwm, fwd, rev _ left wheel
+
+//Serial communication between 2 mbeds
+Serial pc(USBTX, USBRX);
+Serial uart(p9, p10);
+
+// Timer and halleffect sensor interrupts
+Timer t;
+InterruptIn risingEdge_L(p24);
+InterruptIn risingEdge_R(p25);
+
+// uLCD for testing
+uLCD_4DGL uLCD(p28,p27,p29); 
+ 
+// LEDs for testing
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+
+//global variables for the halleffect sensors 
+volatile long int count_L;
+volatile long int count_nr_L; 
+
+volatile long int count_R;
+volatile long int count_nr_R; 
+
+volatile int count;
+ 
+volatile char ms[1]; 
+volatile char i ;
+
+/*
+volatile int speed_h = 6;
+volatile int speed_m = 5;
+volatile int speed_l = 4;
+*/
+
+
+void pulses_L() 
+{
+    if(myled2 == 1) 
+    {
+        myled2 = 0;
+    } 
+    else 
+    {
+        myled2 = 1;
+    }
+    count_L++;
+    count_nr_L++;
+}
+
+void pulses_R() 
+{
+    if(myled4 == 1) 
+    {
+        myled4 = 0;
+    } 
+    else 
+    {
+        myled4 = 1;
+    }
+    count_R++;
+    count_nr_R++;
+}
+ 
+int main() {
+    uart.baud(9600);
+    
+    double circumference = 6.5 * 3.1416; // 6 cm wheel diameter * pi 
+    long int temp_L;
+    long int temp_R;
+    double sA = 0.52;
+    double sB = 0.55;
+
+    double dist_L;
+    double dist_R;
+                
+    count = 0;
+    
+    //risingEdge.mode(Pullup);
+    risingEdge_L.rise(&pulses_L); 
+    risingEdge_L.fall(&pulses_L);
+    
+    risingEdge_R.rise(&pulses_R);
+    risingEdge_R.fall(&pulses_R);
+    
+    while(1) {
+        
+        myled2 = 1;
+        count++;
+        uLCD.locate(0,1);
+        uLCD.printf("it's Ready, %d",count);
+        
+        if(uart.readable()) 
+        {
+            uLCD.locate(5,2);
+            i = uart.getc();
+            uLCD.printf("%c\n", i);  
+                        
+/////////////////////////////////////// Go forward ////////////////////////////
+            if(i == 'f')
+            {
+                //speedA = speed_h;
+                
+                uLCD.locate(0,3);
+                uLCD.printf("Go Forward!");
+                
+                m_L.speed(sA);
+                m_R.speed(sB); 
+                
+                count_L = 0;
+                count_R = 0;
+                
+                while(!(uart.readable()))
+                {
+                    temp_L = count_L;
+                    temp_R = count_R;
+                    
+                    uLCD.locate(0,4);
+                    uLCD.printf("Count_L: %d", temp_L);
+            
+                    uLCD.locate(0,5);
+                    uLCD.printf("Count_R: %d", temp_R);
+            
+                    dist_L = (circumference/8)*((double)temp_L);
+                    dist_R = (circumference/8)*((double)temp_R);
+                    
+                    uLCD.locate(0,7);
+                    uLCD.printf("distance_L: %0.2f cm", dist_L);
+                    uLCD.locate(0,8);
+                    uLCD.printf("distance_R: %0.2f cm", dist_R);
+                }
+                
+                
+                
+            }
+/////////////////////////////////////// Go Backward  ////////////////////////////            
+            if(i == 'b')
+            {
+                //speedA = speed_h;
+                
+               // uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Go Backward!");
+                m_L.speed(-sA);
+                m_R.speed(-sB); 
+                
+            }
+/////////////////////////////////////// Turn left ////////////////////////////            
+            if(i == 'l')
+            {
+               // speedA = speed_m;
+                
+                uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Turn Left!");
+                m_L.speed(-0.65);
+                m_R.speed(0.67); 
+                
+                
+                count_L = 0;
+                count_R = 0;
+                
+                while(!(uart.readable()))
+                {
+                    if((count_L < 4) || (count_R <4))
+                    {
+                        /*
+                        temp_L = count_L;
+                        temp_R = count_R;
+                        
+                        uLCD.locate(0,4);
+                        uLCD.printf("Count_L: %d", temp_L);
+                
+                        uLCD.locate(0,5);
+                        uLCD.printf("Count_R: %d", temp_R);
+                
+                        dist_L = (circumference/8)*((double)temp_L);
+                        dist_R = (circumference/8)*((double)temp_R);
+                        
+                        uLCD.locate(0,7);
+                        uLCD.printf("distance_L: %0.2f cm", dist_L);
+                        uLCD.locate(0,8);
+                        uLCD.printf("distance_R: %0.2f cm", dist_R);
+                        */
+                    }
+                    else
+                    {
+                        m_L.speed(0);
+                        m_R.speed(0);   
+                        wait(0.5);
+                        //m_L.speed(sA);
+                        //m_R.speed(sB);
+                        //wait(4); 
+                    }
+                }
+            }
+            
+/////////////////////////////////////// Turn Right  ////////////////////////////      
+      
+            if(i == 'r')
+            {
+                //speedA = speed_m;
+                
+                uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Turn Right!");
+                m_L.speed(0.65);
+                m_R.speed(-0.67); 
+                
+                count_L = 0;
+                count_R = 0;
+                
+                while(!(uart.readable()))
+                {
+                    if((count_L < 5)||(count_R < 5))
+                    {
+                        /*
+                        temp_L = count_L;
+                        temp_R = count_R;
+                        
+                        uLCD.locate(0,4);
+                        uLCD.printf("Count_L: %d", temp_L);
+                
+                        uLCD.locate(0,5);
+                        uLCD.printf("Count_R: %d", temp_R);
+                
+                        dist_L = (circumference/8)*((double)temp_L);
+                        dist_R = (circumference/8)*((double)temp_R);
+                        
+                        uLCD.locate(0,7);
+                        uLCD.printf("distance_L: %0.2f cm", dist_L);
+                        uLCD.locate(0,8);
+                        uLCD.printf("distance_R: %0.2f cm", dist_R);
+                        */
+                    }
+                    else
+                    {
+                        m_L.speed(0);
+                        m_R.speed(0);   
+                        wait(0.5);
+                        //m_L.speed(sA);
+                        //m_R.speed(sB);
+                        //wait(4); 
+                    }
+                }
+            }
+            
+            
+            ////////////////////////////Tilt to the left //////////////////////////////
+            
+            if(i == 'a')
+            {
+                //speedB = speedB - 0.1;
+                
+                //uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Tilt to the left!");
+               
+                myled1 = 0;
+                myled2 = 1;
+                myled3 = 0;
+                myled4 = 0;
+                
+                m_L.speed(sA-0.04);
+                m_R.speed(sB+0.02); 
+                
+                count_L = 0;
+                count_R = 0;
+                
+                
+            }
+            
+            ///////////////////////////Tilt to the right///////////////////////////
+            
+            if(i == 'z')
+            {
+                
+                //speedB = speedB - 0.1;
+                
+                //uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Tilt to the right!");
+                m_L.speed(sA+0.00);
+                m_R.speed(sB-0.05); 
+                
+                myled1 = 0;
+                myled2 = 0;
+                myled3 = 0;
+                myled4 = 1;
+                
+                count_L = 0;
+                count_R = 0;
+                
+            }
+            
+            
+            ////////////////Tilt angle to the left(CCW)///////////////
+            
+            if(i == 'g')
+            {
+            
+                //uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Turn CCW a bit more!");
+                
+                m_L.speed(0);
+                m_R.speed(0.8); 
+                wait(0.1);
+                m_L.speed(0);
+                m_R.speed(0); 
+                
+                
+            }
+            
+            
+            //////////////////Tilt angle to the right (CW)////////////////////////
+            
+            if(i == 'h')
+            {
+                //uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Turn CW a bit more!");
+                
+                m_L.speed(0.8);
+                m_R.speed(0); 
+                wait(0.1);
+                m_L.speed(0);
+                m_R.speed(0); 
+                
+                
+                
+            }
+            
+            ///////////////////////////Parked ///////////////////////////
+            if(i == 'p')
+            {
+                uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("stoped");
+                wait(0.5);
+                m_L.speed(0);
+                m_R.speed(0); 
+                
+                count_L = 0;
+                count_R = 0;
+                
+            }
+            
+/////////////////////////////////////// Parking #1, On the left ////////////////////////////
+        if(i == 'w')
+            {
+                uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Parking on left! Front Park!");
+                
+                m_L.speed(sA);
+                m_R.speed(sB); 
+                wait(0);
+                
+                m_L.speed(0);
+                m_R.speed(0);
+                wait(1);
+                count_L = 0;
+                count_R = 0;
+                
+                m_L.speed(-0.6);
+                m_R.speed(0.65); 
+                
+                // Step 1: Turn left 90 degrees
+                while((count_L < 5)||(count_R < 5))
+                {
+                    
+                }
+                m_L.speed(0);
+                m_R.speed(0); 
+                wait(.5);
+                count_L = 0;
+                count_R = 0;
+                
+                
+                m_L.speed(0);
+                m_R.speed(0); 
+                count_L = 0;
+                count_R = 0;
+                
+                
+            }
+/////////////////////////////////////// Parking #2, On the right ////////////////////////////
+        if(i == 'x')
+            {
+                uLCD.cls();
+                uLCD.locate(0,3);
+                uLCD.printf("Parking on Right! Front Park!");
+                
+                m_L.speed(sA);
+                m_R.speed(sB); 
+                wait(0);
+                
+                m_L.speed(0);
+                m_R.speed(0);
+                wait(1);
+                count_L = 0;
+                count_R = 0;
+                
+                m_L.speed(0.6);
+                m_R.speed(-0.65); 
+                
+                // Step 1: Turn left 90 degrees
+                while((count_L < 5)||(count_R < 5))
+                {
+                    
+                }
+                m_L.speed(0);
+                m_R.speed(0); 
+                wait(.5);
+                count_L = 0;
+                count_R = 0;
+                
+                
+                m_L.speed(0);
+                m_R.speed(0); 
+                count_L = 0;
+                count_R = 0;
+                
+                
+            }
+            
+            
+        }
+        
+        else
+        {
+            myled1 = 0;
+        }
+        
+        
+        /*
+                
+        t.reset();
+        t.start();
+        count_L = 0;
+        count_R = 0;
+        
+        while(t.read_ms() < 251) { ; }     
+        
+        t.stop();
+        
+        long int temp_L = count_L;
+        long int temp_R = count_R;
+        
+        uLCD.locate(0,1);
+        uLCD.printf("Count_L: %d", temp_L);
+        
+        uLCD.locate(0,8);
+        uLCD.printf("Count_R: %d", temp_R);
+        
+        double circumference = 0.065 * 3.1416; // 6 cm wheel diameter * pi 
+        
+        double rev_L = (double)(temp_L/4);
+        double rpm_L = ((double)temp_L)*15;
+        double speed_L = (circumference * ((double)temp_L))/4;
+        
+        double rev_R = (double)(temp_R/4);
+        double rpm_R = ((double)temp_R)*15;
+        double speed_R = (circumference * ((double)temp_R))/4;
+        
+        
+        uLCD.locate(0,3);
+        uLCD.printf("L: %0.2f RPM", rpm_L);
+        
+        uLCD.locate(0,4);
+        uLCD.printf("L: speed: %f m/s", speed_L);
+        
+        uLCD.locate(0,2);
+        uLCD.printf("Ct_nr_L: %d", (count_nr_L/4));
+        
+        uLCD.locate(0,10);
+        uLCD.printf("R: %0.2f RPM", rpm_R);
+        
+        uLCD.locate(0,11);
+        uLCD.printf("R: speed: %f m/s", speed_R);
+        
+        uLCD.locate(0,9);
+        uLCD.printf("Ct_nr_R: %d", (count_nr_R/4));
+        
+        */
+        
+        //pc.putc(0xA);
+        //pc.putc(0xD);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Fri Dec 09 15:31:23 2016 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Dec 09 15:31:23 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/d75b3fe1f5cb
\ No newline at end of file