질문게시판 > 아두이노 코딩 합치기 질문

TODAY654 TOTAL303,720
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU | 질문게시판 | 아두이노 코딩 합치기 질문

페이지 정보

작성자 master 작성일2018-07-11 13:34 조회312회 댓글0건

본문

	

학교 동아리에서 아두이노를 활용하여 작품을 만드는데 코딩부분에서 막혀 더이상 진행이 안되어 문의드립니다

 

진동센서 코딩과 적외선센서 코딩을 합치려 하는데 제 힘으로는 도저히 못합치겠더라구요,,

 

우선 진동센서 코딩입니다

 

int ledPin = 53; // LED 출력 단자

  

int piezoPin = A0; // 진동센서 의 아날로그 단자

int piezoPin1= A1; // 진동센서1의 아날로그 단자

int piezoPin2= A2; // 진동센서2의 아날로그 단자

int worth = 0; // 진동센서 값을 받기 위해 변수를 초기화

int worth1 = 0; //

int worth2 = 0; // 

int buttonpin = 47; // 스위치의 디지털 단자

 

int a= 0; // 진동센서가 임계값을 넘어갔을 시 이벤트를 유지해주기 위한 변수

 

void setup() { 

 pinMode(ledPin, OUTPUT); // 핀 53번 LED 출력핀 설정

 pinMode(buttonpin,INPUT); // 스위치 47번핀을 입력으로 설정  

 Serial.begin(9600); // PC로 전송 

}

 

void loop() { // 셋팅후 연속적 실행

   worth = analogRead(piezoPin); // A0 핀 값을 판독

   worth1 = analogRead(piezoPin1); // A1핀 값을 판독

   worth2 = analogRead(piezoPin2); // A2핀 값을 판독

   int buttoninput = digitalRead(buttonpin);

   

   if ((worth >= 100)||(worth1 >= 100)||(worth2 >= 100)) { // 임계 값 초과시 이벤트 발생

     a= 1; 

   }

   

   if(a==1){ // a가 1일때 led가 켜짐

    digitalWrite(ledPin, HIGH); 

   }

   

    if(buttoninput == 1){ // 스위치를 누르면 a가0으로 초기화 되면서 불이 꺼짐

      a=0;

    }

 

    if(a==0){

    digitalWrite(ledPin,LOW);

    }

Serial.println(worth); // PC로 값 보내기

Serial.println(worth1); // PC로 값 보내기

Serial.println(worth2); // PC로 값 보내기

 delay(500);

 

}

 

------------------------------------------------------------------------

그리고 적외선 센서 코딩입니다 적외선센서를 2개를 활용하였습니다

 

int led=53; // led를 53번핀에 연결

 

int sensor1=11,sensor2=10; //적외선 센서1과 적외선 센서2를 각각 11,10번에 연결

 

int mode=0; //진동센서의 a의 역할과 같음

 

void setup(){

 

  pinMode(led,OUTPUT);

 

  pinMode(sensor1,INPUT_PULLUP);

 

  pinMode(sensor2,INPUT_PULLUP);

 

}

 

void loop(){

 

  if(mode==0){

 

    if(digitalRead(sensor1)&&digitalRead(sensor2)){ mode=1; } // 센서1과 2에 물체가 감지 되지 않으면 mode=1로 초기화

 

  }

 

  else if(mode==1){ 

 

    if(!digitalRead(sensor1)||!digitalRead(sensor2)){ // 검출 되면

 

      if(!digitalRead(sensor1)){ // 1번 센서가 검출되면

 

        digitalWrite(led,HIGH);// LED ON

 

      }

 

      else{ // 2번 센서가 검출되면

 

        digitalWrite(led,LOW); // LED OFF

 

      }

 

      mode=0;

 

    }

 

  }

 

}

 

 

------------------------------------------------------------------------

이 두 개의 코딩을 저 나름대로 합쳐본게 아래 코드입니다.

 

int ledPin = 53; // LED 출력 단자

int piezoPin = A0; // 진동센서 의 아날로그 단자

int piezoPin1= A1; // 진동센서1의 아날로그 단자

int piezoPin2= A2; // 진동센서2의 아날로그 단자

