course1

Dependencies:   WS2812 PixelArray Adafruit_GFX HC_SR04_Ultrasonic_Library

Revision:
101:18e7ac07b620
Parent:
99:43e306bf6f13
--- a/main.cpp	Mon Jun 17 02:36:43 2019 +0000
+++ b/main.cpp	Sun Aug 04 12:24:12 2019 +0000
@@ -31,32 +31,12 @@
 Timer timer;
 PixelArray px(WS2812_BUF);
 WS2812 ws(D7, WS2812_BUF, 7, 15, 10, 15);
-// Thread thread1;
-// Thread thread2;
 
 
-unsigned int sensorValues[button_SENSORS]; 
-
-// Error variables
-static int prev_err = 0;
-static int int_err = 0;
-int err = 0;
+volatile int button = 0;
 
-// PID & velocity value
-static float pval = 0.15;
-static float ival = 0.00003;
-static float dval = 2.3;
-static float vel = 120.0;
-
-volatile int button = 0;
-int position = 0;
-int dist = 0;
-int cnt = 0;
-float t = 0;
-
-// Reflective sensor
-bool rightObs= false;
-bool leftObs = false;
+// PID variables
+static float pval = 0;
 
 // motor Driver
 float fPwmAPeriod;
@@ -64,88 +44,34 @@
 float fPwmBPeriod;
 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);
-//    }
-//}
-
-
-// opearte reflective sensors
-/*
-void reflective_thread()
-{
-    while(1){
-        char data_write[2];
-        char data_read[2];
-        i2c.frequency(100000);
-        i2c.read((PCF8574_ADDR<<1|0x01), data_read, 2, 0);
-        pc.printf("hexa: %x, %x\r\n", data_read[0], data_read[1]);
-        if(data_read[0]>>6 == 0b10)
-        {
-            pc.printf("Obstacle on left!\r\n");
-            data_write[0] = 0xDF;
-            leftObs = true;
-        }
-        else if(data_read[0]>>6 == 0b01)
-        {
-            pc.printf("Obstacle on right!\r\n");
-            data_write[0] = 0xDF;
-            rightObs = true;
-        }
-        else if(data_read[0]>>6 == 0b00)
-        {
-            pc.printf("Obstacle on front!\r\n");
-            data_write[0] = 0xDF;
-            leftObs = true;
-            rightObs = true;
-            wait(3);
-        }
-        
-        else
-        {
-            data_write[0]=0xFF;
-        }
-        i2c.write((PCF8574_ADDR<<1),data_write,1,0);      
-    }
-}*/
-
 inline void update_display(){
                 gOled2.clearDisplay();
                 gOled2.setTextCursor(0,0);
                 gOled2.printf("E-RON alphabot\r\n");
-                gOled2.printf("Timer: %.2f\r\n",t);
-                gOled2.printf("V: %.0f\r\n",vel);
                 gOled2.printf("P: %.2f\r\n",pval);
-                gOled2.printf("I: %.5f\r\n",ival);
-                gOled2.printf("D: %.2f\r\n",dval);
                 gOled2.display();
 }
-    int colorbuf[NUM_COLORS] = {0xff0000,0x00ff00,0x0000ff};
-    int colorbuf3 =0x000000;
+
+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);
+    update_display();
+    
     RemoteIR::Format format;
     uint8_t buf[32];
     int bitcount;
