SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
コンポーネントと用品
![]() |
Arduino Mega 2560 | ×1 |
| 3.2インチ TFT LCD タッチスクリーン | ×1 |
アプリとオンラインサービス
![]() |
Arduino IDE |
このプロジェクトについて
これまで多くのアラームシステムを見てきましたが、それらが提供できる機能を全て、そして私の独自機能も含めて、単一のArduinoボードに詰め込み、アラームのコントロールパネルとして機能させるのは良いアイデアだと考えました。
特に難しいことはありません。ボード本体と3.2インチタッチスクリーンを購入するだけです。スクリーンを動作させるにはライブラリが必要です。Henning Carlsen氏の全ライブラリに大感謝!クレジット欄に彼のウェブサイトへのリンクがあります。
プログラム
完成までにかなり時間がかかりました。コードで混乱しないでください。必要な時は必ずコメントを入れています!
アラームの主な機能
3種類のパスワードを実装しました。4桁、5桁、6桁です。これらは多いように思えますが、将来のアップデートで4桁コードを無効化するオプションをユーザーに提供する予定です。
- 4桁パスワード:アラームをセット(アーム)するために使用。
- 5桁パスワード:アラームを部分的に解除(ディスアーム)するために使用。
- 6桁パスワード:アラームを完全に解除するために使用。
アラームは自動アーム機能も備えています。5桁コードを入力するとプログラムがカウントダウンを開始(デフォルト40秒)。このカウントダウンが終了すると、アラームが自動的にアームされます。システムのアームを忘れがちな場合に便利です。
オプションメニュー
オプションメニューでは、全3種類のパスワードと自動アーム時間を変更できます。
今後のアップデート予定
今後のアップデートには、日付/時刻設定、SDカードサポート(停電時のデータ消失防止)、自動アーム機能の無効化オプション、4桁パスワードの無効化オプションなどが含まれます。
デモ動画
コード
- SERENA v.1.01
SERENA v.1.01 Arduino
コードをArduinoボードにアップロードするだけです。
一部のコメントはギリシャ語ですが、近日中に変更予定です。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SERENA Alarm System
// Author: Michael Marinis
// Copyright (C)2016 Michael Marinis. All Rights Reserved
// Website: https://www.youtube.com/SauROnmiKE
//
// このSERENAアラームシステムは、ユーザーが望む時に手動でアームしたり、
// 自動アーム機能を使ったりできる二機能アラームシステムです。
//
// このプログラムにはHenning Karlsen氏のUTFT & URTouchライブラリと、
// それに互換性のあるLCDシールドが必要です。
//
// //////////VERSIONS//////////
// 0.10a: 初版、基本機能
// 0.20a: 軽微な改善
// 0.30a: 手動アーム用新パスワードの入力と確認完了 (12/11/2016)
// 0.40a: 自動アーム用新パスワードの入力と確認完了 (12/11/2016)
// 1.00a: アームパスワード入力とチェック完了 (12/11/2016, 19:16)
// 1.10a: システムアーム時のメニュー完成(リレー等への信号送信なし)。日時は後で追加。ディスアームボタンのみ追加 (13/11/2016, 13:04)
// 1.20a: "DISARM"ボタンをプログラミング。5桁パスワード入力を促し、パスワードチェックでアラーム解除(リレー等への信号送信なし) (13/11/2016, 14:15)
// 1.21a: パスワード確認チェック後、ユーザーが数字を入力できないバグ修正。"NO"を押すと"CLEAR"ボタンを押すまで新パスワード入力不可だった問題を解決 (14/11/2016, 13:32)
// 1.22a: 自動アーム用カウントダウンタイマー完成 (14/11/2016, 15:46)
// 1.30a: 自動アームメニュー完成。再アームまでの秒数表示。完全ディスアームメニューはライブラリの制限でプッシュボタン経由でアクセス (14/11/2016, 21:42)
// 1.31a: "buf"変数を"-1"から"0"に変更。最初の数字ボタン押下が反応しないバグを修正 (16/11/2016, 00:45)
// 1.40b: "SET ARM PASSWORD"ボタン追加。アラームアーム用4桁パスワード変更可能 (16/11/2016, 14:33)
// 1.41b: "SET AUTO-ARM PASS"の"BACK"ボタンが、第1でなく第2オプションメニューに戻るよう修正 (16/11/2016, 16:21)
// 1.42b: 第3オプションメニュー完成。"SET TIME"と"SET DATE"ボタンを含む (16/11/2016, 16:37)
// 1.43b: ディスアームパスワード入力のクリアボタンが"autoinput"配列をリセットしないバグ修正 (17/11/2016, 00:05)
// 1.44b: "SET AUTO-ARM PASS"ボタンでパスワード変更後、第1でなく第2オプションメニューにリダイレクトするよう修正 (18/11/2016, 10:02)
// 変更ログは最終バージョン1.00までここに記録。1.00以降はSERENA_changelog.txtに記録。
// 1.00: 完全ディスアーム機能の設計。6桁パスワード必須、アラームプログラムのメインメニューに遷移。ボタンクリック毎にブザー音 (8/1/2017, 20:53)
////////// FUTURE VERSIONS //////////
// * 新バージョンのアイデアをここに記載 *
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <UTFT.h>
#include <URTouch.h>
UTFT myGLCD(ITDB32WC, 38, 39, 40, 41);
URTouch myTouch(6, 5, 4, 3, 2);
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
int x, y;
int armpass[4] = {1, 2, 3, 4};
int autopass[5] = {1, 2, 3, 4, 5};
int manualpass[6] = {1, 1, 1, 1, 1, 1};
int timeinput[4];
int arminput[4];
int autoinput[5];
int manualinput[6];
int autolength = 0;
int manuallength = 0;
int buzzerpin = 8;
int systarm = 9;
int serenapin = 10;
int buttonpin = 13;
int autoarmtime = 40;
int autoarmtimemem = autoarmtime;
int month = 1, day = 1, year = 2016;
// カスタム関数
void alarmtitle() {
myGLCD.setFont(SmallFont);
myGLCD.setBackColor(0, 0, 0);
myGLCD.clrScr();
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.drawLine(0, 14, 319, 14);
myGLCD.print("SERENA ALARM SYSTEM v.1.01", CENTER, 1);
}
void title() { // 名称表示が不要な時のため分離
alarmtitle();
myGLCD.print("BY MICHAEL MARINIS", CENTER, 30);
}
void drawbutton1() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(20, 60, 300, 100);
}
void drawbutton2() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(20, 120, 300, 160);
}
void drawdisarm() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(20, 180, 300, 220);
myGLCD.setColor(0, 0, 0);
myGLCD.setBackColor(192, 192, 192);
myGLCD.setFont(BigFont);
myGLCD.print("DISARM", CENTER, 193);
}
void drawback() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(20, 180, 150, 210);
myGLCD.setBackColor(192, 192, 192);
myGLCD.setColor(0, 0, 0);
myGLCD.setFont(SmallFont);
myGLCD.print("BACK", 70, 190);
}
void drawno() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(20, 180, 150, 210);
myGLCD.setBackColor(192, 192, 192);
myGLCD.setColor(0, 0, 0);
myGLCD.setFont(SmallFont);
myGLCD.print("NO", 80, 190);
}
void drawyes() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(170, 180, 300, 210);
myGLCD.setBackColor(192, 192, 192);
myGLCD.setColor(0, 0, 0);
myGLCD.setFont(SmallFont);
myGLCD.print("YES", 225, 190);
}
void drawnext() {
myGLCD.setColor(192, 192, 192);
myGLCD.fillRoundRect(170, 180, 300, 210);
myGLCD.setBackColor(192, 192, 192);
myGLCD.setColor(0, 0, 0);
myGLCD.setFont(SmallFont);
myGLCD.print("NEXT", 220, 190);
}
void drawbuttons() {
myGLCD.clrScr();
int z;
myGLCD.setFont(SmallFont);
for (z = 0; z < 3; z++) {
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(20 + (z * 60), 15, 60 + (z * 60), 55);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.printNumI(z + 1, 37 + (z * 60), 30);
}
for (z = 0; z < 3; z++) {
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(20 + (z * 60), 70, 60 + (z * 60), 110);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.printNumI(z + 4, 37 + (z * 60), 85);
}
for (z = 0; z < 3; z++) {
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(20 + (z * 60), 125, 60 + (z * 60), 165);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.printNumI(z + 7, 37 + (z * 60), 140);
}
for (z = 0; z < 3; z++) {
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(190, 15 + (z * 55), 290, 55 + (z * 55));
}
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(20, 175, 80, 205);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.printNumI(0, 48, 185);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
myGLCD.print("CLEAR", 221, 30);
myGLCD.print("OK", 232, 85);
myGLCD.print("BACK", 225, 140);
}
void optionsmenuend() {
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.drawLine(0, 14, 319, 14);
myGLCD.setBackColor(255, 0, 0);
alarmtitle();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 0, 0);
myGLCD.setBackColor(0, 0, 0);
myGLCD.print("OPTIONS MENU", CENTER, 20);
drawbutton1(); drawbutton2(); drawback();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
}
void optionsmenu() {
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.drawLine(0, 14, 319, 14);
myGLCD.setBackColor(255, 0, 0);
alarmtitle();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 0, 0);
myGLCD.setBackColor(0, 0, 0);
myGLCD.print("OPTIONS MENU", CENTER, 20);
drawbutton1(); drawbutton2(); drawback(); drawnext();
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(255, 0, 0);
}
void drawoptions() {
myGLCD.setFont(BigFont);
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(20, 70, 300, 120);
myGLCD.setBackColor(255, 0, 0);
myGLCD.setColor(255, 255, 255);
myGLCD.print("OPTIONS", CENTER, 90);
}
void drawarm() {
myGLCD.setFont(BigFont);
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect(20, 140, 300, 190);
myGLCD.setBackColor(255, 0, 0);
myGLCD.setColor(255, 255, 255);
myGLCD.print("ARM", CENTER, 160);
}
void printmonth(int i) {
myGLCD.setColor(255, 0, 0);
myGLCD.setBackColor(0, 0, 0);
myGLCD.setFont(BigFont);
if (i == 1) myGLCD.print("JANUARY", 95, 100);
if (i == 2) myGLCD.print("FEBRUARY", 95, 100);
if (i == 3) myGLCD.print("MARCH", 95, 100);
if (i == 4) myGLCD.print("APRIL", 95, 100);
if (i == 5) myGLCD.print("MAY", 70, 100);
if (i == 6) myGLCD.print("JUNE", 95, 100);
if (i == 7) myGLCD.print("JULY", 95, 100);
if (i == 8) myGLCD.print("AUGUST", 95, 100);
if (i == 9) myGLCD.print("SEPTEMBER", 95, 100);
if (i == 10) myGLCD.print("OCTOBER", 95, 100);
if (i == 11) myGLCD.print("NOVEMBER", 95, 100);
if (i == 12) myGLCD.print("DECEMBER", 95, 100);
}
// int updatedate(int d, int m, int y) { ... } // コメントアウト部分省略
int armupdate(int i, int armlength) {
if (armlength < 4) {
if (armlength == 0) { arminput[0] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[0], 100, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return arminput[0]; }
if (armlength == 1) { arminput[1] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[1], 135, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return arminput[1]; }
if (armlength == 2) { arminput[2] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[2], 170, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return arminput[2]; }
if (armlength == 3) { arminput[3] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[3], 205, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return arminput[3]; }
}
}
int autoarmupdate(int i, int timelength) {
if (timelength < 5) {
if (timelength == 1) { timeinput[0] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(timeinput[0], 100, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return timeinput[0]; }
if (timelength == 2) { timeinput[1] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(timeinput[1], 135, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return timeinput[1]; }
if (timelength == 3) { timeinput[2] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(timeinput[2], 170, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return timeinput[2]; }
if (timelength == 4) { timeinput[3] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(timeinput[3], 205, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return timeinput[3]; }
}
}
int autoupdate(int i, int autolength) {
if (autolength < 5) {
if (autolength == 0) { autoinput[0] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(autoinput[0], 100, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return autoinput[0]; }
if (autolength == 1) { autoinput[1] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(autoinput[1], 135, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return autoinput[1]; }
if (autolength == 2) { autoinput[2] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(autoinput[2], 170, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return autoinput[2]; }
if (autolength == 3) { autoinput[3] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(autoinput[3], 205, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return autoinput[3]; }
if (autolength == 4) { autoinput[4] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(autoinput[4], 240, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return autoinput[4]; }
if (autolength == 5) { autoinput[5] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(autoinput[5], 275, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return autoinput[5]; }
}
}
int manualupdate(int i, int manuallength) {
if (manuallength < 6) {
if (manuallength == 0) { manualinput[0] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(manualinput[0], 100, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return manualinput[0]; }
if (manuallength == 1) { manualinput[1] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(manualinput[1], 135, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return manualinput[1]; }
if (manuallength == 2) { manualinput[2] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(manualinput[2], 170, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return manualinput[2]; }
if (manuallength == 3) { manualinput[3] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(manualinput[3], 205, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return manualinput[3]; }
if (manuallength == 4) { manualinput[4] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(manualinput[4], 240, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return manualinput[4]; }
if (manuallength == 5) { manualinput[5] = i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(manualinput[5], 275, 185); digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); return manualinput[5]; }
}
}
void setup() {
myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_EXTREME);
pinMode(buzzerpin, OUTPUT);
pinMode(systarm, OUTPUT);
pinMode(serenapin, OUTPUT);
digitalWrite(buzzerpin, HIGH); delay(1000); digitalWrite(buzzerpin, LOW);
title();
drawoptions();
drawarm();
}
void loop() {
while (true) {
mainmenu:
if (myTouch.dataAvailable()) {
myTouch.read();
x = myTouch.getX();
y = myTouch.getY();
// OPTIONSボタン
if ((x >= 20) && (x <= 300) && (y >= 70) && (y <= 120)) {
options:
optionsmenu();
myGLCD.setBackColor(192, 192, 192);
myGLCD.setColor(0, 0, 255);
myGLCD.print("SET MANUAL-ARM PASSWORD", CENTER, 73);
myGLCD.print("SET ARM PASSWORD", CENTER, 133);
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read();
x = myTouch.getX(); y = myTouch.getY();
// SET MANUAL PASSWORDボタン
if ((x >= 20) && (x <= 300) && (y >= 60) && (y <= 100)) {
title();
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 0, 0);
myGLCD.print("ENTER 6-DIGIT PASSWORD", CENTER, 119);
drawback(); drawnext();
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x = myTouch.getX(); y = myTouch.getY();
if ((x >= 20) && (x <= 150) && (y >= 180) && (y <= 210)) {
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); goto options;
}
if ((x >= 170) && (x <= 300) && (y >= 180) && (y <= 210)) { // NEXTボタン
for (int o = 0; o < 6; o++) { manualinput[o] = 0; }
passinput:
int buf = 0;
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.drawLine(0, 14, 319, 14);
myGLCD.setColor(255, 255, 255);
drawbuttons();
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
myGLCD.setFont(SevenSegNumFont);
myGLCD.setBackColor(0, 0, 0);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x = myTouch.getX(); y = myTouch.getY();
// ボタン 1-3
if ((y >= 15) && (y <= 55)) {
if ((x >= 20) && (x <= 60)) { manualupdate(1, buf); buf++; delay(85); }
if ((x >= 80) && (x <= 120)) { manualupdate(2, buf); buf++; delay(85); }
if ((x >= 140) && (x <= 180)) { manualupdate(3, buf); buf++; delay(85); }
}
// ボタン 4-6
if ((y >= 70) && (y <= 110)) {
if ((x >= 20) && (x <= 60)) { manualupdate(4, buf); buf++; delay(85); }
if ((x >= 80) && (x <= 120)) { manualupdate(5, buf); buf++; delay(85); }
if ((x >= 140) && (x <= 180)) { manualupdate(6, buf); buf++; delay(85); }
}
// ボタン 7-9
if ((y >= 125) && (y <= 165)) {
if ((x >= 20) && (x <= 60)) { manualupdate(7, buf); buf++; delay(85); }
if ((x >= 80) && (x <= 120)) { manualupdate(8, buf); buf++; delay(85); }
if ((x >= 140) && (x <= 180)) { manualupdate(9, buf); buf++; delay(85); }
}
// 0ボタン
if ((x >= 20) && (x <= 80) && (y >= 175) && (y <= 205)) { manualupdate(0, buf); buf++; delay(85); }
// OKボタン
if ((x >= 190) && (x <= 290) && (y >= 70) && (y <= 110)) {
bool flag = true;
for (int t = 0; t < 6; t++) { if (manualinput[t] != manualpass[t]) { flag = false; } }
if (flag == true) { // 正しいパスワード
for (int i = 0; i < 6; i++) { manualinput[i] = 0; }
myGLCD.clrScr();
myGLCD.setFont(BigFont);
myGLCD.print("PASS OK!", CENTER, 100);
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW); delay(2000);
title();
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 0, 0);
myGLCD.print("ENTER NEW PASSWORD", CENTER, 119);
drawback(); drawnext();
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x = myTouch.getX(); y = myTouch.getY();
int buf = 0;
if ((x >= 170) && (x <= 300) && (y >= 180) && (y <= 210)) {
newmanpassinput:
myGLCD.setFont(SmallFont);
myGLCD.setColor(255, 255, 255);
myGLCD.drawLine(0, 14, 319, 14);
myGLCD.setColor(255, 255, 255);
drawbuttons();
digitalWrite(buzzerpin, HIGH); delay(50); digitalWrite(buzzerpin, LOW);
myGLCD.setFont(SevenSegNumFont);
myGLCD.setBackColor(0, 0, 0);
while (true) {
if (myTouch.dataAvailable()) {
myTouch.read(); x = myTouch.getX(); y = myTouch.getY();
// ボタン 1-3
if ((y >= 15) && (y <= 55)) {
if ((x >= 20) && (x <= 60)) { manualupdate(1, buf); buf++; delay(85); }
if ((x >= 80) && (x <= 120)) { manualupdate(2, buf); buf++; delay(85); }
if ((x >= 140) && (x <= 180)) { manualupdate(3, buf); buf++; delay(85); }
}
// ボタン 4-6
if ((y >= 70) && (y <= 110)) {
if ((x >= 20) && (x <= 60)) { manualupdate(4, buf); buf++; delay(85); }
if ((x >= 80) && (x <= 120)) { manualupdate(5, buf); buf++; delay(85); }
if ((x >= 140) && (x <= 180)) { manualupdate(6, buf); buf++; delay(85); }
}
// ボタン 7-9
if ((y >= 125) && (y <= 165)) {
if ((x >= 20) && (x <= 60)) { manualupdate(7, buf); buf++; delay(85); }
if ((x >= 80) && (x <= 120)) { manualupdate(8, buf); buf++; delay(85); }
if ((x >= 140) && (x <= 180)) { manualupdate(9, buf); buf++; delay(85); }
}
// 0ボタン
if ((x >= 20) && (x <= 80) && (y >= 175) && (y <= 205)) { manualupdate(0, buf); buf++; delay(85); }
// 新パスワードOKボタン
if ((x >= 190) && (x <= 290) && (y >= 70) && (y <= 110)) {
buf = 0;
myGLCD.clrScr();
title();
// ... 以下省略(ファイルが切り詰められています。全文を確認するにはダウンロードしてください)
製造プロセス
- JavaとReactive Blocksでモーション検知アラームシステム - Raspberry Piに展開しSMS送信
- ArduinoだけでDTMFデコーダーを構築 – 外付けIC不要
- Arduinoで作る全自動植物水やりシステム - 湿度センサーとRTCで最適制御
- ArduinoとRFモジュールでアラームシステムのセキュリティを評価する
- スマート地下室換気システム:Arduinoで湿度制御
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
- ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
- Arduino衝突警告システム – 超音波センサーで視覚・聴覚アラート
- Arduinoで作るセキュリティシステム:超音波センサーとサーボで広範囲監視・アラート
- DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
- 安全性と信頼性のためのフェイルセーフ制御システム設計

