This is sample.

Dependencies:   USBHost mbed

このページは

イルミネーション制御用のコードページです。
使い方の説明があります。

概要

LocalFileSystem利用なのでLPC1768専用と思ってください。
"local/test.csv"ファイルが作成されます。
USBキーボードの利用が絶対です。 PCとのSerial通信も必要です。
エスケープシーケンスをちょっと利用してるので、WindowsはTeraTerm、Macはscreenコマンドをオススメします。

どんなプログラム?

プログラムの構造は 基本は2つのモードを's'キーによって切り替えて使います。(常に's'キーが有効です。)

モード内容有効なキー
入力モード数字の入力、表示、保存 (起動時はこれ)'s','0-9','\b','\r','\n' ( 'd' / 'y' )
表示モード履歴の表示のみ。キー入力で次々表示's','\r','\n'

通常の運用では入力モードでの動作になります。
キーボードのコードは

  • '\b':バックスペース(BS)
  • '\r','\n':エンターキー(LF:'\n'==0x0a)です。なんとなく'\r'足しました。

モードの説明

  • 入力モード
    • 数字(0-9)を入力するとセットされます。(2,1,3と入力すると「13」、3,0,2と入力すると「2」となります。)
    • バッファが空のときにはエンターキー'\r''\n'の入力は無視されます。
    • エンターキー('\r','\n')を入力すると
      • 1回目:確認用に表示します。(prenote)
      • 2回目:(確定され)表示・保存されます。(show,save)
      • 3回目:バッファがクリアされ待機状態になります。(Delete)
      • (4回目:バッファは空なので無視されます。)
    • 'd'を入力するとファイル削除の確認をしますので(Remove)
      • 'y'キーで削除
      • その他のキーで取り消し
    • BackSpace'\b'キーでバッファクリア(Delete)
  • 表示モード
    • エンターキー('\r','\n')を入力すると
      • 過去の保存済み数字(saved)を古い順番に表示します
      • すべて表示すると"EOF"(End Of File)と表示され入力モードに戻ります。

再起動後にファイルがある場合はそのファイルに追加編集されます。(消したい場合は入力モードで削除して)

警告

表示モードの途中で's'を入力すると、再び表示モードになったときに途中からの表示になります。
これでいい?
グローバル変数としてフラグ2つ(delete,remove)、数値2桁、数値の桁位置指示、があります。

Quote:

基本的にテストページなので好きなだけいじってください。
不明な点は福田まで。

考慮すべき点

  • 要相談
    • テンキーの場合のキー割当はどうする?
    • 既に保存した数値(already exiting!)も表示(prenote,show)まではするべき?(saveだけしない)
    • ハードウェアのソフトウェアインターフェースが不明なのでint[2]に(ASCII)グローバルで実装中。表示関数(show)は"void show(int);"がいい?
      • いやいや、10進数表示だからそのままでいい(by福田)
    • 表示モード中のモード切り替えに対して、ファイル位置を戻すべき?
    • 表示モード中に次々表示されるが、戻ることも可能にする?
    • Enterを間違えて2回押すと確定されちゃう。(4回連続入力に対しては無視)
  • ソフトウェアの気になる点
    • クラス化の必要性はある?(グローバルむき出しと構造が細かいのは精神衛生的に……)
    • 10進数2桁限定なので、3桁に対応させるべき?(対応済みコードあり)
    • (表示モード中)160行目はshow();に対応するためにもshowだけは引数ありshow(int *)or(int)にしたほうがいい。(prenoteにも渡すべきなら同様に)
    • 保存、読込フォーマットは"%02d\r\n"ですが何か?(1->"01\r\n"、23->"23\r\n"など)
    • デバッグ用にUSBシリアルに対応させる(切替仕様にす)べき?

実際の動作

ログの内容です。

[USB_INFO: /src/USBHost/USBHost/USBHost.cpp:158]New device connected: 10002c6c [hub: 0 - port: 1]
[USB_INFO: /src/USBHost/USBHostHID/USBHostKeyboard.cpp:120]New Keyboard device: VID:04fe PID:000d [dev: 10002c6c - intf: 0]
[connected]
      set :'12'
create file "/local/test.csv"
  prenote :'12'
     show :'12'
    saved :'12'
   Delete :'12'
      set :'45'
  prenote :'45'
     show :'45'
    saved :'45'
   Delete :'45'
      set :'67'
      set :'65'
      set :'45'
already exiting!
   Delete :'45'
      set :'45'
already exiting!
   Delete :'45'
