ジョイスティック切換えで色々な処理をやります。 C言語学習用です。

Dependencies:   C12832 MMA7660 mbed

Files at this revision

API Documentation at this revision

Comitter:
suzukimitsuru
Date:
Wed Apr 18 11:14:40 2018 +0000
Parent:
18:938ec6971d11
Commit message:
?????????????; ????????????

Changed in this revision

src/commands.cpp Show annotated file Show diff for this revision Revisions of this file
src/main.cpp Show annotated file Show diff for this revision Revisions of this file
src/sound.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/src/commands.cpp	Thu Apr 12 11:44:10 2018 +0900
+++ b/src/commands.cpp	Wed Apr 18 11:14:40 2018 +0000
@@ -11,7 +11,7 @@
 /* コマンド定義リスト */
 COMMAND_TRRIGER commandList[] = {
     left,   &Command_color,
-    center, &Command_led3,
+//    center, &Command_led3,
     up,     &Command_sound,
     down,   &Command_accel,
     right,  &Command_liner,
--- a/src/main.cpp	Thu Apr 12 11:44:10 2018 +0900
+++ b/src/main.cpp	Wed Apr 18 11:14:40 2018 +0000
@@ -25,41 +25,54 @@
     COMMAND_TRRIGER *previous = NULL;
     while(true) {
         
-        // 要求の取得
+        // 中断だったら
         COMMAND_TRRIGER *request = NULL;
-        for(int index = 0; commandList[index].trigger != nothing; index++) {
-            if (joyStick == commandList[index].trigger) {
-                if (previous != &commandList[index]) {
-                    request = &commandList[index];
-                    previous = request;
-                }
-            }
-        }
-
-        // 要求があったら
-        if (request != NULL) {
-            bool full = ringbufferPut(request);
-            if (full) {
-                printf("full\n");
-            }
-        }
-
-        // 要求があって実行中のものと異なる場合
-        if (request != NULL && request != current) {
-
+        if (joyStick == center) {
+            
             // コマンドの終了
             current->command->finalize();
             current = &triggerNull;
+            
+            // リングバッファのクリア
+            while(ringbufferGet() != NULL);
+        } else {
+            
+            // 要求の検索
+            for(int index = 0; commandList[index].trigger != nothing; index++) {
+                if (joyStick == commandList[index].trigger) {
+                    request = &commandList[index];
+                }
+            }
+            
+            // 要求があったら
+            if (request != NULL) {
+                
+                // 前回と異なる要求の場合
+                if (previous != request) {
+                    
+                    // コマンドの蓄積
+                    bool full = ringbufferPut(request);
+                    if (full) {
+                        printf("full\n");
+                    }
+                    
+                    // 前回の設定
+                    previous = request;
+                }    
+            } else {
+                previous = NULL;
+            }
         }
 
         // 何も処理していない場合に
         if (current->trigger == nothing) {
 
             // 要求があったら
-            if (request != NULL) {
+            COMMAND_TRRIGER* get = ringbufferGet();
+            if (get != NULL) {
                 
                 // コマンドを開始
-                current = request;
+                current = get;
                 lcd.locate(0,15);
                 lcd.printf("        ");
                 lcd.locate(0,15);
--- a/src/sound.cpp	Thu Apr 12 11:44:10 2018 +0900
+++ b/src/sound.cpp	Wed Apr 18 11:14:40 2018 +0000
@@ -4,7 +4,8 @@
 PwmOut spkr(p26);
 
 static void _Initialize(void) {
-    spkr=0.0;
+    spkr = 0.0;
+//    spkr.period_ms(1);
 }
 
 static void _Finalize(void) {