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

Dependencies:   C12832 MMA7660 mbed

Committer:
suzukimitsuru
Date:
Wed Apr 18 11:14:40 2018 +0000
Revision:
19:caab1538fa62
Parent:
15:56e31e726469
?????????????; ????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
INTRA\mitsuru.suzuki 14:15447d4751c3 1 #include "./mbed.h"
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 2 #include "C12832.h"
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 3
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 4 #include "commands.h"
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 5 #include "ringBuffer.h"
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 6
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 7 extern COMMAND_TRRIGER commandList[];
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 8 extern COMMAND_TRRIGER triggerNull;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 9
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 10 BusIn joyStick(p15,p12,p13,p16,p14);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 11 C12832 lcd(p5, p7, p6, p8, p11);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 12
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 13 int main()
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 14 {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 15 lcd.cls();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 16 lcd.locate(0,3);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 17 lcd.printf("mbed Switches application");
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 18
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 19 // デバイスの初期化
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 20 for(int index = 0; commandList[index].trigger != nothing; index++) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 21 commandList[index].command->initialize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 22 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 23
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 24 COMMAND_TRRIGER *current = &triggerNull;
INTRA\mitsuru.suzuki 15:56e31e726469 25 COMMAND_TRRIGER *previous = NULL;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 26 while(true) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 27
suzukimitsuru 19:caab1538fa62 28 // 中断だったら
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 29 COMMAND_TRRIGER *request = NULL;
suzukimitsuru 19:caab1538fa62 30 if (joyStick == center) {
suzukimitsuru 19:caab1538fa62 31
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 32 // コマンドの終了
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 33 current->command->finalize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 34 current = &triggerNull;
suzukimitsuru 19:caab1538fa62 35
suzukimitsuru 19:caab1538fa62 36 // リングバッファのクリア
suzukimitsuru 19:caab1538fa62 37 while(ringbufferGet() != NULL);
suzukimitsuru 19:caab1538fa62 38 } else {
suzukimitsuru 19:caab1538fa62 39
suzukimitsuru 19:caab1538fa62 40 // 要求の検索
suzukimitsuru 19:caab1538fa62 41 for(int index = 0; commandList[index].trigger != nothing; index++) {
suzukimitsuru 19:caab1538fa62 42 if (joyStick == commandList[index].trigger) {
suzukimitsuru 19:caab1538fa62 43 request = &commandList[index];
suzukimitsuru 19:caab1538fa62 44 }
suzukimitsuru 19:caab1538fa62 45 }
suzukimitsuru 19:caab1538fa62 46
suzukimitsuru 19:caab1538fa62 47 // 要求があったら
suzukimitsuru 19:caab1538fa62 48 if (request != NULL) {
suzukimitsuru 19:caab1538fa62 49
suzukimitsuru 19:caab1538fa62 50 // 前回と異なる要求の場合
suzukimitsuru 19:caab1538fa62 51 if (previous != request) {
suzukimitsuru 19:caab1538fa62 52
suzukimitsuru 19:caab1538fa62 53 // コマンドの蓄積
suzukimitsuru 19:caab1538fa62 54 bool full = ringbufferPut(request);
suzukimitsuru 19:caab1538fa62 55 if (full) {
suzukimitsuru 19:caab1538fa62 56 printf("full\n");
suzukimitsuru 19:caab1538fa62 57 }
suzukimitsuru 19:caab1538fa62 58
suzukimitsuru 19:caab1538fa62 59 // 前回の設定
suzukimitsuru 19:caab1538fa62 60 previous = request;
suzukimitsuru 19:caab1538fa62 61 }
suzukimitsuru 19:caab1538fa62 62 } else {
suzukimitsuru 19:caab1538fa62 63 previous = NULL;
suzukimitsuru 19:caab1538fa62 64 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 65 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 66
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 67 // 何も処理していない場合に
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 68 if (current->trigger == nothing) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 69
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 70 // 要求があったら
suzukimitsuru 19:caab1538fa62 71 COMMAND_TRRIGER* get = ringbufferGet();
suzukimitsuru 19:caab1538fa62 72 if (get != NULL) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 73
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 74 // コマンドを開始
suzukimitsuru 19:caab1538fa62 75 current = get;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 76 lcd.locate(0,15);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 77 lcd.printf(" ");
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 78 lcd.locate(0,15);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 79 lcd.printf(current->command->name);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 80 current->command->processInitialize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 81 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 82 } else {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 83
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 84 // コマンドの実行
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 85 current->command->processRunning();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 86
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 87 // コマンドが終わったら
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 88 if (! current->command->processIsContinue()){
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 89
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 90 // コマンドの終了
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 91 current->command->finalize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 92 current = &triggerNull;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 93 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 94 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 95 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 96 }