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

Dependencies:   C12832 MMA7660 mbed

Committer:
INTRA\mitsuru.suzuki
Date:
Wed Apr 04 20:58:28 2018 +0900
Revision:
13:2c1fe87a06cd
Child:
14:15447d4751c3
??????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 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 13:2c1fe87a06cd 25 while(true) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 26
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 27 // 要求の取得
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 28 COMMAND_TRRIGER *request = NULL;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 29 for(int index = 0; commandList[index].trigger != nothing; index++) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 30 if (joyStick == commandList[index].trigger) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 31 request = &commandList[index];
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 32 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 33 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 34
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 35 // 要求があったら
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 36 if (request != NULL) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 37 bool full = ringbufferPut(request);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 38 if (full) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 39 printf("full\n");
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 40 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 41 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 42
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 43 // 要求があって実行中のものと異なる場合
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 44 if (request != NULL && request != current) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 45
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 46 // コマンドの終了
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 47 current->command->finalize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 48 current = &triggerNull;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 49 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 50
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 51 // 何も処理していない場合に
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 52 if (current->trigger == nothing) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 53
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 54 // 要求があったら
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 55 if (request != NULL) {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 56
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 57 // コマンドを開始
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 58 current = request;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 59 lcd.locate(0,15);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 60 lcd.printf(" ");
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 61 lcd.locate(0,15);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 62 lcd.printf(current->command->name);
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 63 current->command->processInitialize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 64 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 65 } else {
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 66
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 67 // コマンドの実行
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 68 current->command->processRunning();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 69
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 70 // コマンドが終わったら
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 71 if (! current->command->processIsContinue()){
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 72
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 73 // コマンドの終了
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 74 current->command->finalize();
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 75 current = &triggerNull;
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 76 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 77 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 78 }
INTRA\mitsuru.suzuki 13:2c1fe87a06cd 79 }