course1

Dependencies:   WS2812 PixelArray Adafruit_GFX HC_SR04_Ultrasonic_Library

Files at this revision

API Documentation at this revision

Comitter:
kmsmile2
Date:
Thu Jun 13 11:12:37 2019 +0000
Parent:
97:8f3abd5cf5ce
Child:
99:43e306bf6f13
Child:
100:6efb1c0a6a68
Commit message:
Minsu

Changed in this revision

CONTRIBUTING.md Show diff for this revision Revisions of this file
PixelArray.lib Show annotated file Show diff for this revision Revisions of this file
TRSensors.lib Show annotated file Show diff for this revision Revisions of this file
WS2812.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
--- a/CONTRIBUTING.md	Wed Jun 12 08:20:53 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-# Contributing to Mbed OS
-
-Mbed OS is an open-source, device software platform for the Internet of Things. Contributions are an important part of the platform, and our goal is to make it as simple as possible to become a contributor.
-
-To encourage productive collaboration, as well as robust, consistent and maintainable code, we have a set of guidelines for [contributing to Mbed OS](https://os.mbed.com/docs/mbed-os/latest/contributing/index.html).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PixelArray.lib	Thu Jun 13 11:12:37 2019 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/chris/code/PixelArray/#b45a70faaa83
--- a/TRSensors.lib	Wed Jun 12 08:20:53 2019 +0000
+++ b/TRSensors.lib	Thu Jun 13 11:12:37 2019 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/users/kmsmile2/code/TRSensors/#551050b66873
+https://os.mbed.com/users/kmsmile2/code/TRSensors/#bb9f536cceda
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WS2812.lib	Thu Jun 13 11:12:37 2019 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/bridadan/code/WS2812/#6e647820f587
--- a/main.cpp	Wed Jun 12 08:20:53 2019 +0000
+++ b/main.cpp	Thu Jun 13 11:12:37 2019 +0000
@@ -5,12 +5,18 @@
 #include "TRSensors.h"
 #include "ultrasonic.h"
 #include "Adafruit_SSD1306.h"
+#include "WS2812.h"
+#include "PixelArray.h"
 
 #define button_SENSORS 5
 #define ADT7420_TEMP_REG (0x00)
 #define ADT7420_CONF_REG (0x03)
 #define EVAL_ADT7420_ADDR (0x48)
 #define PCF8574_ADDR (0x20)
+#define WS2812_BUF 100
+#define WS2812_BUF2 4
+#define NUM_COLORS 3
+#define NUM_LEDS_PER_COLOR 4
 
 // create object
 DigitalOut dc(D8,1);
@@ -26,6 +32,11 @@
 Thread thread1;
 Thread thread2;
 Timer timer;
+PixelArray px(WS2812_BUF);
+
+// See the program page for information on the timing numbers
+// The given numbers are for the K64F
+WS2812 ws(D7, WS2812_BUF, 7, 15, 10, 15);
 
 // variables
 unsigned int sensorValues[button_SENSORS]; 
@@ -33,10 +44,10 @@
 long integral = 0;
 static int prev_err = 0;
 static int int_err = 0;
-static float pval = 0;
-static float ival = 0;
-static float dval = 2.0;
-static float vel = 150.0;
+static float pval = 0.15;
+static float ival = 0.00003;
+static float dval = 2.3;
+static float vel = 120.0;
 uint8_t IR_buf[64];
 int length = 32;
 volatile int button = 0;
@@ -57,17 +68,17 @@
 float fPwmBPulsewidth;
 
 // opearte ultrasonic
-/*void ultrasonic_thread()
-{
-    while (1)
-    {
-        ultra.setMode(false);           // have updates every .1 seconds and try only once.
-        ultra.trig();
-        dist = ultra.getDistance();
-        pc.printf("Detected value: %d\r\n", dist);
-    }
-}
-*/
+//void ultrasonic_thread()
+//{
+//    while (1)
+//    {
+//        ultra.setMode(false);           // have updates every .1 seconds and try only once.
+//        ultra.trig();
+//        dist = ultra.getDistance();
+//        pc.printf("Detected value: %d\r\n", dist);
+//    }
+//}
+
 
 // opearte reflective sensors
 /*
@@ -119,9 +130,17 @@
                 gOled2.printf("D: %.2f\r\n",dval);
                 gOled2.display();
 }
-
+    int colorbuf[NUM_COLORS] = {0xff0000,0x00ff00,0x0000ff};
+    int colorbuf3 =0x000000;
 int main()
-{   
+{      
+    for (int i = 0; i < WS2812_BUF; i++) {
+        px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]);
+    }
+    for (int j=0; j<WS2812_BUF; j++) {
+        // px.SetI(pixel position, II value)
+        px.SetI(j%WS2812_BUF, 0xf+(0xf*4));
+    }
     
  //   thread1.start(ultrasonic_thread);
  //   thread2.start(reflective_thread);
@@ -238,6 +257,7 @@
             case 0x18:
             // 2 button (move forward)
                 motorDriver.user_forward(0.3,0.3);
+                trs.calibrate();
                 wait(0.1);
                 button = 0x1C;
                 break;
@@ -245,6 +265,7 @@
             case 0x52:
             // 8 button (move backward)
                 motorDriver.user_backward(0.3,0.3);
+                trs.calibrate();
                 wait(0.1);
                 button = 0x1C;
                 break;
@@ -273,28 +294,22 @@
                 t=0;
                 timer.reset();
                 timer.start();
-                
+                ultra.setMode(false);           // have updates every .1 seconds and try only once.
+
                 while(1)
                 {  
                     t=timer.read();
-                    update_display();
                     position=trs.readLine(sensorValues,0);
-                    
-                    /*if(dist < 10)
-                    {
-                        int count=0;
-                        while(count<150){
-                            if(dist>10) break;
-                            count++;
-                        }
-                        if(count<150) continue;
-                        while(1)
-                        {
-                            
-                            motorDriver.user_left(0.2,0.2);
-                            
-                            //pc.printf("distance: %d\r\n", dist);
-                            pc.printf("position: %d\r\n", position);
+                    ultra.trig();
+                    dist = ultra.getDistance();
+                    pc.printf("dist:%d\r\n", dist);
+                    if(dist<=21){
+                          motorDriver.user_left(0.2,0.2);
+                          wait(0.1);
+                          while(1){
+                           
+                           // pc.printf("distance: %d\r\n", dist);
+                           // pc.printf("position: %d\r\n", position);
                             position=trs.readLine(sensorValues,0);
                             if(position > 2000)
                             {
@@ -302,9 +317,37 @@
                                 err = 0;
                                 prev_err = 0;
                                 break;
+                                
+                                
                             }
                         }
-                    */       
+                        
+                    }
+                    //if(dist < 25)
+//                    {
+//                        int count=0;
+//                        while(count<100){
+//                            if(dist>10) break;
+//                            count++;
+//                        }
+//                        if(count<100) continue;
+//                        while(1)
+//                        {
+//                            
+//                            motorDriver.user_forward(0,0.2);
+//                            
+//                            //pc.printf("distance: %d\r\n", dist);
+//                            pc.printf("position: %d\r\n", position);
+//                            position=trs.readLine(sensorValues,0);
+//                            if(position > 2000)
+//                            {
+//                                int_err = 0;
+//                                err = 0;
+//                                prev_err = 0;
+//                                break;
+//                            }
+//                        }
+//                    }       
                     
                     
                     err=(int)position-2000; // error>0 --> right, error<0 --> left
