정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

rgb led모듈과 버튼으로 순발력 테스트
minifo | 2018-07-10

1. 프로젝트 사용한 보드 종류

  아두이노 메가

 

 

2. 사용한 개발 프로그램명

  아두이노 IDE

 

 

3. 사용한 센서 모델명

  rgb led 모듈, 버튼

 

4. 연결한 회로 설명 (또는 이미지)

 

 

5. 소스코드 (주석 필수)

 

void setRandom() // R G B 랜덤 led on 
{
  int randNumber = random(1, 4); // 1~3
  switch (randNumber)
  {
    case 1:
      digitalWrite(redPin, HIGH);
      digitalWrite(greenPin, LOW);
      digitalWrite(bluePin, LOW);
      redCheck = true;
      delay(1000);
      break;

    case 2:
      digitalWrite(redPin, LOW);
      digitalWrite(greenPin, HIGH);
      digitalWrite(bluePin, LOW);
      greenCheck = true;
      delay(1000);
      break;

    case 3:
      digitalWrite(redPin, LOW);
      digitalWrite(greenPin, LOW);
      digitalWrite(bluePin, HIGH);
      blueCheck = true;
      delay(1000);
      break;
  }
}

 

void btnPush() // 버튼 push
{
  if (digitalRead(redPin) == HIGH && redCheck == true)  // R 켜져있고 redCheck 가 true일때
  {
    if (digitalRead(r1) == LOW) // r1 버튼을 누르면
    {
      digitalWrite(redPin, LOW); // r led 끄기
      redCheck = false; // 한번만 실행되도록 조건
      Serial.println("R1");  // 확인용 R1 출력
      delay(1000);
    }
    else if (digitalRead(r2) == LOW) // r2 버튼을 누르면
    {
      digitalWrite(redPin, LOW);
      redCheck = false;
      Serial.println("R2");
      delay(1000);
    }
  }
  else if (digitalRead(redPin) == LOW && redCheck == false)
  {
    redCheck = true;
  }
}

 

6. 문제점 및 에러 내용

  빨강 초록 파랑 각각의 led가 켜졌을때

  버튼을 눌러 해당 led를 끄는 기능을 구현하고 싶습니다.

 

setRandom()의 delay(1000)때문에 버튼을 눌러도 인식이 되지 않고 1초가 지나는 시점에 누르고 있으면 R1 혹은 R2가 출력이 됩니다.

delay가 없으면 rgb 세가지의 색이 동시에 계속 나옵니다.

 

rgb의 색상이 한개씩만 나오고 1초가 되기 전에 누르면 꺼질 수 있도록 하려면 어떻게 해야 하는지 조언이 필요합니다.

프로필사진

브레인 2018-07-26 09:25:49

delay(1000);을 빼세요.

 

그리고 소스 전체를 올려야 자문이 가능합니다.

이전글   |    오렌지보드BLE간 1:N 통신 2018-07-06
다음글   |    앱인벤터 센서 2개 2018-07-15