BASIC4MCU | 질문게시판 | 아두이노 led 부저 스위치
페이지 정보
작성자 김똘 작성일2023-03-30 18:45 조회260회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=22387
본문
#define LED_PIN_1 11#define LED_PIN_2 10#define LED_PIN_3 9#define LED_PIN_4 6#define LED_PIN_5 5#define LED_PIN_6 4#define PUSH_PIN_1 12#define PUSH_PIN_2 7#define PUSH_PIN_3 3#define BUZ_PIN 13#define NUM_BUTTONS 3int led[NUM_BUTTONS] = {LED_PIN_1, LED_PIN_2, LED_PIN_3};int led2[NUM_BUTTONS] = {LED_PIN_4, LED_PIN_5, LED_PIN_6};int push[NUM_BUTTONS] = {PUSH_PIN_1, PUSH_PIN_2, PUSH_PIN_3};bool state[NUM_BUTTONS] = {false, false, false};bool lastState[NUM_BUTTONS] = {true, true, true};bool buttonReleased[NUM_BUTTONS] = {true, true, true};unsigned long previousTime = 0;const unsigned long interval = 300;void setup() {Serial.begin(9600);for (int i = 0; i < NUM_BUTTONS; i++) {pinMode(led[i], OUTPUT);pinMode(led2[i], OUTPUT);pinMode(push[i], INPUT_PULLUP);}pinMode(BUZ_PIN, OUTPUT);}void loop() {unsigned long currentTime = millis();for (int i = 0; i < NUM_BUTTONS; i++) {if (digitalRead(push[i]) == LOW && buttonReleased[i]) {state[i] = !state[i];buttonReleased[i] = false;}else if (digitalRead(push[i]) == HIGH) {buttonReleased[i] = true;}if (state[i] != lastState[i]) {lastState[i] = state[i];}}if (state[0] == true) {if (currentTime - previousTime >= interval) {for (int i = 0; i < 3; i++) {digitalWrite(led[i], HIGH);delay(300);digitalWrite(led[i], LOW);}delay(300);for (int i = 0; i < 3; i++) {digitalWrite(led[i], LOW);}}}if (state[1] == true) {for (int i = 0; i < 3; i++) {tone(BUZ_PIN, 200 * (i + 1), 300);delay(300);}noTone(BUZ_PIN);delay(300);}if (state[2] == true) {for (int i = 0; i < 3; i++) {digitalWrite(led2[i], HIGH);delay(300);digitalWrite(led2[i], LOW);}delay(300);for (int i = 0; i < 3; i++) {digitalWrite(led2[i], LOW);}}} 첫번째 버튼은 빨간led 3개가 0.3초간 순차점등되었다가 소등되는것을 반복두번재 버튼은 부저가 3단계의 음계가 순차적으로 0.3초간 울리는것을 반복세번째 버튼은 파란 led 3개가 순차적으로 0.3초간 점등되었다가 소등되는것을 반복그리고 각 버튼을 다시 한번 누르면 반복을 중지함.제 목적은 이렇습니다. 그런데 현재 문제는 각 버튼의 기능들은 원하는대로 됐습니다.그러나 첫번째 버튼을 눌러 기능을 동작하고 이어서 두번째 버튼을 누르면 두번째버튼의기능이 같이 반복해야하는데반응이 없습니다.또한 첫번째 버튼을 다시 누르면 반복동작을 멈춰야하는데 멈추질않습니다.delay()때문이라 millis()를 써서 병행하게 해야하는데 어떻게 써야할지 감이 안잡힙니다.
댓글 0
조회수 260등록된 댓글이 없습니다.