제조공정
| × | 1 | ||||
| × | 1 |
|
나는 이전에 많은 경보 시스템을 보았고, 확인하고, 작동 방식을 보고, 나만의 경보 시스템을 만들고 싶다고 결정했습니다. 내 말은, 왜 안되지? 왜 무언가를 가져 와서 더 좋게 만들지 않습니까? 결국 저는 컴퓨터 엔지니어(학부생이지만 곧 바뀔 예정입니다)입니다.
그렇게 해서 이 프로젝트가 실현되었습니다.
나는 많은 시스템과 그들이 실제로 제공할 수 있는 것을 확인했고 알람의 제어판 역할을 할 단일 Arduino 보드에 이러한 모든 기능(및 일부 내 기능)을 넣는 것이 좋은 생각이라고 생각했습니다.피>
여기에 까다로운 것은 없습니다. 3.2인치 터치 스크린과 함께 보드 자체를 구입했습니다. 물론 화면을 작동시키려면 몇 가지 라이브러리가 필요했습니다. 모든 라이브러리에 대해 Henning Carlsen에게 큰 감사를 드립니다! 크레딧에 있는 그의 웹사이트 링크 섹션.
프로그램
이제 완료하는 데 시간이 좀 걸렸습니다. 코드를 혼동하지 마십시오. 필요할 때 항상 주석을 달겠습니다!
알람의 주요 기능
세 가지 다른 암호를 포함하기로 결정했습니다. 4자리, 5자리, 6자리입니다. 이것이 많다는 것을 알고 있지만 향후 업데이트에서 사용자에게 4자리 코드를 비활성화할 수 있는 옵션을 제공할 것입니다.
<울>알람은 자동으로 작동할 수도 있습니다. 5자리 코드를 입력하면 프로그램이 카운트다운을 시작합니다(기본값 40초). 이 카운트다운이 끝나면 알람이 자동으로 활성화됩니다. 이것은 일반적으로 시스템을 준비하는 것을 잊었을 때 매우 유용할 수 있습니다.
옵션 메뉴
옵션 메뉴에서 세 가지 비밀번호와 자동 작동 시간을 모두 변경할 수 있습니다.
향후 업데이트
향후 업데이트에는 날짜/시간 설정, SD 카드 지원(정전이 있고 데이터 손실을 원하지 않는 경우), 자동 무장 비활성화 옵션, 4자리 패스 비활성화 옵션 등이 포함됩니다. .
쇼케이스 비디오
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////SERENA 경보 시스템//저자:Michael Marinis//Copyright (C)2016 Michael Marinis. All Rights Reserved//웹사이트:http://www.youtube.com/SauRONmiKE////이것은 사용자에게 경보를 자동으로 작동시킬 수 있는 기능을 제공하는 2가지 기능의 경보 시스템인 SERENA 경보 시스템입니다. 또는 사용자가 원할 때 수동으로 무장합니다.////이 프로그램에는 Henning Karlsen의 UTFT 및 URTouch 라이브러리와 방패가 있는 호환 가능한 LCD//스크린이 필요합니다.////////////// 버전////////////0.10a:첫 번째 빌드, 기본 기능//0.20a:사소한 개선//0.30a:새 수동 암 암호에 대한 입력 및 확인 통과 완료(12/11 /2016)//0.40a:Pass 입력 및 새로운 Auto-Arm 비밀번호 확인 완료(12/11/2016)//1.00a:Arm 비밀번호 입력 및 확인 완료(12/11/2016, 19:16) //1.10a:시스템이 무장되었을 때 메뉴를 완료했습니다(릴레이나 다른 것에 신호를 보내지 않고). 시간과 날짜는 추후 추가될 예정입니다. Disarm 버튼만 추가됨(13/11/2016, 13:04)//1.20a:"DISARM" 버튼이 프로그래밍되었습니다. 5자리 비밀번호를 입력하라는 메시지가 표시됩니다. 알람을 해제하는 비밀번호 확인도 수행됩니다(릴레이 등으로 신호를 보내지 않음) (13/11/2016, 14:15)//1.21a:사용자가 숫자를 입력할 수 없는 문제 수정 비밀번호 확인 후. 사용자가 "아니오"를 누르면 "지우기" 버튼을 누를 때까지 새 암호를 입력할 수 없습니다. 이제 수정되었습니다(2016년 14월 11일, 13:32)//1.22a:자동 작동을 위한 카운트다운 타이머가 이제 완료되었습니다(2016년 14월 11일, 15:46)//1.30a:자동 작동 메뉴가 완성되었습니다. 자동 무장 메뉴는 팔이 다시 자동 무장되기까지 남은 시간(초)을 표시합니다. 전체 해제 메뉴는 라이브러리의 제한으로 인해 푸시 버튼을 통해 액세스할 수 있습니다(14/11/2016, 21:42)//1.31a:"buf" 변수를 "-1"에서 "0"으로 변경했습니다. 이것은 숫자 버튼을 처음 눌러도 아무 작업도 수행하지 않는 버그를 해결했습니다(16/11/2016, 00:45)//1.40b:사용자가 4를 수정할 수 있는 "SET ARM PASSWORD" 버튼 추가 -알람을 작동시키는 데 사용되는 숫자 비밀번호(16/11/2016, 14:33)//1.41b:"SET AUTO-ARM PASS"의 "BACK" 버튼이 이제 옵션 메뉴의 두 번째 페이지로 리디렉션됩니다. 첫 번째 대신 (16/11/2016, 16:21)//1.42b:세 번째 옵션 메뉴를 완료했습니다. "시간 설정" 및 "날짜 설정" 버튼이 포함되어 있습니다(16/11/2016, 16:37)//1.43b:해제 패스 입력의 지우기 버튼이 실제로 "자동 입력"을 재설정하지 않는 버그를 수정했습니다. array (17/11/2016, 00:05)//1.44b:"SET AUTO-ARM PASS" 버튼은 이제 첫 번째 옵션(18 /11/2016, 10:02)//변경 사항은 최종 버전 1.00까지 기록됩니다. 1.00 이후에는 SERENA_changelog.txt 파일에 변경 사항이 기록됩니다.//1.00:전체 무장 해제 기능의 설계. 이 기능을 사용하려면 6자리 암호가 필요하며 알람 프로그램의 기본 메뉴로 이동하라는 메시지가 표시됩니다. 버튼을 클릭할 때마다 부저가 들립니다(2017년 8월 1일, 20:53)//////////향후 버전//////////// *새 버전에 대한 아이디어 여기에 넣을 것입니다*//////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// ////////////#include섹션>#include 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;int 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 월 =1; int day =1;int year =2016;//사용자 정의 함수 무효 경보제목(){ 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("마이클 마리니스에 의해", 중앙, 30);}무효 drawbutton1(){ myGLCD.setColor(192, 192, 192); myGLCD.fillRoundRect(20, 60, 300, 100);}무효 drawbutton2(){ myGLCD.setColor(192, 192, 192); myGLCD.fillRoundRect(20, 120, 300, 160);}무효 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);}결점 무효(){ 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("뒤로", 70, 190);} void drawo(){ 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("아니요", 80, 190);}무효 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("예", 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);}드로버튼 무효화(){ myGLCD.clrScr(); 정수 z; myGLCD.setFont(SmallFont); (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); } (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); } (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); } (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("지우기", 221, 30); myGLCD.print("확인", 232, 85); myGLCD.print("뒤로", 225, 140);} 무효 optionsmenuend(){ myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.drawLine(0, 14, 319, 14); myGLCD.setBackColor(255, 0, 0); 알람제목(); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.print("옵션 메뉴", 중앙, 20); 그리기 버튼1(); 그리기 버튼2(); 약점(); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(255, 0, 0);} 무효 옵션 메뉴(){ myGLCD.clrScr(); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.drawLine(0, 14, 319, 14); myGLCD.setBackColor(255, 0, 0); 알람제목(); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.print("옵션 메뉴", 중앙, 20); 그리기 버튼1(); 그리기 버튼2(); 약점(); 그린 엑스트(); myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(255, 0, 0);}무효 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);}무효 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);} 무효 printmonth(int i){ myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(BigFont); if (i ==1) { myGLCD.print("1월", 95, 100); } if (i ==2) { myGLCD.print("2월", 95, 100); } if (i ==3) { myGLCD.print("3월", 95, 100); } if (i ==4) { myGLCD.print("4월", 95, 100); } if (i ==5) { myGLCD.print("MAY", 70, 100); } if (i ==6) { myGLCD.print("6월", 95, 100); } if (i ==7) { myGLCD.print("7월", 95, 100); } if (i ==8) { myGLCD.print("AUGUST", 95, 100); } if (i ==9) { myGLCD.print("9월", 95, 100); } if (i ==10) { myGLCD.print("10월", 95, 100); } if (i ==11) { myGLCD.print("NOVEMBER", 95, 100); } if (i ==12) { myGLCD.print("12월", 95, 100); }}//int updated(int d, int m, int y)//{// if (y % 4 ==0)//DISEKTO ETOS// {// if ((m>=0) &&(m <=13))// {// if (m ==1 || m ==3 || m ==5 || m ==7 || m ==8 || m ==10 || m ==12)// {// if ((d>=0) &&(d <=32))// {// if (d ==0)// {// d =31;// }// // if (d ==32)// {// d =1;// }// }// }// }// }//DISEKTO ETOS END//}int armupdate(int i, int armlength) { if (팔길이 <4) { if (팔길이 ==0) { arminput[0] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[0], 100, 185); //+35 gia kathe noumero meta digitalWrite(buzzerpin, HIGH); 지연(50); digitalWrite(부저핀, LOW); arminput[0] 반환; } if (팔길이 ==1) { arminput[1] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[1], 135, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); arminput[1]을 반환합니다. } if (팔길이 ==2) { arminput[2] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[2], 170, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); arminput[2] 반환; } if (팔길이 ==3) { arminput[3] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(arminput[3], 205, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 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(시간입력[0], 100, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 시간 입력[0]; } if (시간 길이 ==2) { timeinput[1] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(시간입력[1], 135, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 시간 입력[1]; } if (시간 길이 ==3) { timeinput[2] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(timeinput[2], 170, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 시간 입력[2]; } if (시간 길이 ==4) { timeinput[3] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(timeinput[3], 205, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 시간 입력[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(자동입력[0], 100, 185); //+35 gia kathe noumero meta digitalWrite(buzzerpin, HIGH); 지연(50); digitalWrite(부저핀, LOW); 반환 자동 입력[0]; } if (자동 길이 ==1) { autoinput[1] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(자동입력[1], 135, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 자동 입력[1]; } if (자동 길이 ==2) { autoinput[2] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(자동입력[2], 170, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 자동 입력[2]; } if (자동 길이 ==3) { autoinput[3] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(자동입력[3], 205, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 자동 입력[3]; } if (자동 길이 ==4) { autoinput[4] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(자동입력[4], 240, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 자동 입력[4]; } if (자동 길이 ==5) { autoinput[5] =i; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(자동입력[5], 275, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 자동 입력[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(수동입력[0], 100, 185); //+35 gia kathe noumero meta digitalWrite(buzzerpin, HIGH); 지연(50); digitalWrite(부저핀, LOW); 반환 수동 입력[0]; } if (manuallength ==1) { manualinput[1] =i; //수동길이++; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(수동입력[1], 135, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 수동 입력[1]; } if (manuallength ==2) { manualinput[2] =i; //수동길이++; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(수동입력[2], 170, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 수동 입력[2]; } if (manuallength ==3) { manualinput[3] =i; //수동길이++; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(수동입력[3], 205, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 수동 입력[3]; } if (manuallength ==4) { manualinput[4] =i; //수동길이++; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(수동입력[4], 240, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 수동 입력[4]; } if (manuallength ==5) { manualinput[5] =i; //수동길이++; myGLCD.setColor(255, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(수동입력[5], 275, 185); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 반환 수동 입력[5]; } }} 무효 설정(){ myGLCD.InitLCD(); myGLCD.clrScr(); myTouch.InitTouch(); myTouch.setPrecision(PREC_EXTREME); 핀모드(부저핀, 출력); 핀모드(시스템, 출력); 핀모드(세레나핀, 출력); digitalWrite(부저핀, 높음); 지연(1000); digitalWrite(부저핀, LOW); 제목(); 드로옵션(); drawarm();} 무효 루프(){ while (true) {메인 메뉴:if (myTouch.dataAvailable()) { myTouch.read(); x =myTouch.getX(); y =myTouch.getY(); //옵션 버튼 if ((x>=20) &&(x <=300) &&(y>=70) &&(y <=120)) {옵션:optionsmenu(); myGLCD.setBackColor(192, 192, 192); myGLCD.setColor(0, 0, 255); myGLCD.print("수동 팔 암호 설정", 중앙, 73); myGLCD.print("암 암호 설정", CENTER, 133); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); while (true) { if (myTouch.dataAvailable()) { myTouch.read(); x =myTouch.getX(); y =myTouch.getY(); // 수동 비밀번호 설정 if ((x>=20) &&(x <=300) &&(y>=60) &&(y <=100)) { title(); myGLCD.setBackColor(0, 0, 0); myGLCD.setColor(255, 0, 0); myGLCD.print("6자리 비밀번호를 입력하세요.", 센터, 119); 약점(); 그린 엑스트(); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); while (true) { if (myTouch.dataAvailable()) { myTouch.read(); x =myTouch.getX(); y =myTouch.getY(); if ((x>=20) &&(x <=150) &&(y>=180) &&(y <=210)) { digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 고토 옵션; } if ((x>=170) &&(x <=300) &&(y>=180) &&(y <=210)) //버튼 메뉴 { for (int o =0; o <6; o++) { 수동 입력[o] =0; } 통과 입력:int buf =0; myGLCD.setFont(SmallFont); myGLCD.setColor(255, 255, 255); myGLCD.drawLine(0, 14, 319, 14); myGLCD.setColor(255, 255, 255); 드로버튼(); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); myGLCD.setFont(SevenSegNumFont); myGLCD.setBackColor(0, 0, 0); // while(true) &drawbuttons (TICK!)를 위한 akolouthei 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)) //1 { manualupdate(1, buf); 버프++; 지연(85); } if ((x>=80) &&(x <=120)) //2 { manualupdate(2, buf); 버프++; 지연(85); } if ((x>=140) &&(x <=180)) //3 { manualupdate(3, buf); 버프++; 지연(85); } }//버튼 1-3 END if ((y>=70) &&(y <=110)) //버튼 4-6 { if ((x>=20) &&(x <=60)) // 4 { 수동 업데이트(4, buf); 버프++; 지연(85); } if ((x>=80) &&(x <=120)) //5 { manualupdate(5, buf); 버프++; 지연(85); } if ((x>=140) &&(x <=180)) //6 { manualupdate(6, buf); 버프++; 지연(85); } }//버튼 4-6 END if ((y>=125) &&(y <=165)) //버튼 7-9 { if ((x>=20) &&(x <=60)) // 7 { 수동 업데이트(7, buf); 버프++; 지연(85); } if ((x>=80) &&(x <=120)) //8 { manualupdate(8, buf); 버프++; 지연(85); } if ((x>=140) &&(x <=180)) //9 { manualupdate(9, buf); 버프++; 지연(85); } }//버튼 7-9 END if ((x>=20) &&(x <=80) &&(y>=175) &&(y <=205)) //0 { manualupdate(0, buf); 버프++; 지연(85); } if ((x>=190) &&(x <=290) &&(y>=70) &&(y <=110)) //OK 버튼 { bool 플래그 =true; for (int t =0; t <6; t++) { if (manualinput[t] !=manualpass[t]) { 플래그 =거짓; } } if (flag ==true) //swstos kwdikos { for (int i =0; i <6; i++) { manualinput[i] =0; } myGLCD.clrScr(); myGLCD.setFont(BigFont); myGLCD.print("통과 확인!" , CENTER , 100); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, LOW); 지연(2000); 제목(); myGLCD.setBackColor(0, 0, 0); myGLCD.setColor(255, 0, 0); myGLCD.print("새 비밀번호를 입력하세요", 센터, 119); 약점(); 그린 엑스트(); while (true) { if (myTouch.dataAvailable()) { myTouch.read(); x =myTouch.getX(); y =myTouch.getY(); 정수 버퍼 =0; //EISAGWGH NEOU KWDIKOU 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); 드로버튼(); digitalWrite(부저핀, 높음); 지연(50); digitalWrite(부저핀, 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)) //1 { manualupdate(1, buf); 버프++; 지연(85); } if ((x>=80) &&(x <=120)) //2 { manualupdate(2, buf); 버프++; 지연(85); } if ((x>=140) &&(x <=180)) //3 { manualupdate(3, buf); 버프++; 지연(85); } }//버튼 1-3 END if ((y>=70) &&(y <=110)) //버튼 4-6 { if ((x>=20) &&(x <=60)) // 4 { 수동 업데이트(4, buf); 버프++; 지연(85); } if ((x>=80) &&(x <=120)) //5 { manualupdate(5, buf); 버프++; 지연(85); } if ((x>=140) &&(x <=180)) //6 { manualupdate(6, buf); 버프++; 지연(85); } }//버튼 4-6 END if ((y>=125) &&(y <=165)) //버튼 7-9 { if ((x>=20) &&(x <=60)) // 7 { 수동 업데이트(7, buf); 버프++; 지연(85); } if ((x>=80) &&(x <=120)) //8 { manualupdate(8, buf); 버프++; 지연(85); } if ((x>=140) &&(x <=180)) //9 { manualupdate(9, buf); 버프++; 지연(85); } }//버튼 7-9 END if ((x>=20) &&(x <=80) &&(y>=175) &&(y <=205)) //0 { manualupdate(0, buf); 버프++; 지연(85); } // MPEI를 확인하려면 EDW. THA RWTAW AN O KWDIKOS EINAI ENTAKSEI(2 KOUMPIA, 예 &아니오). AN "예", TOTE THA EPISTREFEI STO ARXIKO MENOU, AN "NO" THA EPISTREFEI STHN EISAGWGH KWDIKOY if ((x>=190) &&(x <=290) &&(y>=70) &&(y <=110) )//새로운 패스 확인 버튼 { buf =0; myGLCD.clrScr(); title();...이 파일은 잘렸습니다. 전체 내용을 보려면 다운로드하십시오.
제조공정
Arduino 및 초음파 센서를 사용한 고속 자동 철도 게이트 컨트롤러 회로 이 튜토리얼에서는 간단하고 효율적인 자동 고속 철도 게이트 컨트롤러 시스템을 설계하는 방법을 배웁니다. 이것은 이 프로젝트에 대한 비교적 간단한 접근 방식이지만 이를 기본 빌딩 블록으로 사용할 수 있으며 추가 수정을 통해 기차가 지나가는 속도 등을 추적할 수도 있습니다. 하지만 튜토리얼로 바로 넘어가기 전에 자동화가 무엇이고 자동화에서 정확히 무엇을 기대할 수 있는지에 대한 아이디어를 얻어야 합니다. 자동화는 기본적으로 인간의 노력/개입을 줄이거나 제거하
초기 홍수 모니터링 시스템 – 회로 및 프로젝트 소스 코드 개발도상국과 비개발도상국 모두에서 홍수는 인명과 동물의 생명과 재산의 손실을 초래하는 대규모 자연 재해입니다. 바다의 지진, 허리케인, 강우 및 기타 자연 재해로 인한 홍수가 매년 세계 여러 지역에서 발생합니다. 강우 시 다양한 지리적 지역의 관리되지 않는 배수 시스템으로 인해 홍수가 발생하고 많은 인명 피해가 발생합니다. 홍수에 대한 조기 경보를 제공할 수 있는 시스템이 있으면 사람들의 생명을 구할 수 있습니다. 기술을 사용하여 수위 상승을 감지하고 사람들에게 미리