mode change:Show
12
45
EOF
auto change:Number
Do you want to remove File? [y/n] "/local/test.csv"
Removed"/local/test.csv"
Committer:
kusakagenohara
Date:
Mon Oct 27 18:04:00 2014 +0000
Revision:
1:c50f6764f528
Parent:
0:318e4fa6590e
??????????????????????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lelect 0:318e4fa6590e 1 #include "mbed.h"
lelect 0:318e4fa6590e 2 #include "USBHostKeyboard.h"
lelect 0:318e4fa6590e 3
lelect 0:318e4fa6590e 4 #define LOG_DEBUG
lelect 0:318e4fa6590e 5 #ifdef LOG_DEBUG
lelect 0:318e4fa6590e 6 #define log_debug(format,...) std::printf(format,##__VA_ARGS__)
lelect 0:318e4fa6590e 7 #else
lelect 0:318e4fa6590e 8 #define log_debug(format,...)
lelect 0:318e4fa6590e 9 #endif
lelect 0:318e4fa6590e 10
lelect 0:318e4fa6590e 11 typedef enum {
lelect 0:318e4fa6590e 12 Init,
lelect 0:318e4fa6590e 13 Wait,
lelect 0:318e4fa6590e 14 Prenote,
lelect 0:318e4fa6590e 15 Delete,
lelect 0:318e4fa6590e 16 } num_state_t;
lelect 0:318e4fa6590e 17
lelect 0:318e4fa6590e 18 typedef enum {
lelect 0:318e4fa6590e 19 Number =0,
lelect 0:318e4fa6590e 20 Show =!Number
lelect 0:318e4fa6590e 21 } mode_key_t;
lelect 0:318e4fa6590e 22 const char *const mode_string[] = {"Number","Show"};
lelect 0:318e4fa6590e 23
kusakagenohara 1:c50f6764f528 24 /*ヒープ領域に作る線形リストのノード構造体。いちいちstructって書くの面倒なんでtypedefしとく*/
kusakagenohara 1:c50f6764f528 25 typedef struct node{
kusakagenohara 1:c50f6764f528 26 int number; //レコード(数字)
kusakagenohara 1:c50f6764f528 27 struct node *next; //次のノードへのポインタ
kusakagenohara 1:c50f6764f528 28 }node;
kusakagenohara 1:c50f6764f528 29
kusakagenohara 1:c50f6764f528 30
lelect 0:318e4fa6590e 31
kusakagenohara 1:c50f6764f528 32 LocalFileSystem local("Local");
kusakagenohara 1:c50f6764f528 33 BusOut led(LED1,LED2,LED3,LED4);
kusakagenohara 1:c50f6764f528 34 /*******************ポート設定(水野)***************************/
kusakagenohara 1:c50f6764f528 35 /*通信端子*/
kusakagenohara 1:c50f6764f528 36 Serial uart_subdisplay(p9,p10); // tx,rx
kusakagenohara 1:c50f6764f528 37 //Serial uart_ps(p28,p27);
kusakagenohara 1:c50f6764f528 38 /*7セグの十の位(端子名はwikipediaの通り)*/
kusakagenohara 1:c50f6764f528 39 DigitalOut a10(p14);
kusakagenohara 1:c50f6764f528 40 DigitalOut b10(p15);
kusakagenohara 1:c50f6764f528 41 DigitalOut c10(p16);
kusakagenohara 1:c50f6764f528 42 DigitalOut d10(p17);
kusakagenohara 1:c50f6764f528 43 DigitalOut e10(p18);
kusakagenohara 1:c50f6764f528 44 DigitalOut f10(p19);
kusakagenohara 1:c50f6764f528 45 DigitalOut g10(p20);
kusakagenohara 1:c50f6764f528 46 /*7セグの一の位(端子名はwikipediaの通り)*/
kusakagenohara 1:c50f6764f528 47 DigitalOut a1(p29);
kusakagenohara 1:c50f6764f528 48 DigitalOut b1(p26);
kusakagenohara 1:c50f6764f528 49 DigitalOut c1(p25);
kusakagenohara 1:c50f6764f528 50 DigitalOut d1(p24);
kusakagenohara 1:c50f6764f528 51 DigitalOut e1(p23);
kusakagenohara 1:c50f6764f528 52 DigitalOut f1(p22);
kusakagenohara 1:c50f6764f528 53 DigitalOut g1(p21);
kusakagenohara 1:c50f6764f528 54 /*本体操作スイッチ*/
kusakagenohara 1:c50f6764f528 55 DigitalIn delete_yes(p11);
kusakagenohara 1:c50f6764f528 56 DigitalIn delete_no(p12);
kusakagenohara 1:c50f6764f528 57 DigitalIn on_off(p13);
kusakagenohara 1:c50f6764f528 58 DigitalOut file_alart_led(p8);
kusakagenohara 1:c50f6764f528 59
kusakagenohara 1:c50f6764f528 60 /*グローバル変数*/
kusakagenohara 1:c50f6764f528 61 static const char *const filename = "/Local/BINGO.csv"; //ファイル名
lelect 0:318e4fa6590e 62 int number_flag = 0;
lelect 0:318e4fa6590e 63 int numidx = 0;
kusakagenohara 1:c50f6764f528 64 int numbers[2] = {0,0}; //バッファ。numbers[0]が十の位、numbers[1]が一の位。ってことは、ディスプレイ系関数は配列を受け取るように変更。
kusakagenohara 1:c50f6764f528 65
kusakagenohara 1:c50f6764f528 66 node *entr; //線形リストの先頭アドレス。mainの中に置くと面倒なのでグローバルで。
lelect 0:318e4fa6590e 67
lelect 0:318e4fa6590e 68
kusakagenohara 1:c50f6764f528 69
kusakagenohara 1:c50f6764f528 70 /*プロトタイプ宣言*/
lelect 0:318e4fa6590e 71 void onKey(uint8_t);
lelect 0:318e4fa6590e 72 int mode_number(int);
lelect 0:318e4fa6590e 73 int mode_show(int);
lelect 0:318e4fa6590e 74 void switch_mode(mode_key_t *);
kusakagenohara 1:c50f6764f528 75 void setNum_new(int);//'0'~'9' is guaranteed
lelect 0:318e4fa6590e 76 void deleteNum();
kusakagenohara 1:c50f6764f528 77
kusakagenohara 1:c50f6764f528 78 void effect(int);
kusakagenohara 1:c50f6764f528 79 int main_display(int*);
kusakagenohara 1:c50f6764f528 80 void power_supply_control(int,int,int,int);
kusakagenohara 1:c50f6764f528 81 void power_supply_shutdown_protect(void);
kusakagenohara 1:c50f6764f528 82 void start_up_file_check(void);
kusakagenohara 1:c50f6764f528 83 int number_converter(int*);
kusakagenohara 1:c50f6764f528 84 node* nodealloc(void);
kusakagenohara 1:c50f6764f528 85 void save_file(int);
kusakagenohara 1:c50f6764f528 86 void start_up_read_file(node*);
kusakagenohara 1:c50f6764f528 87 node* add_node(int,node*);
kusakagenohara 1:c50f6764f528 88 int kisyutu_check();
kusakagenohara 1:c50f6764f528 89 void save_data();
lelect 0:318e4fa6590e 90
lelect 0:318e4fa6590e 91
kusakagenohara 1:c50f6764f528 92 void onKey(uint8_t key)/*キーが押されたら*/
lelect 0:318e4fa6590e 93 {
lelect 0:318e4fa6590e 94 static mode_key_t state_mode = Number;
lelect 0:318e4fa6590e 95 switch (key) {
lelect 0:318e4fa6590e 96 case 's':
lelect 0:318e4fa6590e 97 switch_mode(&state_mode);
lelect 0:318e4fa6590e 98 printf("mode change:%s\r\n",mode_string[state_mode]);
lelect 0:318e4fa6590e 99 break;
lelect 0:318e4fa6590e 100 }
lelect 0:318e4fa6590e 101 if((Number == state_mode ? mode_number : mode_show)(key)) {
lelect 0:318e4fa6590e 102 switch_mode(&state_mode);
lelect 0:318e4fa6590e 103 printf("auto change:%s\r\n",mode_string[state_mode]);
lelect 0:318e4fa6590e 104 }
lelect 0:318e4fa6590e 105 }
lelect 0:318e4fa6590e 106
lelect 0:318e4fa6590e 107 inline void switch_mode(mode_key_t *mode)
lelect 0:318e4fa6590e 108 {
lelect 0:318e4fa6590e 109 *mode = Number == *mode ? Show : Number;
kusakagenohara 1:c50f6764f528 110 if(*mode == Number)
kusakagenohara 1:c50f6764f528 111 {
kusakagenohara 1:c50f6764f528 112 uart_subdisplay.printf("101\n"); //サブディスプレイ「入力モード」点灯
kusakagenohara 1:c50f6764f528 113 }
kusakagenohara 1:c50f6764f528 114 if(*mode == Show)
kusakagenohara 1:c50f6764f528 115 {
kusakagenohara 1:c50f6764f528 116 uart_subdisplay.printf("102\n"); //サブディスプレイ「復習モード」点灯
kusakagenohara 1:c50f6764f528 117 }
lelect 0:318e4fa6590e 118 }
lelect 0:318e4fa6590e 119
kusakagenohara 1:c50f6764f528 120
lelect 0:318e4fa6590e 121 int mode_number(int key)
lelect 0:318e4fa6590e 122 {
lelect 0:318e4fa6590e 123 static num_state_t state = Init;
lelect 0:318e4fa6590e 124 switch (state) {
kusakagenohara 1:c50f6764f528 125 case Prenote: //表示確認モードのとき
kusakagenohara 1:c50f6764f528 126 if ('\r'==key || '\n'==key) //エンターが押されたら
kusakagenohara 1:c50f6764f528 127 {
kusakagenohara 1:c50f6764f528 128 save_data(); //線形リストとファイルに保存する関数をコール
kusakagenohara 1:c50f6764f528 129
kusakagenohara 1:c50f6764f528 130 if(main_display(numbers)) //メインディスプレイ表示
kusakagenohara 1:c50f6764f528 131 { //switch-case中にバッファを消されると死ぬので、終了のサイン戻り値を待って、
kusakagenohara 1:c50f6764f528 132 deleteNum(); //バッファをクリア
kusakagenohara 1:c50f6764f528 133 }
lelect 0:318e4fa6590e 134 }
kusakagenohara 1:c50f6764f528 135 state = Wait; //入力待ちモードにセット
lelect 0:318e4fa6590e 136 if (0) {
lelect 0:318e4fa6590e 137 case Init:
lelect 0:318e4fa6590e 138 deleteNum();
lelect 0:318e4fa6590e 139 state = Wait;
lelect 0:318e4fa6590e 140 }
kusakagenohara 1:c50f6764f528 141 case Wait: //入力待ちモードなら
kusakagenohara 1:c50f6764f528 142 switch (key) { //数字が入力されたらアスキーコードを数字に変換して収納
lelect 0:318e4fa6590e 143 case '0':
kusakagenohara 1:c50f6764f528 144 setNum_new(0); //「値はintで欲しい」って言ったような気が・・・7セグじゃputc使えないし。
kusakagenohara 1:c50f6764f528 145 break;
lelect 0:318e4fa6590e 146 case '1':
kusakagenohara 1:c50f6764f528 147 setNum_new(1);
kusakagenohara 1:c50f6764f528 148 break;
lelect 0:318e4fa6590e 149 case '2':
kusakagenohara 1:c50f6764f528 150 setNum_new(2);
kusakagenohara 1:c50f6764f528 151 break;
lelect 0:318e4fa6590e 152 case '3':
kusakagenohara 1:c50f6764f528 153 setNum_new(3);
kusakagenohara 1:c50f6764f528 154 break;
lelect 0:318e4fa6590e 155 case '4':
kusakagenohara 1:c50f6764f528 156 setNum_new(4);
kusakagenohara 1:c50f6764f528 157 break;
lelect 0:318e4fa6590e 158 case '5':
kusakagenohara 1:c50f6764f528 159 setNum_new(5);
kusakagenohara 1:c50f6764f528 160 break;
lelect 0:318e4fa6590e 161 case '6':
kusakagenohara 1:c50f6764f528 162 setNum_new(6);
kusakagenohara 1:c50f6764f528 163 break;
lelect 0:318e4fa6590e 164 case '7':
kusakagenohara 1:c50f6764f528 165 setNum_new(7);
kusakagenohara 1:c50f6764f528 166 break;
lelect 0:318e4fa6590e 167 case '8':
kusakagenohara 1:c50f6764f528 168 setNum_new(8);
kusakagenohara 1:c50f6764f528 169 break;
lelect 0:318e4fa6590e 170 case '9':
kusakagenohara 1:c50f6764f528 171 setNum_new(9); //setnumへ渡す(バッファへ保存とサブディスプレイへの出力)
lelect 0:318e4fa6590e 172 break;
kusakagenohara 1:c50f6764f528 173 case '\n': //エンターが押されたら
kusakagenohara 1:c50f6764f528 174 case '\r':
kusakagenohara 1:c50f6764f528 175 if (number_flag) //数字フラグが1なら
kusakagenohara 1:c50f6764f528 176 {
kusakagenohara 1:c50f6764f528 177 if((kisyutu_check()) == 0){ //既出でなければ
kusakagenohara 1:c50f6764f528 178 state = Prenote; //入力確認モードへ移行
kusakagenohara 1:c50f6764f528 179 uart_subdisplay.printf("111\n"); // サブディスプレイ「よろしいですか?」点灯
kusakagenohara 1:c50f6764f528 180 } else if ((kisyutu_check()) == 1) { //既出なら
kusakagenohara 1:c50f6764f528 181 uart_subdisplay.printf("112\n"); //サブディスプレイ「既出です」点灯
kusakagenohara 1:c50f6764f528 182 wait(1.0); //を1秒点灯
kusakagenohara 1:c50f6764f528 183 deleteNum(); //バッファをクリア
lelect 0:318e4fa6590e 184 }
lelect 0:318e4fa6590e 185 }
lelect 0:318e4fa6590e 186 break;
lelect 0:318e4fa6590e 187 }
lelect 0:318e4fa6590e 188 break;
lelect 0:318e4fa6590e 189 default:
lelect 0:318e4fa6590e 190 break;
lelect 0:318e4fa6590e 191 }
lelect 0:318e4fa6590e 192 led = state;
kusakagenohara 1:c50f6764f528 193 if ('\b' == key) {//b(バックスペース)なら
kusakagenohara 1:c50f6764f528 194 deleteNum(); //バッファをクリアし
kusakagenohara 1:c50f6764f528 195 state = Wait; //入力待ちモードへ
lelect 0:318e4fa6590e 196 }
lelect 0:318e4fa6590e 197 return 0;
lelect 0:318e4fa6590e 198 }
lelect 0:318e4fa6590e 199
kusakagenohara 1:c50f6764f528 200 /*復習  メモ:福田君のモード選択アルゴリズム → 1を返すと自動的に入力モードになる*/
kusakagenohara 1:c50f6764f528 201
lelect 0:318e4fa6590e 202 int mode_show(int key)
lelect 0:318e4fa6590e 203 {
kusakagenohara 1:c50f6764f528 204 static node *current = entr; //enterのたび呼び出されるので、satatic。自動変数にしてかなり悩んだ~。だけど、復習直後に復習するとバグル。
kusakagenohara 1:c50f6764f528 205 int main_output[2]; //mainディスプレイは配列入力なので欲しい。
kusakagenohara 1:c50f6764f528 206 int temp;
kusakagenohara 1:c50f6764f528 207
kusakagenohara 1:c50f6764f528 208 if(current -> next == NULL)
kusakagenohara 1:c50f6764f528 209 {
kusakagenohara 1:c50f6764f528 210 return 1; //電源ON直後に復習に入れないためのフェイルセーフ。
lelect 0:318e4fa6590e 211 }
kusakagenohara 1:c50f6764f528 212
kusakagenohara 1:c50f6764f528 213 if (key == '\r' || key == '\n')
kusakagenohara 1:c50f6764f528 214 {
kusakagenohara 1:c50f6764f528 215 current = current-> next; //先頭リストは空、最後のリストはデータあるんで、処理前に進めとく。
kusakagenohara 1:c50f6764f528 216 temp = current -> number; //線形リストから初っ端の字取り出し
kusakagenohara 1:c50f6764f528 217 uart_subdisplay.printf("%d\n",temp); //サブディスプレイに表示
kusakagenohara 1:c50f6764f528 218 main_output[0] = temp / 10; //INTなんで小数点以下切り捨て
kusakagenohara 1:c50f6764f528 219 main_output[1] = temp - main_output[0] * 10; //一の位取り出し
kusakagenohara 1:c50f6764f528 220 main_display(main_output); //メインディスプレイに表示
kusakagenohara 1:c50f6764f528 221
kusakagenohara 1:c50f6764f528 222
kusakagenohara 1:c50f6764f528 223 if(current -> next == NULL){ //次のリストがなければ
kusakagenohara 1:c50f6764f528 224 current = entr; //復習直後に復習してもバグらない。
kusakagenohara 1:c50f6764f528 225 return 1; //関数を抜ける
kusakagenohara 1:c50f6764f528 226 }
kusakagenohara 1:c50f6764f528 227 }
lelect 0:318e4fa6590e 228 return 0;
lelect 0:318e4fa6590e 229 }
lelect 0:318e4fa6590e 230
kusakagenohara 1:c50f6764f528 231 void deleteNum() //バッファクリア関数
lelect 0:318e4fa6590e 232 {
kusakagenohara 1:c50f6764f528 233 number_flag = 0;
kusakagenohara 1:c50f6764f528 234 numbers[0]=0; //だからーーー文字コードじゃなくてーーーーー泣
kusakagenohara 1:c50f6764f528 235 numbers[1]=0;
kusakagenohara 1:c50f6764f528 236 uart_subdisplay.printf("110\n"); //サブディスプレイの「よろしいですか?」と「既出です。」消す
kusakagenohara 1:c50f6764f528 237 wait(0.1); //通信まち
kusakagenohara 1:c50f6764f528 238 uart_subdisplay.printf("0\n"); //サブディスプレイを0に
lelect 0:318e4fa6590e 239 }
lelect 0:318e4fa6590e 240
lelect 0:318e4fa6590e 241
kusakagenohara 1:c50f6764f528 242 void keyboard_task(void const *) //もともとあったやつ。
lelect 0:318e4fa6590e 243 {
lelect 0:318e4fa6590e 244 USBHostKeyboard keyboard;
lelect 0:318e4fa6590e 245 while(1) {
lelect 0:318e4fa6590e 246 while(!keyboard.connect()) {
lelect 0:318e4fa6590e 247 Thread::wait(500);
lelect 0:318e4fa6590e 248 }
lelect 0:318e4fa6590e 249 keyboard.attach(onKey);
lelect 0:318e4fa6590e 250 printf("[connected]\r\n");
lelect 0:318e4fa6590e 251 while(keyboard.connected()) {
lelect 0:318e4fa6590e 252 Thread::wait(500);
lelect 0:318e4fa6590e 253 }
lelect 0:318e4fa6590e 254 }
lelect 0:318e4fa6590e 255 }
kusakagenohara 1:c50f6764f528 256
kusakagenohara 1:c50f6764f528 257
kusakagenohara 1:c50f6764f528 258 /********************************************関数(水野)*****************************************************/
kusakagenohara 1:c50f6764f528 259
kusakagenohara 1:c50f6764f528 260 /*setNumを整数型バージョンへ、ついでに自分のわかりやすいアルゴリズムに書き換え*/
kusakagenohara 1:c50f6764f528 261
kusakagenohara 1:c50f6764f528 262 void setNum_new(int data) //バッファへセット(int用作り直し版)
kusakagenohara 1:c50f6764f528 263 {
kusakagenohara 1:c50f6764f528 264 if(!number_flag) { //数字フラグ(入力したか判定)が立ってなければ立てる
kusakagenohara 1:c50f6764f528 265 number_flag = 1;
kusakagenohara 1:c50f6764f528 266 }
kusakagenohara 1:c50f6764f528 267 numbers[0] = numbers[1]; //一の位の数字を十の位に移して
kusakagenohara 1:c50f6764f528 268 numbers[1] = data; //一の位を更新
kusakagenohara 1:c50f6764f528 269 uart_subdisplay.printf("%d\n",number_converter(numbers)); //2桁整数に直してサブディスプレイへ出力。
kusakagenohara 1:c50f6764f528 270 }
kusakagenohara 1:c50f6764f528 271
kusakagenohara 1:c50f6764f528 272 /*エフェクト制御*/
kusakagenohara 1:c50f6764f528 273 void effect(int effect_type)
kusakagenohara 1:c50f6764f528 274 {
kusakagenohara 1:c50f6764f528 275 /*理実と相談*/
kusakagenohara 1:c50f6764f528 276 }
kusakagenohara 1:c50f6764f528 277
kusakagenohara 1:c50f6764f528 278 /*メインディスプレイ 7セグ(下側MOSFET)制御 numbersが桁で分れてるので配列のままポインタで受け取りに変更*/
kusakagenohara 1:c50f6764f528 279 int main_display(int *data)
kusakagenohara 1:c50f6764f528 280 {
kusakagenohara 1:c50f6764f528 281 switch(data[0])//十の位
kusakagenohara 1:c50f6764f528 282 {
kusakagenohara 1:c50f6764f528 283 case 1:
kusakagenohara 1:c50f6764f528 284 a10 = 1;
kusakagenohara 1:c50f6764f528 285 b10 = 0;
kusakagenohara 1:c50f6764f528 286 c10 = 0;
kusakagenohara 1:c50f6764f528 287 d10 = 1;
kusakagenohara 1:c50f6764f528 288 e10 = 1;
kusakagenohara 1:c50f6764f528 289 f10 = 1;
kusakagenohara 1:c50f6764f528 290 g10 = 1;
kusakagenohara 1:c50f6764f528 291 break;
kusakagenohara 1:c50f6764f528 292 case 2:
kusakagenohara 1:c50f6764f528 293 a10 = 0;
kusakagenohara 1:c50f6764f528 294 b10 = 0;
kusakagenohara 1:c50f6764f528 295 c10 = 1;
kusakagenohara 1:c50f6764f528 296 d10 = 0;
kusakagenohara 1:c50f6764f528 297 e10 = 0;
kusakagenohara 1:c50f6764f528 298 f10 = 1;
kusakagenohara 1:c50f6764f528 299 g10 = 0;
kusakagenohara 1:c50f6764f528 300 break;
kusakagenohara 1:c50f6764f528 301 case 3:
kusakagenohara 1:c50f6764f528 302 a10 = 0;
kusakagenohara 1:c50f6764f528 303 b10 = 0;
kusakagenohara 1:c50f6764f528 304 c10 = 0;
kusakagenohara 1:c50f6764f528 305 d10 = 0;
kusakagenohara 1:c50f6764f528 306 e10 = 1;
kusakagenohara 1:c50f6764f528 307 f10 = 1;
kusakagenohara 1:c50f6764f528 308 g10 = 0;
kusakagenohara 1:c50f6764f528 309 break;
kusakagenohara 1:c50f6764f528 310 case 4:
kusakagenohara 1:c50f6764f528 311 a10 = 1;
kusakagenohara 1:c50f6764f528 312 b10 = 0;
kusakagenohara 1:c50f6764f528 313 c10 = 0;
kusakagenohara 1:c50f6764f528 314 d10 = 1;
kusakagenohara 1:c50f6764f528 315 e10 = 1;
kusakagenohara 1:c50f6764f528 316 f10 = 0;
kusakagenohara 1:c50f6764f528 317 g10 = 0;
kusakagenohara 1:c50f6764f528 318 break;
kusakagenohara 1:c50f6764f528 319 case 5:
kusakagenohara 1:c50f6764f528 320 a10 = 0;
kusakagenohara 1:c50f6764f528 321 b10 = 1;
kusakagenohara 1:c50f6764f528 322 c10 = 0;
kusakagenohara 1:c50f6764f528 323 d10 = 0;
kusakagenohara 1:c50f6764f528 324 e10 = 1;
kusakagenohara 1:c50f6764f528 325 f10 = 0;
kusakagenohara 1:c50f6764f528 326 g10 = 0;
kusakagenohara 1:c50f6764f528 327 break;
kusakagenohara 1:c50f6764f528 328 case 6:
kusakagenohara 1:c50f6764f528 329 a10 = 0;
kusakagenohara 1:c50f6764f528 330 b10 = 1;
kusakagenohara 1:c50f6764f528 331 c10 = 0;
kusakagenohara 1:c50f6764f528 332 d10 = 0;
kusakagenohara 1:c50f6764f528 333 e10 = 0;
kusakagenohara 1:c50f6764f528 334 f10 = 0;
kusakagenohara 1:c50f6764f528 335 g10 = 0;
kusakagenohara 1:c50f6764f528 336 break;
kusakagenohara 1:c50f6764f528 337 case 7:
kusakagenohara 1:c50f6764f528 338 a10 = 0;
kusakagenohara 1:c50f6764f528 339 b10 = 0;
kusakagenohara 1:c50f6764f528 340 c10 = 0;
kusakagenohara 1:c50f6764f528 341 d10 = 1;
kusakagenohara 1:c50f6764f528 342 e10 = 1;
kusakagenohara 1:c50f6764f528 343 f10 = 0;
kusakagenohara 1:c50f6764f528 344 g10 = 1;
kusakagenohara 1:c50f6764f528 345 break;
kusakagenohara 1:c50f6764f528 346 case 8:
kusakagenohara 1:c50f6764f528 347 a10 = 0;
kusakagenohara 1:c50f6764f528 348 b10 = 0;
kusakagenohara 1:c50f6764f528 349 c10 = 0;
kusakagenohara 1:c50f6764f528 350 d10 = 0;
kusakagenohara 1:c50f6764f528 351 e10 = 0;
kusakagenohara 1:c50f6764f528 352 f10 = 0;
kusakagenohara 1:c50f6764f528 353 g10 = 0;
kusakagenohara 1:c50f6764f528 354 break;
kusakagenohara 1:c50f6764f528 355 case 9:
kusakagenohara 1:c50f6764f528 356 a10 = 0;
kusakagenohara 1:c50f6764f528 357 b10 = 0;
kusakagenohara 1:c50f6764f528 358 c10 = 0;
kusakagenohara 1:c50f6764f528 359 d10 = 0;
kusakagenohara 1:c50f6764f528 360 e10 = 1;
kusakagenohara 1:c50f6764f528 361 f10 = 0;
kusakagenohara 1:c50f6764f528 362 g10 = 0;
kusakagenohara 1:c50f6764f528 363 break;
kusakagenohara 1:c50f6764f528 364 default: // =0
kusakagenohara 1:c50f6764f528 365 a10 = 0;
kusakagenohara 1:c50f6764f528 366 b10 = 0;
kusakagenohara 1:c50f6764f528 367 c10 = 0;
kusakagenohara 1:c50f6764f528 368 d10 = 0;
kusakagenohara 1:c50f6764f528 369 e10 = 0;
kusakagenohara 1:c50f6764f528 370 f10 = 0;
kusakagenohara 1:c50f6764f528 371 g10 = 1;
kusakagenohara 1:c50f6764f528 372 break;
kusakagenohara 1:c50f6764f528 373 }
kusakagenohara 1:c50f6764f528 374
kusakagenohara 1:c50f6764f528 375 switch(data[1])//一の位
kusakagenohara 1:c50f6764f528 376 {
kusakagenohara 1:c50f6764f528 377 case 1:
kusakagenohara 1:c50f6764f528 378 a1 = 1;
kusakagenohara 1:c50f6764f528 379 b1 = 0;
kusakagenohara 1:c50f6764f528 380 c1 = 0;
kusakagenohara 1:c50f6764f528 381 d1 = 1;
kusakagenohara 1:c50f6764f528 382 e1 = 1;
kusakagenohara 1:c50f6764f528 383 f1 = 1;
kusakagenohara 1:c50f6764f528 384 g1 = 1;
kusakagenohara 1:c50f6764f528 385 break;
kusakagenohara 1:c50f6764f528 386 case 2:
kusakagenohara 1:c50f6764f528 387 a1 = 0;
kusakagenohara 1:c50f6764f528 388 b1 = 0;
kusakagenohara 1:c50f6764f528 389 c1 = 1;
kusakagenohara 1:c50f6764f528 390 d1 = 0;
kusakagenohara 1:c50f6764f528 391 e1 = 0;
kusakagenohara 1:c50f6764f528 392 f1 = 1;
kusakagenohara 1:c50f6764f528 393 g1 = 0;
kusakagenohara 1:c50f6764f528 394 break;
kusakagenohara 1:c50f6764f528 395 case 3:
kusakagenohara 1:c50f6764f528 396 a1 = 0;
kusakagenohara 1:c50f6764f528 397 b1 = 0;
kusakagenohara 1:c50f6764f528 398 c1 = 0;
kusakagenohara 1:c50f6764f528 399 d1 = 0;
kusakagenohara 1:c50f6764f528 400 e1 = 1;
kusakagenohara 1:c50f6764f528 401 f1 = 1;
kusakagenohara 1:c50f6764f528 402 g1 = 0;
kusakagenohara 1:c50f6764f528 403 break;
kusakagenohara 1:c50f6764f528 404 case 4:
kusakagenohara 1:c50f6764f528 405 a1 = 1;
kusakagenohara 1:c50f6764f528 406 b1 = 0;
kusakagenohara 1:c50f6764f528 407 c1 = 0;
kusakagenohara 1:c50f6764f528 408 d1 = 1;
kusakagenohara 1:c50f6764f528 409 e1 = 1;
kusakagenohara 1:c50f6764f528 410 f1 = 0;
kusakagenohara 1:c50f6764f528 411 g1 = 0;
kusakagenohara 1:c50f6764f528 412 break;
kusakagenohara 1:c50f6764f528 413 case 5:
kusakagenohara 1:c50f6764f528 414 a1 = 0;
kusakagenohara 1:c50f6764f528 415 b1 = 1;
kusakagenohara 1:c50f6764f528 416 c1 = 0;
kusakagenohara 1:c50f6764f528 417 d1 = 0;
kusakagenohara 1:c50f6764f528 418 e1 = 1;
kusakagenohara 1:c50f6764f528 419 f1 = 0;
kusakagenohara 1:c50f6764f528 420 g1 = 0;
kusakagenohara 1:c50f6764f528 421 break;
kusakagenohara 1:c50f6764f528 422 case 6:
kusakagenohara 1:c50f6764f528 423 a1 = 0;
kusakagenohara 1:c50f6764f528 424 b1 = 1;
kusakagenohara 1:c50f6764f528 425 c1 = 0;
kusakagenohara 1:c50f6764f528 426 d1 = 0;
kusakagenohara 1:c50f6764f528 427 e1 = 0;
kusakagenohara 1:c50f6764f528 428 f1 = 0;
kusakagenohara 1:c50f6764f528 429 g1 = 0;
kusakagenohara 1:c50f6764f528 430 break;
kusakagenohara 1:c50f6764f528 431 case 7:
kusakagenohara 1:c50f6764f528 432 a1 = 0;
kusakagenohara 1:c50f6764f528 433 b1 = 0;
kusakagenohara 1:c50f6764f528 434 c1 = 0;
kusakagenohara 1:c50f6764f528 435 d1 = 1;
kusakagenohara 1:c50f6764f528 436 e1 = 1;
kusakagenohara 1:c50f6764f528 437 f1 = 0;
kusakagenohara 1:c50f6764f528 438 g1 = 1;
kusakagenohara 1:c50f6764f528 439 break;
kusakagenohara 1:c50f6764f528 440 case 8:
kusakagenohara 1:c50f6764f528 441 a1 = 0;
kusakagenohara 1:c50f6764f528 442 b1 = 0;
kusakagenohara 1:c50f6764f528 443 c1 = 0;
kusakagenohara 1:c50f6764f528 444 d1 = 0;
kusakagenohara 1:c50f6764f528 445 e1 = 0;
kusakagenohara 1:c50f6764f528 446 f1 = 0;
kusakagenohara 1:c50f6764f528 447 g1 = 0;
kusakagenohara 1:c50f6764f528 448 break;
kusakagenohara 1:c50f6764f528 449 case 9:
kusakagenohara 1:c50f6764f528 450 a1 = 0;
kusakagenohara 1:c50f6764f528 451 b1 = 0;
kusakagenohara 1:c50f6764f528 452 c1 = 0;
kusakagenohara 1:c50f6764f528 453 d1 = 0;
kusakagenohara 1:c50f6764f528 454 e1 = 1;
kusakagenohara 1:c50f6764f528 455 f1 = 0;
kusakagenohara 1:c50f6764f528 456 g1 = 0;
kusakagenohara 1:c50f6764f528 457 break;
kusakagenohara 1:c50f6764f528 458 default: // =0
kusakagenohara 1:c50f6764f528 459 a1 = 0;
kusakagenohara 1:c50f6764f528 460 b1 = 0;
kusakagenohara 1:c50f6764f528 461 c1 = 0;
kusakagenohara 1:c50f6764f528 462 d1 = 0;
kusakagenohara 1:c50f6764f528 463 e1 = 0;
kusakagenohara 1:c50f6764f528 464 f1 = 0;
kusakagenohara 1:c50f6764f528 465 g1 = 1;
kusakagenohara 1:c50f6764f528 466 break;
kusakagenohara 1:c50f6764f528 467 }
kusakagenohara 1:c50f6764f528 468 return 1;
kusakagenohara 1:c50f6764f528 469 }
kusakagenohara 1:c50f6764f528 470
kusakagenohara 1:c50f6764f528 471 /*電源(各色電流)制御*/
kusakagenohara 1:c50f6764f528 472 void power_supply_control(int r,int g,int b,int control) //それぞれの明るさ(%)と、制御コード
kusakagenohara 1:c50f6764f528 473 {
kusakagenohara 1:c50f6764f528 474
kusakagenohara 1:c50f6764f528 475 }
kusakagenohara 1:c50f6764f528 476
kusakagenohara 1:c50f6764f528 477
kusakagenohara 1:c50f6764f528 478 /*停電時の処理(ピン変化割り込み)*/
kusakagenohara 1:c50f6764f528 479 void power_supply_shutdown_protecct(void)
kusakagenohara 1:c50f6764f528 480 {
kusakagenohara 1:c50f6764f528 481
kusakagenohara 1:c50f6764f528 482 //電源が完成したら挙動を見てどんな処理が必要か考えて実装。
kusakagenohara 1:c50f6764f528 483 }
kusakagenohara 1:c50f6764f528 484
kusakagenohara 1:c50f6764f528 485
kusakagenohara 1:c50f6764f528 486 /*起動時のファイルチェック*/
kusakagenohara 1:c50f6764f528 487 void start_up_file_check(void)
kusakagenohara 1:c50f6764f528 488 {
kusakagenohara 1:c50f6764f528 489 FILE *fp;
kusakagenohara 1:c50f6764f528 490 if((fp = fopen(filename,"r")) != NULL) //読み込みモードでファイルが開けたら、つまりファイルがあったら
kusakagenohara 1:c50f6764f528 491 {
kusakagenohara 1:c50f6764f528 492 file_alart_led = 1; //「ファイルを削除しますか?」ランプ点灯
kusakagenohara 1:c50f6764f528 493 fclose(fp);
kusakagenohara 1:c50f6764f528 494 while(1)
kusakagenohara 1:c50f6764f528 495 {
kusakagenohara 1:c50f6764f528 496 if(delete_yes)//削除(3秒長押し)
kusakagenohara 1:c50f6764f528 497 {
kusakagenohara 1:c50f6764f528 498 wait(3.0);
kusakagenohara 1:c50f6764f528 499 if(delete_yes) //削除スイッチが、3秒経過後にまだ押されてたら
kusakagenohara 1:c50f6764f528 500 {
kusakagenohara 1:c50f6764f528 501 fp = fopen(filename,"w"); //上書きモードで開いて白紙にして上書き保存
kusakagenohara 1:c50f6764f528 502 fclose(fp);
kusakagenohara 1:c50f6764f528 503 break;
kusakagenohara 1:c50f6764f528 504 }
kusakagenohara 1:c50f6764f528 505 }
kusakagenohara 1:c50f6764f528 506 if(delete_no)//残す(停電復帰後等)
kusakagenohara 1:c50f6764f528 507 {
kusakagenohara 1:c50f6764f528 508 start_up_read_file(entr); //ファイルを線形リストに読み込み
kusakagenohara 1:c50f6764f528 509 wait(0.1);
kusakagenohara 1:c50f6764f528 510 break;
kusakagenohara 1:c50f6764f528 511 }
kusakagenohara 1:c50f6764f528 512 }
kusakagenohara 1:c50f6764f528 513 file_alart_led = 0; //「ファイルを削除しますか?」ランプ消灯
kusakagenohara 1:c50f6764f528 514 }
kusakagenohara 1:c50f6764f528 515 }
kusakagenohara 1:c50f6764f528 516
kusakagenohara 1:c50f6764f528 517 /*桁ごとの配列を2桁の整数に変換*/
kusakagenohara 1:c50f6764f528 518 int number_converter(int *data)
kusakagenohara 1:c50f6764f528 519 {
kusakagenohara 1:c50f6764f528 520 int output_data;
kusakagenohara 1:c50f6764f528 521 output_data = 10 * data[0] + data[1];
kusakagenohara 1:c50f6764f528 522 return output_data;
kusakagenohara 1:c50f6764f528 523 }
kusakagenohara 1:c50f6764f528 524
kusakagenohara 1:c50f6764f528 525
kusakagenohara 1:c50f6764f528 526 /*nodealloc関数。nodeサイズのメモリを確保して、確保したnode型のポインタを返す*/
kusakagenohara 1:c50f6764f528 527 node* nodealloc(void)
kusakagenohara 1:c50f6764f528 528 {
kusakagenohara 1:c50f6764f528 529 return (struct node*)malloc(sizeof(node)); //malloocは必ずキャストして使うこと
kusakagenohara 1:c50f6764f528 530 }
kusakagenohara 1:c50f6764f528 531
kusakagenohara 1:c50f6764f528 532 /*ローカルストレージにバックアップをとる*/
kusakagenohara 1:c50f6764f528 533 void save_file(int data)
kusakagenohara 1:c50f6764f528 534 {
kusakagenohara 1:c50f6764f528 535 FILE *fp;
kusakagenohara 1:c50f6764f528 536 if((fp = fopen(filename,"a")) != NULL) //追記モードで開いて
kusakagenohara 1:c50f6764f528 537 {
kusakagenohara 1:c50f6764f528 538 fprintf(fp,"%d\r\n",data); //数字を保存して改行
kusakagenohara 1:c50f6764f528 539 fclose(fp); //ファイルを閉じる
kusakagenohara 1:c50f6764f528 540 }
kusakagenohara 1:c50f6764f528 541 }
kusakagenohara 1:c50f6764f528 542
kusakagenohara 1:c50f6764f528 543 /*停電復帰時専用。外部ファイルから線形リストに読み込み。開始ノードを引数。*/
kusakagenohara 1:c50f6764f528 544 void start_up_read_file(node *start)
kusakagenohara 1:c50f6764f528 545 {
kusakagenohara 1:c50f6764f528 546 int data;
kusakagenohara 1:c50f6764f528 547 node *current = start;
kusakagenohara 1:c50f6764f528 548 FILE *fp;
kusakagenohara 1:c50f6764f528 549 if((fp=fopen(filename,"r")) != NULL) //ファイルが開けたら
kusakagenohara 1:c50f6764f528 550 {
kusakagenohara 1:c50f6764f528 551 while(fscanf(fp,"%d",&data) != EOF)
kusakagenohara 1:c50f6764f528 552 {
kusakagenohara 1:c50f6764f528 553 current = add_node(data,current);
kusakagenohara 1:c50f6764f528 554 }
kusakagenohara 1:c50f6764f528 555 fclose(fp);
kusakagenohara 1:c50f6764f528 556 }
kusakagenohara 1:c50f6764f528 557 }
kusakagenohara 1:c50f6764f528 558
kusakagenohara 1:c50f6764f528 559 /*線形リストを追加する すべてがアドレスで動いていることに注意。メモリ内の倉庫に対し、事務所からロケーション番号と作業を指示しているだけ。*/
kusakagenohara 1:c50f6764f528 560 node* add_node(int data,struct node *current)
kusakagenohara 1:c50f6764f528 561 {
kusakagenohara 1:c50f6764f528 562 struct node *temp;
kusakagenohara 1:c50f6764f528 563
kusakagenohara 1:c50f6764f528 564 while(current->next != NULL) //停電復帰後はスタートノード=最後もノードになってないので、最後のノードを探す。
kusakagenohara 1:c50f6764f528 565 {
kusakagenohara 1:c50f6764f528 566 current = current->next;
kusakagenohara 1:c50f6764f528 567 }
kusakagenohara 1:c50f6764f528 568
kusakagenohara 1:c50f6764f528 569 temp = nodealloc(); //まずノードを作る。メモリは確保されるのでローカル変数で良い。
kusakagenohara 1:c50f6764f528 570 temp -> number = data; //作ったノードに数字を保存する。
kusakagenohara 1:c50f6764f528 571 temp->next = NULL; //作ったやつはケツに足すので、次につなげるのがない最終ノードにする。
kusakagenohara 1:c50f6764f528 572 current->next = temp; //受け取ったやつは作ったやつの一個のリストになるため、作ったやつにつながるように書き換える。
kusakagenohara 1:c50f6764f528 573 return temp; //作ったやつ(新たに最後になったやつ)のアドレスを返す。
kusakagenohara 1:c50f6764f528 574 }
kusakagenohara 1:c50f6764f528 575
kusakagenohara 1:c50f6764f528 576 /*新たにデータを保存する(線形リストと外部ファイル)*/
kusakagenohara 1:c50f6764f528 577 void save_data()
kusakagenohara 1:c50f6764f528 578 {
kusakagenohara 1:c50f6764f528 579 static node *current_node = entr; //ノードのアドレスは静的変数で。最初は当然先頭で初期化
kusakagenohara 1:c50f6764f528 580 int data = number_converter(numbers); //バッファの中身を2桁整数に変換
kusakagenohara 1:c50f6764f528 581 save_file(data); //ファイルに保存
kusakagenohara 1:c50f6764f528 582 add_node(data,current_node); //線形リストに保存
kusakagenohara 1:c50f6764f528 583 }
kusakagenohara 1:c50f6764f528 584
kusakagenohara 1:c50f6764f528 585 /*既出チェック*/
kusakagenohara 1:c50f6764f528 586 int kisyutu_check()
kusakagenohara 1:c50f6764f528 587 {
kusakagenohara 1:c50f6764f528 588 node *task; //ノード型のポインタ変数。
kusakagenohara 1:c50f6764f528 589 task = entr; //入り口ノードでスタート
kusakagenohara 1:c50f6764f528 590 int temp; //処理用変数(バッファを2桁に変換して一旦置くよ)
kusakagenohara 1:c50f6764f528 591 int flag = 0; //既出フラグ。既出なら1。ちがえば0。
kusakagenohara 1:c50f6764f528 592 temp = number_converter(numbers); //2桁に変換して仮置き
kusakagenohara 1:c50f6764f528 593
kusakagenohara 1:c50f6764f528 594 while(task -> next != NULL){
kusakagenohara 1:c50f6764f528 595 task = task -> next; //入り口ノードは空。while停止条件のノードにはデータが存在。ってことで一個オフセット。
kusakagenohara 1:c50f6764f528 596 if(task -> number == temp) //一致したらフラグを立ててループを抜ける。
kusakagenohara 1:c50f6764f528 597 {
kusakagenohara 1:c50f6764f528 598 flag = 1;
kusakagenohara 1:c50f6764f528 599 break;
kusakagenohara 1:c50f6764f528 600 }
kusakagenohara 1:c50f6764f528 601 }
kusakagenohara 1:c50f6764f528 602 return flag;
kusakagenohara 1:c50f6764f528 603 }
kusakagenohara 1:c50f6764f528 604
kusakagenohara 1:c50f6764f528 605
kusakagenohara 1:c50f6764f528 606 /******************************************************************************/
kusakagenohara 1:c50f6764f528 607
kusakagenohara 1:c50f6764f528 608
lelect 0:318e4fa6590e 609 int main()
lelect 0:318e4fa6590e 610 {
kusakagenohara 1:c50f6764f528 611 /**********************起動時の処理******************************************/
kusakagenohara 1:c50f6764f528 612
kusakagenohara 1:c50f6764f528 613 /*ディスプレイの準備*/
kusakagenohara 1:c50f6764f528 614 deleteNum(); //numbersを0にして
kusakagenohara 1:c50f6764f528 615 main_display(numbers); //メインディスプレイを0に
kusakagenohara 1:c50f6764f528 616 uart_subdisplay.printf("0\n"); // サブディスプレイ0に
kusakagenohara 1:c50f6764f528 617 wait(0.1); //通信待ち
kusakagenohara 1:c50f6764f528 618 uart_subdisplay.printf("124\n");//サブディスプレイのステータスランプ全消灯
kusakagenohara 1:c50f6764f528 619
kusakagenohara 1:c50f6764f528 620 /*先頭ノードを用意*/
kusakagenohara 1:c50f6764f528 621 entr = nodealloc(); //entr はグローバル変数。
kusakagenohara 1:c50f6764f528 622 entr -> number = 0; //先頭ノードはデータを持たないが、考慮めんどくさいんで0にしとく。。
kusakagenohara 1:c50f6764f528 623 entr -> next = NULL; //とりあえず一個なのでNULL。
kusakagenohara 1:c50f6764f528 624
kusakagenohara 1:c50f6764f528 625 /*残留データの削除または読込*/
kusakagenohara 1:c50f6764f528 626 start_up_file_check();
kusakagenohara 1:c50f6764f528 627
kusakagenohara 1:c50f6764f528 628 /*電源起動*/
kusakagenohara 1:c50f6764f528 629
kusakagenohara 1:c50f6764f528 630
kusakagenohara 1:c50f6764f528 631
kusakagenohara 1:c50f6764f528 632 uart_subdisplay.printf("101\n"); //サブディスプレイ「入力モード」点灯
kusakagenohara 1:c50f6764f528 633 /******************************************************************************/
kusakagenohara 1:c50f6764f528 634
kusakagenohara 1:c50f6764f528 635
lelect 0:318e4fa6590e 636 Thread keyboardTask(keyboard_task, NULL, osPriorityNormal, 256 * 4);
lelect 0:318e4fa6590e 637 while(1) {
lelect 0:318e4fa6590e 638 Thread::wait(500);
lelect 0:318e4fa6590e 639 }
lelect 0:318e4fa6590e 640 }