だいだいいろ

IoTなどの技術を楽しむのと、たまに株を分析してみたり。

Smart Home IoT Kit Lesson 21 4*4 Keypad

4*4 Keypadのレッスンがなかったので作る。

 Smart Home IoT Kit Lesson 21 4*4 Keypad

 

https://lh3.googleusercontent.com/dHsHzT0HMUhCpPDZZlB21tSyebCJyK_psHQGwvOAUuT63kOUx8C5QW_hdL0JCMdDXk0vljBXbe-RdXarKxBKdElqUHXwU1t0d9sN2eWkH4xIyR8sM85Zg-m_5EsjixL6vrLxGF02gyDC3cW0R4BT5Qv3X3DTSiwqcUsNWXPDVyB3-cutTUc5FA1KI4tY-sWIa__Qb4kEpyir4_iZDwkE0SHe10If-TqckLeosqaFKdcT7asYA6tqf-px9Z2ESui_oLTajEtXmoEQIyO1SqxIu0qGgU-7eRtX28E-s52jsQlTYZKkIZNLd2Czj1M7ftu_WisAwx_YXeArS9U33KRvFEylhJV4bQgJ3rghJgVbQk_tOWyKQYgODWmEKiA9L-wElWX7vSDgYu64z8f4ytYBTlKquMNocp76QXLNQvneajePL1H4Px8iTk21coUrdMdYIbs9Ft4bpqD9J1--dXu-W1saSaHV2z9FdwtTNvKMJ7BGmj_YCYIGTf5kllOuin_gi1kUOKhA3yeyrDdwITKteKjRwDRcDJ3qPOskKragaVgiXEL0K7NJSj_IqbO-Dn-w3K2diFGISeKYT2k14AKrFkh22zpBbc9pp8u8Mrdq7Bf5UdMzAZ1uuymHxzIqQ24ZGsb8c36gEvo8yUKHcZ97SaAuqPANOaZU5n71zt-cwTeMjK6dmdYIrS9NZJmg6-7GzI0jd6DmAtRRxzdowWJL8RiswfsHEl3X2dG2OGO0ntu0gP38aqxF3g=w2620-h1474-no

 

 

 まず、基盤上にPINがアサインされているので接続する。(4×4 Keypadと書いてある)

https://lh3.googleusercontent.com/FWk6XO3qoVu_0FyNMZnHAXQOvTKeTsfD7y1jPog0Qs4XsX739dm5krA6sXLBIsLWGOnVliYqN-4_USIqsJBmzlxsM88hhQyohzMn_iBVcnYtbnF9s53lNgzX4QRkmNXrntD_TSu8JTetAvRlREhaxmiu6nk8KZIO3M-wicXC9DPKUX-BHPAxPeudMHZaJVc-OD1Jdm8IBd-MEKy7jBtYb7O8eHuCIVuoy22fkWPv-4Pib8wWcnxWXaZtJ01j1x5raFhUF4yMGAmcb0LGwwjlv8y4jWtn4gdGnS8jYyzxAusSyy6r46xUT2z_qf4vLjjmEtVl59j-NIxOUsyGROHGBssrqGLi33YT_DUEtAY4yBE3_0pO-UOec3JmyKWQpd1aVWLvUYSYjbx0aYyMZJQMtJb-Jt_qHa5CkxSfbKdZV7o5UPdl5iro2K0R9sUGPSLOGGrEIOjyS96rFgGtk-8xNznZMjlNqv3LmLC7LMAEELfaqTCBgdvZCLCMWiEpjTi63zzV49qScgy4CCLILUfMgVpsx9f9XZgTZyies2O2O9GHxR2OtbOeqtYY5E5Ob2SQj7SJ2mNwMqq6t0ryMiqMZdyZmY3qAhoRiW7NCNCKPfZzUk3lKl9sFKra4JBDvx6uTLb7KgWHFQC8XdsQXOHXe-7Hpy1yibRbRjT-ysitC7IkYqFpF76p9nch9g09=w830-h1474-no

 

 さて、Yun Iotの

https://osoyoo.com/2018/03/22/osoyoo-yun-iot-lesson-4x4-keypad/ 

 を参考にしてみる。

 

 

まずは、Keypadライブラリを導入

github.com

 

次に、Sketchにソースをコピーしてコンパイルしてみる。

#include “console.h”
#include “bridge.h”
#include “keypad.h”
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte rowPins[ROWS] = {47, 45, 43, 41}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {39, 37, 35, 33}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup(){
Bridge.begin();
Console.begin();
while (!Console);
}

void loop(){
char customKey = customKeypad.getKey();

if (customKey){
Console.println(customKey);
}
}

 

コンパイル時にIDEのエラー発生。

Arduino: 1.8.12 (Mac OS X), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

smarthome-lession21iroz:1:10: error: #include expects "FILENAME" or <filename>
 #include “console.h”
          ^
smarthome-lession21iroz:2:10: error: #include expects "FILENAME" or <filename>
 #include “bridge.h”
          ^
smarthome-lession21iroz:3:10: error: #include expects "FILENAME" or <filename>

 #include “keypad.h”
          ^
exit status 1
#include expects "FILENAME" or ≷filename>

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

 

なんだかエラーが出ているので、よく確認すると、 “と"で違う ”と"  ’と'  ‘と'  ′と' も。ということで修正しとく。 なんでこうなるんだろう?

 

そして、ConsoleもBridgeも通らないので、ソースを変更。(ConsoleはSerialにして、Bridgeはいらない。)

 

それで、Keypadから入力すると動いた。入力がシリアルモニターに表示されるようになったが、押したボタンとシリアルモニターに表示される記号がずれる。

 

入力値 (シリアルモニタ表示)

1 (D)

