BASIC4MCU | 질문게시판 | 답변 : 답변 : 답변 : 스위치 입력제어 궁금해요
페이지 정보
작성자 master 작성일2019-01-14 14:28 조회3,330회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=7441
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-01-14 오후 2:20:04// by Ok-Hyun Park//int sw[] ={2,3, 4}; // 스위치 핀int led[]={8,9,10}; // led 핀//int count=0,mode=0;bool flag=0;long t;//void setup(){for(int i=0; i<3; i++){pinMode(sw[i],INPUT_PULLUP); // 스위치 입력으로 설정pinMode(led[i],OUTPUT); // LED 출력으로 설정}t=millis();}//void loop(){//스위치 입력int n=0;if(digitalRead(sw[0])==LOW)n|=1;if(digitalRead(sw[1])==LOW)n|=2;if(digitalRead(sw[2])==LOW)n|=4;//------------------------------------//1번 스위치만 입력하는 것을 체크if(n==1){if(flag==0){ flag=1; t=millis();if(++count>11)count==0;///*if(count<5)mode=0;else if(count<11)mode=1;*/else mode=0;}}if(n==3){if(flag==0){ flag=1; t=millis();if(++count>11)count==0;//if(count<5)mode=0;else if(count<30)mode=1;else mode=2;}}else{ flag=0; }//------------------------------------if(mode==0){digitalWrite(led[0],0); digitalWrite(led[2],0);if(millis()-t>500){ t=millis();digitalWrite(led[1],!digitalRead(led[1]));}}else if(mode==1){digitalWrite(led[0],0); digitalWrite(led[1],0);if(millis()-t>500){ t=millis();digitalWrite(led[2],!digitalRead(led[2]));}}else{ // mode=2;digitalWrite(led[1],0); digitalWrite(led[2],0);if(millis()-t>500){ t=millis();digitalWrite(led[0],!digitalRead(led[0]));}}//------------------------------------delay(50);}//스위치 1번이 들어오면 계속 1번 LED을 깜박이고 스위치 1번과 2번이 들어오면2번 LED를 5회 깜박이다 0번 LED를 계속 깜박이게 하려고 조금 수정해봤습니다.들어오는 입력을 카운터가 다 되기전에 바꾸니 모드가 바뀌지 않고계속 0번 LED가 조금더 빠른 속도로 깜박이거나 아예 입력을 받지 않고 멈춰버립니다.보드에 있는 리셋을 누르면 초기상태는 돌아옵니다.
루프함수 실행 주기는 아래에 있는 50ms와 비슷합니다.
1번과 2번 스위치를 동시에 누른다고 했는데요
동시에 누르는 것이 쉽지 않습니다.
1번을 먼저 누르고
2번을 누른 후
1번을 떼고나서 2번을 떼세요
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-01-14 오후 2:34:29// by Ok-Hyun Park//int sw[] ={2,3, 4}; // 스위치 핀int led[]={8,9,10}; // led 핀//int count=0,mode=0;bool flag1=0,flag3=0;long t;//void setup(){for(int i=0; i<3; i++){pinMode(sw[i],INPUT_PULLUP); // 스위치 입력으로 설정pinMode(led[i],OUTPUT); // LED 출력으로 설정}t=millis();}//void loop(){//스위치 입력int n=0;if(digitalRead(sw[0])==LOW)n|=1;if(digitalRead(sw[1])==LOW)n|=2;if(digitalRead(sw[2])==LOW)n|=4;//------------------------------------//1번 스위치만 입력하는 것을 체크if(n==1){if(flag1==0){ flag1=1; t=millis(); mode=1; }}else{ flag1=0; }//------------------------------------if(n==3){if(flag3==0){ flag3=1; t=millis(); mode=3; count=0; }}else{ flag3=0; }//------------------------------------if(mode==0){ // 초기상태 LED[0] 점멸digitalWrite(led[1],0); digitalWrite(led[2],0);if(millis()-t>500){ t=millis(); digitalWrite(led[0],!digitalRead(led[0])); }}//------------------------------------else if(mode==1){ // 스위치 1번이 들어오면 LED[1] 점멸digitalWrite(led[0],0); digitalWrite(led[2],0);if(millis()-t>500){ t=millis(); digitalWrite(led[1],!digitalRead(led[1])); }}//------------------------------------else if(mode==3){ // 스위치 1번&2번 동시에 들어오면digitalWrite(led[0],0); digitalWrite(led[1],0);if(millis()-t>500){ t=millis();digitalWrite(led[2],!digitalRead(led[2])); // LED[2] 점멸if(++count>=10)mode=0; // 5회가 지나면 mode=0}}//------------------------------------delay(50);}
댓글 0
조회수 3,330등록된 댓글이 없습니다.