質問: C言語について教えてください。 ボタンを押せば、モーターが回転し、同じボタンを押せば、モーターが停止する。これを繰り返すプログラムを教えてください。
回答: ボタンのOFF→ONへ変化をチェックする。 ON変化をフラグに記録する。 処理を行うとON変化フラグをクリアする。 #define BIT_BUTTON 0x???? unsigned int port_now; // ポート入力の状態 unsigned int flag_up; // OFF→ONへ変化フラグ #define CHATA 5 void port_check(void) { static unsigned int port_old[CHATA]; static unsigned int port_chang; // ポート入力の変化ビット static unsigned int port_back; // 変化前のポート入力状態 unsigned int port_tmp; // チャタリング対策 port_tmp = port; // ポート状態の読込 for(i=0; i0; i--){ port_old[i] = port_old[i-1] } port_old[0] = port_tmp; // ポート入力の状態が変化した? if(port_now != port_back){ port_chang = port_back ^ port_now; // OFF→ONへ変化フラグセット flag_up |= port_chang & port_now; port_back = port_now; } } void main(void) { int motor_flag = 0; while(1){ port_check(); // ボタンの状態がONに変化したか? if((flag_up & BIT_BUTTON) != 0){ if(motor_flag == 0){ // ここにモータON処理を挿入 motor_flag = 1; }else{ // ここにモータOFF処理を挿入 motor_flag = 0; } // ON変化記録フラグをクリア flag_up = flag_up & (~BIT_BUTTON); } } }