2 (C)

3 (B)

A (A)

4 (#)

5 (9)

6 (6)

B (3)

7 (0)

8 (8)

9 (5)

C (2)

* (*)

0 (7)

# (4)

D (1)

 

どうも、ずれ方が対角線で折り返したようなずれ方。(A,6,8,*が正しい・・・・。)

 

https://osoyoo.com/2018/03/22/osoyoo-yun-iot-lesson-4x4-keypad/

だと、

https://lh3.googleusercontent.com/ZCpVy1OeR3vJrun73QLp8Py1FM47QZobPXu3WMiTNfiEM5wJubaWFo27OHy2oXkvvALRUbzZzw7kaaooSBAv_0OCwSzHfh3BYYBKYbwIuxRPvGOBONIkAAW7w-4tF-XroOaZOysNIz8OloWFosqsCTfqSmkeZ6kRQqg6REe18p4tTy_1eXxVN0AC1OKSs6K2Eg753Zk4wCsyi_NYKKV4VnDvue4L4EsVA8MqrcGWJj7JCadUmdO2GDfn4sNPZTOgpqIKWP6DXohyLwQfLaCNxzz96SAcSdHYeB0sFcv78Ftr6kvBp9oTOthk3Y6UQUxT-LvUTGKorV13L4kkiXCjNoBanTb-Ys8HbPnbB03D3gUKK-wa_gktpTaDCqq7iFhHwV47R-VRoUGC8-Sk-bF9Ql5kZQ68Z2SBDGAUL8N-02BZ2eS_xxO-y2Qsx-2hslZkLTLeHCnL8ewuq9cQo-x37-575odYXFWLQc_JzKzSo9IT0qSydaVGCIVNcj4b90yh0IpcRYZo1ly-L-t5YmD4kKWB5r7fEv93q7cYswkRd6KphumsBmg2KiFuEuPgjqw1ufcoPMndj2oSPFlVBuZiKxNQXZUxNcQYQFg8fndTVYXzyIXXX5CeSEoN1AIstXbkeqkkdoGSTFFXGrOWDFM9lqoX-hey9o12T05wKvaD1ve_fXsHStzRH0sjO-HtcUKAGFhV8a4yqykk3pMIyXz63DRttUkfrSPpRSOYFHFt7Gh4qjSDOQSQ2w=w1862-h1396-no

 

今の基盤をみると

https://lh3.googleusercontent.com/MSjosn33xqoqT5XEhOtj4D_gF3hvXpnqOaWoNoLq_BMlUv4L_fTURg6T0XIgtKaOhUydBQ5Sx-OFCPm97Mc9v6MkYKNwUtVsx3BGUrE1XsztIsDndj6VdO08BMbkjZO2z8Xnrz19DG8CXYfN1vuAdsURTnzBlZi48e8ebbitZBHYh_0tis69R4rXeHDhyiWyyUhYI7Or7hkSMxVIy_CIfCecUzfVGDER7IaYvW1kCNhuzGtXrRCLsRWHbFlP2pAj9w-lTQpsIIH_pwJZmuEUFrq3aiKd5ur5Zr35f-H0SWp3LMJ6oHr4sZd1K5VxmaWiV4t5Ql-Z-XsdVWibhl-SBK-rA2j5xN7LNRympACJGyQHBlam3tFruB25CbwZhnPeegQwY7MfPNRcqLBfRFeFDibEzWvozsH3dMDnHsazlHMdFO0otnqTNKi8VGuPfZDLfgjbKUYdwAd9ofF4Kl85NpnLdiFoePw682ePz46V5BYTlVuS4u06YamFsFJSJBLW_EBFYAClQ4LNxNrKqu6iYkzO4ZpioViQlBoDNlg8mwxlmbPKvYe8hqzpIb7Omhwl63fPksN4dIanAKQo5wKLs7xEXsXMS2BNXAsdTNmZSsTeq2Dz1HEIjLq-9u_SnnX0PbQ9pgKJFCzosetsfXXLS46x7fiPL4TKaeypOX2UssaRrjqc87zel1OFZzKAfvbNYhOkFiINmFd2oTBVamHFGSxq_2Oyiq4_9KLQ6z2z6L6WrxQWl9OiJw=w830-h1474-no

 

4*4 Keypad pin <-> 実際の基盤 <-> Webでの接続表記

1 <-> D33  <-> D47 

2 <-> D35  <-> D45

3 <-> D37  <-> D43

4 <-> D39  <-> D41

5 <-> D41  <-> D39

6 <-> D43  <-> D37

7 <-> D45  <-> D35

8 <-> D47  <-> D33

の全く逆なので、反転して接続するのが良いのだろうがケーブル長が足りない。

 

ということで、Sketchを変更して完成。

 

smarthome-lession21iroz.ino  

#include <Key.h>
#include <Keypad.h>

#include "SoftwareSerial.h"
SoftwareSerial EspSerial(A9, A8); // RX, TX


//#include "console.h"
//#include "bridge.h"
//#include "keypad.h"

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
//byte rowPins[ROWS] = {47, 45, 43, 41}; //connect to the row pinouts of the keypad
//byte colPins[COLS] = {39, 37, 35, 33}; //connect to the column pinouts of the keypad

byte rowPins[ROWS] = {33,35,37,39}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {41,43,45,47}; //connect to the column pinouts of the keypad


//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

void setup(){
//Bridge.begin();
//Serial.begin();
  Serial.begin(9600);

while (!Serial);
}

void loop(){
char customKey = customKeypad.getKey();

if (customKey){
Serial.println(customKey);
}
}

 

ちゃんと動きました。

Lession21(自作)作成完了! 

 

このKitに入っている4*4 Keypad使えるようになりました。