工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム

コンポーネントと用品

SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム Arduino Mega 2560 ×1
SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム 3.2インチ TFT LCD タッチスクリーン ×1

アプリとオンラインサービス

SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム Arduino IDE

このプロジェクトについて

これまで多くのアラームシステムを見てきましたが、それらが提供できる機能を全て、そして私の独自機能も含めて、単一のArduinoボードに詰め込み、アラームのコントロールパネルとして機能させるのは良いアイデアだと考えました。

特に難しいことはありません。ボード本体と3.2インチタッチスクリーンを購入するだけです。スクリーンを動作させるにはライブラリが必要です。Henning Carlsen氏の全ライブラリに大感謝!クレジット欄に彼のウェブサイトへのリンクがあります。

プログラム

完成までにかなり時間がかかりました。コードで混乱しないでください。必要な時は必ずコメントを入れています!

アラームの主な機能

3種類のパスワードを実装しました。4桁、5桁、6桁です。これらは多いように思えますが、将来のアップデートで4桁コードを無効化するオプションをユーザーに提供する予定です。

アラームは自動アーム機能も備えています。5桁コードを入力するとプログラムがカウントダウンを開始(デフォルト40秒)。このカウントダウンが終了すると、アラームが自動的にアームされます。システムのアームを忘れがちな場合に便利です。

オプションメニュー

オプションメニューでは、全3種類のパスワードと自動アーム時間を変更できます。

今後のアップデート予定

今後のアップデートには、日付/時刻設定、SDカードサポート(停電時のデータ消失防止)、自動アーム機能の無効化オプション、4桁パスワードの無効化オプションなどが含まれます。

デモ動画

コード

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();
                                        // ... 以下省略(ファイルが切り詰められています。全文を確認するにはダウンロードしてください)

製造プロセス

  1. JavaとReactive Blocksでモーション検知アラームシステム - Raspberry Piに展開しSMS送信
  2. ArduinoだけでDTMFデコーダーを構築 – 外付けIC不要
  3. Arduinoで作る全自動植物水やりシステム - 湿度センサーとRTCで最適制御
  4. ArduinoとRFモジュールでアラームシステムのセキュリティを評価する
  5. スマート地下室換気システム:Arduinoで湿度制御
  6. Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
  7. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
  8. Arduino衝突警告システム – 超音波センサーで視覚・聴覚アラート
  9. Arduinoで作るセキュリティシステム:超音波センサーとサーボで広範囲監視・アラート
  10. DS1302 RTCとArduino UNOで作る信頼性の高い目覚まし時計
  11. 安全性と信頼性のためのフェイルセーフ制御システム設計