course1
Dependencies: WS2812 PixelArray Adafruit_GFX HC_SR04_Ultrasonic_Library
Revision 98:d8ead5e04047, committed 2019-06-13
- 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
--- 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;