今朝、ちょっと思いついて10キー(3x4) キーパッドを作ってみました。ステッピングモータを使った工作に使う予定です。
手元にあった部品で作ったのでユニバーサル基板も狭い切れ端です。基板がもう少し広ければ、4x4にしたかったのですが。取り合えず3x4で間に合います。動作確認用にキーを押すと小型LCDに表示するようにしてみました。まぁ、シリアルモニタでPC側で確認してもよいのですが。
スケッチは自分で書いてみました。無保証です。
バグがあったので修正('21.07.26)
//-------------------------------------------------------------- // 21.07.24 naka // 21.07.26 naka bug fix // 3x4キーパッド //-------------------------------------------------------------- #include <FaBoLCDmini_AQM0802A.h> FaBoLCDmini_AQM0802A lcd; // Arduino pinアサイン #define KeyColSize 3 #define KeyRowSize 4 char pin_key_col[KeyColSize] = {8,7,6}; char pin_key_row[KeyRowSize] = {5,4,3,2}; // キーマップ char key_map[KeyRowSize][KeyColSize] = { '7', '8', '9', '4', '5', '6', '1', '2', '3', '0', 'X', 'Y' }; void setup() { // I/O port設定 int i; for (i=0;i<KeyColSize;i++) { pinMode(pin_key_col[i], OUTPUT); digitalWrite(pin_key_col[i],HIGH); } for (i=0;i<KeyRowSize;i++) { pinMode(pin_key_row[i], INPUT); } // モニタLCD設定 SetupLCD(); dispLCD_msg("KeyPad ",""); delay(1000); } void loop() { char key; key = check_key(); if (key!=' ') { disp_key(key); while(check_key()!=' '); // キーが離されるまで待つ } delay(10); } char check_key() { int key_row,key_col; for (key_col=0;key_col<KeyColSize;key_col++) { digitalWrite(pin_key_col[key_col],LOW); for (key_row=0;key_row<KeyRowSize;key_row++) { if (digitalRead(pin_key_row[key_row])==LOW) { digitalWrite(pin_key_col[key_col],HIGH); // bug fix '21.07.25 return key_map[key_row][key_col]; } } digitalWrite(pin_key_col[key_col],HIGH); } return ' '; } void disp_key(char key) { static char buff[9]; static int col = 0; if (col==8) { dispLCD_msg("",""); col = 0; } buff[col++] = key; buff[col] = 0; dispLCD_msg(buff,""); } void dispLCD_msg(char msg1[],char msg2[]) { lcd.clear(); lcd.print(msg1); lcd.setCursor(0, 1); // Col,Raw lcd.print(msg2); } void SetupLCD() { lcd.begin(); lcd.command(0x38); lcd.command(0x39); lcd.command(0x14); lcd.command(0x73); lcd.command(0x51); // 5V // lcd.command(0x56); // 3.3V delay(2); lcd.command(0x6c); delay(300); lcd.command(0x38); delay(1); lcd.command(0x01); delay(2); lcd.command(0x0c); delay(2); }
土曜日ですが午前中、Aliexpressで購入したUSB Type-C のArduino Nano互換機が郵便で届きました。やはり最近中国からの郵便が早くなっていますね。
今回はType-Cでしたが、昔ながらのUSB-miniBでも安い互換機がなくなってきたようです(探し方が悪いのかも)、今回は送料込みで5個で2000円ちょっとでした。mini-Bでも大差なかった。
1個400円なら、性能の高いSeeeduino XIAO (秋月で580円)の方がよいかも知れませんが、XIAOはIOピンが少ないので、Nanoの出番はまだありそうです。
0 件のコメント:
コメントを投稿