int worth = 0; // 진동센서 값을 받기 위해 변수를 초기화

int worth1 = 0; //

int worth2 = 0; // 

int buttonpin = 47; // 스위치의 디지털 단자

int sensor1=11,sensor2=10; //적외선 센서1과 적외선 센서2를 각각 11,10번에 연결

int mode=0; //진동센서의 a의 역할과 같음

int a= 0; // 진동센서가 임계값을 넘어갔을 시 이벤트를 유지해주기 위한 변수

 

void setup() { 

 pinMode(ledPin, OUTPUT); // 핀 53번 LED 출력핀 설정

 pinMode(buttonpin,INPUT); // 스위치 47번핀을 입력으로 설정 

 pinMode(sensor1,INPUT_PULLUP);

 pinMode(sensor2,INPUT_PULLUP);

 Serial.begin(9600); // PC로 전송 

}

void loop() { // 셋팅후 연속적 실행

 

   worth = analogRead(piezoPin); // A0 핀 값을 판독

   worth1 = analogRead(piezoPin1); // A1핀 값을 판독

   worth2 = analogRead(piezoPin2); // A2핀 값을 판독

   int buttoninput = digitalRead(buttonpin);

   

   if ((worth >= 100)||(worth1 >= 100)||(worth2 >= 100)) { // 임계 값 초과시 이벤트 발생

     a= 1; 

   }

   

   if(a==1){ // a가 1일때 led가 켜짐

    digitalWrite(ledPin, HIGH); 

   }

 

 

 

if(mode==0){

    if(digitalRead(sensor1)&&digitalRead(sensor2)){ mode=1; } // 센서1과 2에 물체가 감지 되지 않으면 mode=1로 초기화

  }

 

  else if(mode==1){ 

    if(!digitalRead(sensor1)||!digitalRead(sensor2)){ // 검출 되면

      if(!digitalRead(sensor1)){ // 1번 센서가 검출되면

        digitalWrite(ledPin,HIGH);// LED ON

      }

      else{ // 2번 센서가 검출되면

        digitalWrite(ledPin,LOW); // LED OFF

      }

      mode=0;

    }

  }

 

    if(buttoninput == 1){ // 스위치를 누르면 a가0으로 초기화 되면서 불이 꺼짐

      a=0;

    }

    

    if(a==0){

    digitalWrite(ledPin,LOW);

    }

 

Serial.println(worth); // PC로 값 보내기

Serial.println(worth1); // PC로 값 보내기

Serial.println(worth2); // PC로 값 보내기

 delay(500);

}

------------------------------------------------------------------------

단순히 복붙하였는데 왜 안되는지 제 지식으로는 가늠할 수가 없어서요,, 

 

뭔가 빠트린게 있어서 작동이 안되는것 같은데 왜 그런건지 알려주시면 감사하겠습니다.

 

//

 

LED 구동 위치가 위에 있으면 문제가 됩니다.
제일 아래(딜레이 위 또는 시리얼 전송 위)에서 LED를  구동해야합니다.
//
알고리즘을 만드셔야 하는데요

현재 3종류의 센서가 있습니다.
3개의 진동센서, 1개의 버튼, 2개의 적외선센서
이 3종류의 입력으로 1개의 LED를 키고 있는데요
이렇게 각자 체크해서 LED를 건드려서는 절대로 원하는대로 키지 못합니다.

총 6개의 센서 동작을 한꺼번에 정의해서 LED를 구동하세요
//

 

