정보나눔

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

아두이노 딜레이 인터럽트 질문드려요
아두이노뉴비 | 2019-09-10
 

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

  아두이노 UNO

 

 

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

  아두이노 IDE

 

 

3. 사용한 센서 모델명

  HC-06 블루투스 모듈

 

 

 

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

 

 

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

 

#include <SoftwareSerial.h>

SoftwareSerial bluetooth(2, 3); //   2번핀고3번핀으로 RX TX 통신

int sensor = A0;                   // A0 을 조도센서 읽어드림
int sensorValue;                  // sencorValue 선언


void setup()
{
  Serial.begin(9600);
  bluetooth.begin(9600);

  pinMode(4, OUTPUT); // LED OUTPUT     1번째 LED 레드
  pinMode(5, OUTPUT); // LED OUTPUT     1번째 LED 그린
  pinMode(6, OUTPUT); // LED OUTPUT     1번째 LED 블루
  pinMode(7, OUTPUT); // LED OUTPUT     2,3번째 LED 레드 
  pinMode(8, OUTPUT); // LED OUTPUT     2,3번째 LED 그린
  pinMode(9, OUTPUT); // LED OUTPUT     2,3번째 LED 블루 
  pinMode(10, OUTPUT); // LED OUTPUT    4번째 LED 레드
  pinMode(11, OUTPUT); // LED OUTPUT    4번째 LED 그린
  pinMode(12, OUTPUT); // LED OUTPUT    4번째 LED 블루
  
  
  
  
}

void loop()
{
   sensorValue = analogRead(sensor);            //sensorValue 값을 아날로그신호(sensor)로 정의
  bluetooth.print(sensorValue);                      //sensorValue값 (A0신호) 블루투스모니터 출력
  delay(1000);
   
  
  char val = bluetooth.read();

  if (bluetooth.available())
  {
    Serial.write(bluetooth.read());
  }

  if(val == 'r')
  {
    digitalWrite(4,HIGH);
    digitalWrite(7,HIGH);
    digitalWrite(10,HIGH);
    
  }
  if(val == 'R')
  {
    digitalWrite(4,LOW);
    digitalWrite(7,LOW);
    digitalWrite(10,LOW);
    
    
  }

  if(val == 'b')
  {
    digitalWrite(6,HIGH);
    digitalWrite(9,HIGH);
    digitalWrite(12,HIGH);
    
  }
  if(val == 'B')
  {
    digitalWrite(6,LOW);
    digitalWrite(9,LOW);
    digitalWrite(12,LOW);
    
  }
   if(val == 'g')
  {
    digitalWrite(5,HIGH);
    digitalWrite(8,HIGH);
    digitalWrite(11,HIGH);
    
  }
  if(val == 'G')
  {
    digitalWrite(5,LOW);
    digitalWrite(8,LOW);
    digitalWrite(11,LOW);
    
  }
    if(val == 'e')
  {
    
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
     digitalWrite(7, LOW);
     digitalWrite(8, LOW);
     digitalWrite(9, LOW);
     digitalWrite(10, LOW);
     digitalWrite(11, LOW);
     digitalWrite(12, LOW);
     
  }
  if(val == 'c')
  {
     
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
     digitalWrite(7, LOW);
     digitalWrite(8, LOW);
     digitalWrite(9, LOW);
     digitalWrite(10, LOW);
     digitalWrite(11, LOW);
     digitalWrite(12, LOW);
    
    
  }

   if(val == 'X')
  {
     digitalWrite(7, LOW);
     digitalWrite(8, LOW);
     digitalWrite(9, LOW);
     
  }

  if(val == 'x')
  {
     digitalWrite(7, HIGH);
     digitalWrite(8, HIGH);
     digitalWrite(9, HIGH);
    
  }

  if(val == 'y')
  {
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    
    
  }

  if(val == 'Y')
  {
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
     digitalWrite(7, LOW);
     digitalWrite(8, LOW);
     digitalWrite(9, LOW);
    
    
  }

  if(val == 'Z')
  {
    
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
     digitalWrite(7, LOW);
     digitalWrite(8, LOW);
     digitalWrite(9, LOW);
     digitalWrite(10, LOW);
     digitalWrite(11, LOW);
     digitalWrite(12, LOW);
     
    
    
  }

   if(val == 'z')
  {
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(12, HIGH);
   
    
    
  }

  else if(val == 'f')
  {
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(12, HIGH);
    
  }

  
  
}

 

6. 문제점 및 에러 내용

  소스코드 상 문제는 없으나 소스를 보게되면 조도센서칸에 딜레이1000 을 주었는데

   이 딜레이가 전체 소스에 영향을 끼치게 되어 조도센서 뿐만 아니라   

   LED를 껏다 켰다 할때 도 늦어져서 다른 방법을 알아보는데 방법을 찾지 못해 질문드립니다 

  조도센서에만 딜레이가 적용이 되고 LED ON OFF 시에는 적용이 되지 않는 방법으로 소스코드를 작성하고싶습니다
   인터럽트를 쓰라고 조언을 교수님께 받았는데 어떻게 적용해야할지 모르겠습니다.

   그리고 딜레이를 변경시 어플내에서 조도센서값이 3자리가 아닌 8자리 그이상으로 1줄씩 계속 나와서 

  그부분도 알고싶습니다

 

이전글   |    아두이노 RC카 블루투스를 이용한 초음파센서 제어... 2019-09-09
다음글   |    보드 Arduino/Genuino Uno 컴파일 에러. 2019-09-11