シリアルモニタに @角度<CR><LF> と入力すると、その角度にサーボが回るプログラムです。

Dependencies:   Servo mbed-dev

Files at this revision

API Documentation at this revision

Comitter:
Gaku0606
Date:
Wed Jan 18 22:12:15 2017 +0000
Commit message:
????????@??<CR><LF> ??????????????????????????

Changed in this revision

Hybrid_ServoMotor.cpp Show annotated file Show diff for this revision Revisions of this file
Servo.lib Show annotated file Show diff for this revision Revisions of this file
mbed-dev.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 2d7d98ccddfa Hybrid_ServoMotor.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hybrid_ServoMotor.cpp	Wed Jan 18 22:12:15 2017 +0000
@@ -0,0 +1,128 @@
+#include "mbed.h"
+#include "Servo.h"
+
+RawSerial pc(USBTX, USBRX);
+
+#define SERVO1_PIN p22
+
+#define MAX_PULSE 0.00245//[s]
+#define MIN_PULSE 0.00065//[s]
+Servo servo1(SERVO1_PIN, MAX_PULSE, MIN_PULSE);
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+DigitalOut nicrom(p21);
+
+void angleChange(){
+    const int BUFFER_SIZE = 16;
+    static float angle = 0;
+    static char buff[BUFFER_SIZE] = {'\0'};
+    static int count = 0;
+    static bool startFlag = false;
+    
+    char temp = pc.getc();   
+    if(temp == 'u') nicrom = 1;
+    else if(temp == 'd')    nicrom = 0;
+    pc.printf("%c", temp);
+    if(temp == '@'){
+        startFlag = true;
+        memset(buff, '\0', BUFFER_SIZE);
+        
+        return;
+    }
+    if(startFlag){
+        
+        if(temp == '\r'){
+            buff[count] = '\0';
+            startFlag = false;
+            angle = (float)atof(buff);
+            servo1 = angle;
+            pc.printf("\r\nangle : %3.2f [degree]\r\n", servo1());
+            pc.printf("Please send like @***.*<CR><LF>\r\n\r\n");
+            pc.printf("---------------------------------------\r\n");
+            /*
+            if(angle < -90.0)   angle = -90.0f;
+            else if(angle > 90.0)  angle = 90.0f;
+            servo1.position(angle);
+            pc.printf("angle : %3.0f [degree]\r\n", angle);*/
+               
+            memset(buff, '\0', BUFFER_SIZE);
+            count = 0;
+            return;
+        }   
+        buff[count] = temp;
+        count++;
+        if(count > BUFFER_SIZE - 1){//null文字分空けておく
+            startFlag = false;
+            memset(buff, '\0', BUFFER_SIZE);
+            count = 0;
+            pc.printf("\r");
+            pc.printf("\033[K");
+            return; 
+        }
+        
+    }
+}
+
+void ledDriver(unsigned char bin){
+    unsigned char cmd = bin & 0b00000001;
+    if(cmd) led1 = 1;
+    else    led1 = 0;
+    cmd = bin & 0b00000010;
+    if(cmd) led2 = 1;
+    else    led2 = 0;            
+    cmd = bin & 0b00000100;
+    if(cmd) led3 = 1;
+    else    led3 = 0;
+    cmd = bin & 0b00001000;
+    if(cmd) led4 = 1;
+    else    led4 = 0;
+}
+
+int main() {
+    
+    wait(3.0);
+    
+    pc.baud(115200);
+    pc.attach(&angleChange, Serial::RxIrq);
+    //char count = 0b00000001;
+    pc.printf("\r\nStart boot phase:\r\n");
+    for(int i = 0; i < 100; i++){
+        pc.printf("\033[K");
+        pc.printf("Loading... : %3d [%%]\r", i);
+        wait(0.01);   
+    }
+    pc.printf("Loading... : %3d [%%]\r\n", 100);
+    pc.printf("  -> OK!\r\n");
+    wait(1.0);
+    pc.printf("Initialize...\r\n");
+    for(int i = 0;i < 20; i++){
+        ledDriver(0b00001111);
+        wait(0.05);
+        ledDriver(0b00000000);
+        wait(0.05);   
+    }
+    servo1 = 0.0f;
+    pc.printf("angle : %3.2f [degree]\r\n", servo1());
+    pc.printf("  -> OK!\r\n");
+    wait(0.5);
+    
+    pc.printf("End boot phase\r\n");
+    wait(1.0);
+    pc.printf("Start _Servo Driving System ver 1.5.1_\r\n");
+    pc.printf("\r\nPlease send like @***.*<CR><LF>, ***.* = angle[degree]\r\n");
+   
+    while(1) {    
+        ledDriver(0b00000001);
+        wait(0.2);
+        ledDriver(0b00000010);
+        wait(0.2);
+        ledDriver(0b00000100);
+        wait(0.2);
+        ledDriver(0b00001000);
+        wait(0.2);
+    }
+}
diff -r 000000000000 -r 2d7d98ccddfa Servo.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Servo.lib	Wed Jan 18 22:12:15 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/PQ_Hybrid_Electrical_Equipment_Team/code/Servo/#7ba85d855519
diff -r 000000000000 -r 2d7d98ccddfa mbed-dev.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-dev.lib	Wed Jan 18 22:12:15 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed-dev/#fa9ff456f731