@@ -324,9 +367,9 @@
                         power_difference = -maximum;      
                         
                     if(power_difference<0)
-                        motorDriver.user_forward((maximum+15)/255,(maximum+power_difference)/255);               
+                        motorDriver.user_forward((maximum-10)/255,(maximum+power_difference)/255);               
                     else 
-                        motorDriver.user_forward((maximum-power_difference)/255,(maximum-15)/255); 
+                        motorDriver.user_forward((maximum-power_difference)/255,(maximum+10)/255); 
                     
                     pc.printf("position value: %d\r\n", position);
                     
@@ -339,6 +382,12 @@
                         timer.stop();
                         t=timer.read();
                         update_display();
+                        motorDriver.stop();
+                        for(int z=48;z>=0;z=z-4){
+                        ws.write_offsets(px.getBuf(),z,z,z);
+                        wait(0.1);
+                        }
+                        
                         button = 0x1C;
                         break;
                     }
@@ -347,15 +396,14 @@
                 
             case 0x42:
             // 7 button (read sensor values)
-                while(1)
-                {
-                    position=trs.readLine(sensorValues,0);
-                    for(int i=0;i<5;i++){
-                        pc.printf("%d\r\n",sensorValues[i]);
-                    }
-                    pc.printf("done!\r\n");
-                    wait(1);
+                position=trs.readLine(sensorValues,0);
+                for(int i=0; i<5; i++) {
+                    pc.printf("%d\r\n",sensorValues[i]);
                 }
+                pc.printf("done!\r\n");
+                button = 0x1C;
+                break;
+
                 
             case 0x4A:
             // 9 button (read position)
@@ -368,7 +416,7 @@
                 } 
                 button = 0x1C;
                 break;                
-            dafault:
+            default:
                 // wrong button
                 pc.printf("wrong button!\r\n");
                 break;