질문게시판 > 아두이노 센서 2개 사용 코드 관련 질문

TODAY44 TOTAL124,247
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


BASIC4MCU | 질문게시판 | 아두이노 센서 2개 사용 코드 관련 질문

페이지 정보

작성자 kimhk 작성일2018-05-14 00:49 조회60회 댓글0건

본문

	

지식인에서 답변 감사히 받았었는데, 더 궁금한점이 생겨 방문하였습니다.

 

제가 생각하는 것은

 

1. 터치센서로 on / off 를 만든다(구현)

2. on 하면 9개의 led가 켜진다. (구현/답변해주신 코드에선 현재 터치로 on/off가 이루어지지 않음)

2-1. 사운드 센서를 통해 아날로그 입력을 받고, 예를 들어 값이 높게 검출 시, 상위 3개의 led만 느리게 fade된다. 중간값 검출시 중간 3개의 led가 동일하게 fade 실시. 그보다 아래의 값에선 나머지 3개가 fade

 

여기서 2-1이 가장 어려운 점이라 생각합니다. 제 머리로는 이렇게 짜면 될거라 생각이 드는데,

제가 고수는 아니라 간략히 코드를 짤 수가 없어서 제가 생각한 대로 구문을 짜 보자면 이렇습니다.

(써주신 답변에서 loop 부분만 변형)

 

void loop(){
  Serial.println(sound);
  delay(100);  //  사운드센서의 아날로그 검출에 딜레이 100을 할당하여 1/10초로 값 수용

  touchVal=digitalRead(touch);
  if(touchVal==HIGH&&touchPre==LOW){
    run^=1;
    if(!run)target=0// run=0이면 0% OFF.  // 실제 on/off가 안되지만 된다 가정하에.
  }
  touchPre=touchVal;
  //
  if(run){
    target=analogRead(sound)/4; // 0~1023 -> 0~255. // 현재 사운드 센서는 200~800사이값 검출 _ 200-800 -> 50-200. //상시검출은 300-600대가 반복적으로 파형을 그리며 검출.
  }
  //
  if(target>=50 && target<=125){
  analogWrite(led1,brightness)
  analogWrite(led2,brightness)
  analogWrite(led3,brightness)
  brightness = brightness + fadeAmount;
} // 이렇게 고친 경우 뒤에 다시 {}를 사용하여 몇번 LED는 작동하고 몇번은 꺼진다를 적어주는것이 가능한것인가요? 혹은 for구문의 적용은 개별 if문 마다 적용을 하는것인지요?
  if(target>=126 && target<=170) 
  analogWrite(led4,brightness)
  analogWrite(led5,brightness)
  analogWrite(led6,brightness)
  brightness = brightness + fadeAmount;
  if(target>=171 && target<=200)
  analogWrite(led7,brightness)
  analogWrite(led8,brightness)
  analogWrite(led9,brightness)
  brightness = brightness + fadeAmount;

if (brightness <= 0 || brightness >= 255) { 
    fadeAmount = -fadeAmount;
  }
  delay(50);
  //
}

 

 

답변해주신 코드는 아래와같습니다.

 

 

int touch=12;
int sound=A0;
int led[]={2,3,4,5,6,7,8,9,10};
//
int run=0,touchVal,touchPre=0;
int       target=0,soundPre=0;
//
void setup(){
}
//
void loop(){
  touchVal=digitalRead(touch);
  if(touchVal==HIGH&&touchPre==LOW){
    run^=1;
    if(!run)target=0// run=0이면 0% OFF // run이 0이라면 다 꺼지는것으로 제가 이해하는데, 실제로 터치센서를 만져도 on/off가 진행되지 않습니다.(다른 코드에선 정상작동합니다.)
  }
  touchPre=touchVal;
  //
  if(run){
    target=analogRead(sound)/4; // 0~1023 -> 0~255 
  }
  //
  if(soundPre<target)soundPre++; 
  if(soundPre>target)soundPre--; 
  for(int i=2;i<=10;i++)analogWrite(led[i],1);// UNO로 테스트 중이라 상기 led에서 pwm포트만 살려두고 i=3, i<=10 으로 수정 후 작업하면 사운드 센서와의 연동이 안되고 있습니다.  
  //
  delay(10); // fade 속도
}

 

공부한 바가 적어 읽으시기 다소 불편하실수도 있으리라 생각합니다.

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 0

조회수 60

등록된 댓글이 없습니다.

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.

게시물 검색

Privacy Policy
                   MCU BASIC ⓒ 2017 모바일버전으로보기