// DateTime : 2018-06-30 오후 9:28:18
// by Ok-Hyun Park
//
int ledPin=53;    // LED 출력 단자
int piezoPin =A0// 진동센서 의 아날로그 단자
int piezoPin1=A1// 진동센서1의 아날로그 단자
int piezoPin2=A2// 진동센서2의 아날로그 단자
//
int buttonpin=47;
int sensor1=11,sensor2=10//적외선 센서1과 적외선 센서2를 각각 11,10번에 연결
//
int mode=0,worth=0,worth1=0,worth2=0;
//
void setup(){
  pinMode(ledPin,OUTPUT); // 핀 53번 LED 출력핀 설정
  pinMode(buttonpin,INPUT); // 스위치 47번핀을 입력으로 설정
  pinMode(sensor1,INPUT_PULLUP);
  pinMode(sensor2,INPUT_PULLUP);
  Serial.begin(9600); // PC로 전송
}
//
void loop(){
  worth =digitalRead(piezoPin);  Serial.print("worth");  Serial.println(worth);
  worth1=digitalRead(piezoPin2); Serial.print("worth1"); Serial.println(worth1);
  worth2=digitalRead(piezoPin3); Serial.print("worth2"); Serial.println(worth2);
  //
  int buttoninput=digitalRead(buttonpin);
  //
  if(buttoninput==1){ digitalWrite(ledPin,LOW); } // 스위치를 누르면 불이 꺼짐
  else if(worth||worth1||worth2){digitalWrite(ledPin,HIGH); } // 스위치를 누르지 않은 상태에서 기울기 센서 출력이 있다면
  else{
    if(mode==0){
      if(digitalRead(sensor1)&&digitalRead(sensor2)){ mode=1; } // 센서1과 2에 물체가 감지 되지 않으면 mode=1로 초기화
    }
    else if(mode==1){
      if(!digitalRead(sensor1)||!digitalRead(sensor2)){ // 검출 되면
        if(!digitalRead(sensor1)){ // 1번 센서가 검출되면
          digitalWrite(ledPin,HIGH); // LED ON
        }
        else// 2번 센서가 검출되면
          digitalWrite(ledPin,LOW); // LED OFF
        }
        mode=0;
      }
    }
  }
  //
  delay(500);
}

 

예를들면

이 소스에서는 

if else if else 문으로 체크 우선 순위를 주고 있습니다.

스위치가 가장 우선권이 있고요

스위치를 누른 상태에서는 LED를 끄며, 나머지 센서는 무시 합니다.

 

기울기 센서가 그다음 우선권이 주어지는데요

적외선 센서 상관없이 기울기 센서값이 오면 LED를 킵니다.

 

마지막 else는 우선권이 가장 낮은데요

스위치를 누르기 않고, 기울기센서 출력도 모두 0일 때만 적외선 센서를 체크합니다.

//

알고리즘을 잘 작성하셔야 합니다.

 

 

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

댓글 0

조회수 312

등록된 댓글이 없습니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [2013.02.07] 댓글[1] 이미지첨부파일 master 18-01-23 1838
공지 [공지] 질문글은 삭제하지 못합니다. 댓글[1] master 18-01-16 1259
질문 네오픽셀 관련 문의 입니다. 댓글[3] 새글 손문일 04:11 5
질문 atmeag128 codevision timer관련 질문있습니다 댓글[3] 새글첨부파일 헤헿헿 00:11 13
답변 답변글 답변 : atmeag128 codevision timer관련 질문있습니다 새글 master 01:51 4
질문 블루투스 송 수신 질문 입니다. 새글 도도리 18-11-14 8
답변 답변글 답변 : 블루투스 송 수신 질문 입니다. 새글 master 01:30 6
질문 codevision atmega128a 재질문 댓글[3] 이미지새글첨부파일 프로미스애인 18-11-14 16
질문 서보모터가 180만 회전해서... 댓글[1] 새글 아두이노정복 18-11-14 7
질문 아두이노 gnd핀 2개인이유? 댓글[1] 새글 공도리공 18-11-14 6
질문 아두이노 우노 보드를 이용한 유모차 제작중입니다 새글 심슨 18-11-14 8
답변 답변글 답변 : 아두이노 우노 보드를 이용한 유모차 제작중입니다 새글 master 18-11-14 12
질문 불꽃감지센서,기울기센서,노크센서,충격센서,온도센서 5개코드 합치는것좀 제발 도와주세요 ㅜㅠ 새글 안절부절 18-11-14 6
답변 답변글 답변 : 불꽃감지센서,기울기센서,노크센서,충격센서,온도센서 5개코드 합치는것좀 제발 도와주세요 ㅜㅠ 새글 master 18-11-14 8
질문 가변저항 초음파센서로 팬과 부저 제어 새글 calicsray 18-11-14 7
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017