定数とかセットアップ
大変面倒なので、ソースの中にコメントを埋め込んで、追加で記述する形に。
# 読み込んでいるライブラリ #include <SPI.h> #RC-522のモジュールと通信するため #include <MFRC522.h> #MFRC-522を操作するためのライブラリ #include <Servo.h> #SG90を操作するためのライブラリ。サーボモーター全般かな。 #include <avr/sleep.h> # Arduinoをスリープモードにするためのライブラリ。外部ライブラリと思っていたが、探す必要なかった。 # 9番10番がRC522とつなぐピンの番号。3番をサーボモータSG90の信号にあてている。 constexpr uint8_t RST_PIN = 9; // Configurable, see typical pin layout above constexpr uint8_t SS_PIN = 10; // Configurable, see typical pin layout above constexpr uint8_t SV_PIN = 3; // Configurable, see typical pin layout above # インスタンスを作っている。インスタンス名はrfid。 MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class # サーボモーターのインスタンス名はmyservo。 Servo myservo; // create servo object to control a servo # 各変数にコメントが入っているので省略。でも、定数であるopentime、が # 変数と区別なく書かれているのはあまり良い書き方じゃない気がする。Opentimeのように最初大文字にするとか # OPENTIMEとか全部大文字で管理したほうが良いような気がする。 // //unsigned long opentime = 300000; // 5分 //unsigned long opentime = 30000; // 30秒 unsigned long opentime = 1800000; // 30分 unsigned long unlocktime = 0; // 開錠した時間 unsigned long checktime = 0; // 経過秒数 unsigned long sleeptime = 0; // 施錠後停止する時間 int servodegree = 180; // 自動電源OFFのために電力調節 int servodegree_pulse = 180; // 自動電源OFFのために電力調節 開錠時の一時角度 int pulse_count = 0; // 自動電源OFFのために電力調節 boolean close_flag = true; // 閉めたことを記録 true = 閉めた。false = 開いた # 余計な電力を消費させたくないのでシリアルコンソールに出力するのはデバッグの時だけ。 void setup() { //Serial.begin(9600); // デバッグ用 # RC522関係の初期化を行っている。インスタンスは既にグローバルな場所で定期済み。 SPI.begin(); // Init SPI bus rfid.PCD_Init(); // Init MFRC522 # デバッグ出力。最初はRC522の接続すらままならなかったので、ここも通過しなかったりした。 //Serial.println(F("This code scan the MIFARE Classsic NUID.")); //Serial.print(F("Using the following key:")); # サーボモーターの初期化。まずは初期状態をカギ閉めた形にする。 myservo.attach(SV_PIN); // attaches the servo myservo.write(servodegree); // deglee 180 is lock } |
servodegree_pulse がわかりにくいかもしれない。鍵開けた後に、RAVPowerが電力供給を停止してしまわないようにピクピクとサーボモータを動かすための角度がループ内で4秒に一回更新される。