
ジョイスティック切換えで色々な処理をやります。 C言語学習用です。
Dependencies: C12832 MMA7660 mbed
src/main.cpp@15:56e31e726469, 2018-04-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |