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

Dependencies:   C12832 MMA7660 mbed

Committer:
INTRA\mitsuru.suzuki
Date:
Wed Apr 11 19:47:37 2018 +0900
Revision:
15:56e31e726469
Parent:
14:15447d4751c3
Child:
19:caab1538fa62
?????????????

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