-    update_display();
     while(1)
     { // read the value of the code
         if (IR.getState() == ReceiverIR::Received)
@@ -160,231 +86,13 @@
         {
             case 0x45:
             // ch- button (P value up)
-                button = 0x1C;
                 pval += 0.01;
                 pval = fabs(pval);
                 update_display();
-//                pc.printf("pval:%f\r\n", pval);
-                wait(0.3);
-                break;
-            
-            case 0x46:
-            // ch common button (I value up)
-                button = 0x1C;
-                ival += 0.00001;
-                ival = fabs(ival);
-                update_display() ;        
-//                pc.printf("ival:%f\r\n", ival);
-                wait(0.3);
-                break;
-            
-            case 0x47: 
-            // ch+ button (D value up)
-                button = 0x1C;
-                dval += 0.05;
-                dval = fabs(dval);
-                update_display();
-                wait(0.3);
-                break;
-                
-            case 0x44:
-            // prev button (P value down)
-                button = 0x1C;
-                pval -= 0.01;
-                pval = fabs(pval);
-                update_display();
-                wait(0.3);
-                break;
-            
-            case 0x40:
-            // next button (I value down)
-                button = 0x1C;
-                ival -= 0.00001;
-                ival = fabs(ival);
-                update_display();
-                wait(0.3);
-                button = 0x1C;
-                break;
-                
-            case 0x43:
-            // play/pause button (D value down)
-                button = 0x1C;
-                dval -= 0.05;
-                dval = fabs(dval);
-                update_display();
-                wait(0.3);
-                button = 0x1C;
-                break;
-
-            case 0x07:
-            // vol- button (velocity down)
-                button = 0x1C;
-                vel -= 5;
-                update_display();
-                wait(0.3);
-                button = 0x1C;
-                break;
-                
-            case 0x15:
-            // vol+ button (velocity up)
-                button = 0x1C;
-                vel += 5;
-                update_display();
                 wait(0.3);
                 button = 0x1C;
                 break;
-                
-            case 0x16:
-            // 0 button (Reset the error variables)
-                int_err = 0;
-                err = 0;
-                prev_err = 0;
-                wait(1);
-                button = 0x1C;
-                break;
-            
-            case 0x19:
-            // 100+ button (Calibrate)
-                pc.printf("calibrate!\r\n");
-                trs.calibrate();
-                pc.printf("calibrate done\r\n");
-                wait(0.2);
-                button = 0x1C;
-                break;
-                
-            case 0x18:
-            // 2 button (move forward)
-                motorDriver.user_forward(0.3,0.3);
-                trs.calibrate();
-                wait(0.1);
-                button = 0x1C;
-                break;
-            
-            case 0x52:
-            // 8 button (move backward)
-                motorDriver.user_backward(0.3,0.3);
-                trs.calibrate();
-                wait(0.1);
-                button = 0x1C;
-                break;
-            
-            case 0x5A:
-            // 6 button (clockwise turn)
-                motorDriver.user_right(0.3,0.1);
-                wait(0.1);
-                button = 0x1C;
-                break;
-            
-            case 0x08:
-            // 4 button (counter clockwise turn)
-                motorDriver.user_left(0.1,0.3);
-                wait(0.1);
-                button = 0x1C;
-                break;
-            
-            case 0x1C:
-            // 5 button (motor stop)
-                motorDriver.stop();
-                break;
-            
-            case 0x0D:
-            // 200+ button (line tracer)
-                t=0;
-                timer.reset();
-                timer.start();
-                ultra.setMode(false);           // have updates every .1 seconds and try only once.
-
-                while(1)
-                {  
-                    t=timer.read();
-                    position=trs.readLine(sensorValues,0);
-                    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)
-                            {
-                                int_err = 0;
-                                err = 0;
-                                prev_err = 0;
-                                break;
-                            }
-                        }
-                    }
-                    
-                    err=(int)position-2000; // error>0 --> right, error<0 --> left
-                    int_err+=err;
-
-                    const float kp = pval;
-                    const float kd = dval;
-                    const float ki = ival;
-            
-                    float power_difference = kp*err + kd*(err-prev_err) + ki*int_err; //+derivative; //error를 누적하는 것
-                    prev_err = err;
-            
-                    const float maximum=vel;
-                    if(power_difference > maximum)
-                        power_difference = maximum;
-                    if(power_difference < -maximum)
-                        power_difference = -maximum;      
-                        
-                    if(power_difference<0)
-                        motorDriver.user_forward((maximum)/255,(maximum+power_difference)/255);               
-                    else 
-                        motorDriver.user_forward((maximum-power_difference)/255,(maximum)/255); 
-                    
-                    pc.printf("position value: %d\r\n", position);
-                    
-                    //pc.printf("cnt: %d\r\n", cnt);
-                    for(int i=0;i<5;i++){
-                        pc.printf("%d\r\n",sensorValues[i]);
-                    }
-                    if((sensorValues[0] > 650) && (sensorValues[1]>650) && (sensorValues[2]>650) && (sensorValues[3]>650) && (sensorValues[4]>650))
-                    {   // 5 IR sensor are on black
-                        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;
-                    }
-                }
-                break;
-                
-            case 0x42:
-            // 7 button (read sensor values)
-                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)
-                int j = 0;
-                while(j!=100)
-                {
-                    j++;
-                    position=trs.readLine(sensorValues,0);
-                    pc.printf("%d\r\n",position);
-                } 
-                button = 0x1C;
-                break;                
+  
             default:
                 // wrong button
                 pc.printf("wrong button!\r\n");