-
버튼과 인터럽트Arduino/Button 2020. 10. 23. 18:23
버튼이 눌리면, 값을 증가하는 예제
소스 코드
더보기void setup() { // put your setup code here, to run once: Serial.begin(9600); // 2번핀이 0번 인터럽트를 의미한다. // 인터럽트는 2번핀과 3번핀에만 적용된다. pinMode(2,INPUT_PULLUP); // 인터럽트(CHANGE, FALLING, RISING,LOW) attachInterrupt(0,func, CHANGE); // 인터럽트 발생 시키는 함수. 0번째 인터럽트 // 인터럽트는 2개만 발생가능 0과1 // CHANGE상태일때 인터럽트 발생(값이 바뀔 때) // 인터럽트 시,func 함수 호출 } int cnt = 0; void loop() { // put your main code here, to run repeatedly: Serial.println("*******"); delay(1000); } void func() { // 버튼이 눌리면 if (!digitalRead(10)){ cnt += 100; Serial.println(cnt); } }
각 버튼의 눌림에 따라 LCD에 출력되는 글자의 빠르기 조절.
LCD에 대한 내용은 아래에서 참고하자.
designatedroom87.tistory.com/217?category=898308
소스 코드
더보기// 각 버튼의 눌림에 따라 LCD에 출력되는 글자의 빠르기 조절. // 전화번호lcd속도조절 // 풀업저항으로 설정한다. // LCD의 RX선을 아두이노의 7번핀에 연결 // 풀업 저항이므로 버튼이 눌리면 0을 리턴해야 한다. #include <SoftwareSerial.h> SoftwareSerial lcd = SoftwareSerial(6,7);//rx,tx String tel = "010-1234-5678"; int i = 1; int t = 1000; void setup() { lcd.begin(9600); Serial.begin(9600); pinMode(2,INPUT_PULLUP); pinMode(3,INPUT_PULLUP); attachInterrupt(0,incre, CHANGE); // 2번핀의 버튼 // attachInterrupt(1,dec, CHANGE); // 3번핀의 버튼 attachInterrupt(1,dec, FALLING); // 3번핀의 버튼 } // 2번 버튼이 눌릴 때 호출되는 함수 void incre() { t = t + 100; if (2000 < t){t = 2000;} Serial.println(t); delay(300); } // 3번 버튼이 눌릴 때 호출되는 함수 void dec() { t = t - 100; if (t < 0){t = 0;} Serial.println(t); delay(300); } void loop() { lcd.print("$CLEAR\r\n"); lcd.print("$GO 1 " + String(i)+"\r\n"); lcd.print("$PRINT "+ tel +"\r\n"); i++; delay(t); if(i==18){i=1;} }
인터럽트는 2개만 사용할 수 있다고 하였는데, 하나의 인터럽트를 가지고 여러 제어를 할 수 있는 예제
버튼의 클릭 회수에 따른 제어를 해보자.
소스 코드
더보기// 하나의 인터럽트로 여러 인터럽트 제어하는 방법 // 인터럽트는 2개만 제어 가능. 그래서 인터럽트를 다룰 다른 방법도 생각해보자. void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(2, INPUT_PULLUP); // 2번핀에 버튼을 연결 attachInterrupt(0,menu, FALLING); } int m = -1; /* 버튼을 클릭하면 연속적으로 나오는 것을 제어하기 위해 사용한 변수이다. 아래의 두 변수들이 있는 곳을 제거하고 실행해보면 알 수 있다. 컴퓨터의 속도가 너무 빨라서 이를 제어하기 위함이다. */ int current_time = 0; // 현재 시간 int past_time = 0; // 이전 시간 void menu() { current_time = millis(); // 현재의 시간을 저장 // 1초의 간격을 준다. if (current_time - past_time > 1000) { m += 1; m = m % 4; // 메뉴가 4개면, 메뉴의 개수를 넘어가지 못하게 한 방법 Serial.println(String("메뉴번호.") + m); switch(m) { case 0: {Serial.println("1번째 메뉴 호출");} break; case 1: {Serial.println("2번째 메뉴 호출");} break; case 2: {Serial.println("3번째 메뉴 호출");} break; case 3: {Serial.println("4번째 메뉴 호출");} break; default: break; } } past_time = current_time; } void loop() { // put your main code here, to run repeatedly: Serial.println("*******"); delay(1000); }
'Arduino > Button' 카테고리의 다른 글
시간 간격을 통해 버튼을 누를 때마다 LED를 깜빡이게 하기 (0) 2020.10.22 시간 간격을 통해 버튼을 누를 때마다 LED를 반전 (0) 2020.10.22 Pull down & Pull up 저항 (0) 2020.10.22 버튼 누른 회수 구하기 (0) 2020.10.22 버튼 제어 (0) 2020.10.21