main

Dependencies:   TextLCD mbed PID

Revision:
0:e6d14fec4954
Child:
1:fb4277ce4d93
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Feb 25 03:06:52 2014 +0000
@@ -0,0 +1,165 @@
+#include "mbed.h"
+#include "HMC6352.h"
+#include "TextLCD.h"
+#include "common.h"
+#include <math.h>
+#include <sstream>
+
+#define LINE_P 70
+#define R 1.0
+
+DigitalOut myled[4] = {LED1, LED2, LED3, LED4};
+Serial motor(p9,p10);
+Serial sensor(p13,p14);
+Serial pc(USBTX, USBRX);
+TextLCD lcd(p26, p25, p24, p23, p22, p21);
+//AnalogIn adcIn[4] = {p17, p18, p19, p20};
+//HMC6352 dcompass(p9,p10);
+
+extern string StringFIN;
+extern void array(int,int,int,int);
+extern void micon_rx(void);
+
+//uint16_t  analogHex[4] = {0};
+int speed[4] = {0};
+uint8_t ping[4] = {0};
+uint8_t line[4] = {0};
+uint8_t ir_max = 0, ir_num = 0;
+int compass = 0;
+int x = 0, y = 0, s = 0, i = 0, line_on = 0;
+int compassdef = 0, data = 0;
+
+
+void move(int vx, int vy, int vs){
+    double pwm[4] = {0};
+    
+    pwm[0] = (double)((vx) + vs);
+    pwm[1] = (double)((-0.5 * vx) + ((sqrt(3.0) / 2.0)  * vy) + vs);
+    pwm[2] = (double)((-0.5 * vx) + ((-sqrt(3.0) / 2.0) * vy) + vs);
+    pwm[3] = 0;
+
+    for(i = 0; i < 4; i++){
+        if(pwm[i] > 100){
+            pwm[i] = 100;
+        } else if(pwm[i] < -100){
+            pwm[i] = -100;
+        }
+        speed[i] = pwm[i];
+    }
+}
+
+//通信(モータ用)
+void tx_motor(){
+    array(speed[0],speed[1],speed[3],speed[2]);
+    motor.printf("%s",StringFIN.c_str());
+}
+
+//ライン判断
+void line_state(){
+    if(line[0]){
+        y = -LINE_P;
+    }
+    if(line[1]){
+        x = LINE_P;
+    }
+    if(line[2]){
+        y = LINE_P;
+    }
+    if(line[3]){
+        x = -LINE_P;
+    }
+}
+
+int main() {
+    
+    //dcompass.setOpMode(HMC6352_CONTINUOUS, 1, 20);
+    
+    wait(1);
+    
+    motor.baud(115200);                             //ボーレート設定
+    motor.printf("1F0002F0003F0004F000\r\n");       //モータ停止
+    motor.attach(&tx_motor,Serial::TxIrq);          //送信空き割り込み(モータ用)
+    sensor.attach(&micon_rx,Serial::RxIrq);         //送信空き割り込み(センサ用)
+    //compassdef = (compass / 10);           //コンパス初期値保存
+    //compassdef = (dcompass.sample() / 10);
+    
+
+    wait(1);
+
+    //while(1);
+    
+    y = 20;
+    
+    while(1){
+        s = (compass - 180) / 5;
+        //pc.printf("%d\n", s);
+        
+        move(x,y,s);
+        //wait(0.1);
+    }
+/*    
+    while(1){
+        i = 3;
+        analogHex[i] = adcIn[i].read_u16();
+        if(analogHex[i] > 10000){
+            myled[i] = 1;
+            line[i] = 1;
+            line_on = 1;
+        } else {
+            myled[i] = 0;
+            line[i] = 0;
+            line_on = 0;
+        }
+        
+        x = 30;
+        y = 0;
+                
+        if(line[1]){
+            x = LINE_P;
+        } else if(line[3]){
+            x = -LINE_P;
+        }
+        
+        if(line[0]){
+            y = -LINE_P;
+        } else if(line[2]){
+            y = LINE_P;
+        }
+        move(x,y,s);
+        
+        if(line_on)wait(0.3);
+    }
+    */
+    /*
+    while(1){
+        for(i = 0; i < 4; i++){
+            analogHex[i] = adcIn[i].read_u16();
+            if(analogHex[i] > 10000){
+                myled[i] = 1;
+                line[i] = 1;
+            } else {
+                myled[i] = 0;
+                line[i] = 0;
+            }
+            //wait(0.1);
+        }
+        
+        if(line[0]){
+            x = -30;
+        } else if(line[2]){
+            x = 30;
+        }
+        
+        if(line[1]){
+            y = 30;
+        } else if(line[3]){
+            y = -30;
+        }
+        
+        move(x,y);
+        x = 0;
+        y = 0;
+        //pc.printf("%05d   %05d   %05d   %05d\n", analogHex[0], analogHex[1], analogHex[2],  analogHex[3]);
+    }
+    */
+}