아두이노 코드 작동이 안되요...

ㅁㅁ 2017-06-09 (금) 19:05 6년전 3039  
이렇게 했는데 else if가 안되요...
스위치를 누르고 있고 센서를 감지를 시키는데 거꾸로 돌아가지도 않고 led도 켜지지 않아요...도와주세요ㅠㅠㅠㅠㅠ

#include <Servo.h> 
int inputPin = 2; // 센서 시그널핀
int ledPin = 13; // LED 연결핀
int pirState = LOW; // PIR 초기상태
int val = 0; // Signal 입력값
int servoPin=9;
int sw1Pin=6;
Servo servo; 
int angle=0;
//
void setup(){ 
  Serial.begin(9600);
   pinMode(inputPin, INPUT); // 센서 Input 설정
   pinMode(ledPin, OUTPUT); // LED Output 설정
  servo.attach(servoPin); 
  pinMode(sw1Pin, OUTPUT);
  pinMode(sw1Pin,INPUT_PULLUP);
//
void loop(){ 
  val = digitalRead(inputPin); // 센서값 읽기
  if(digitalRead(sw1Pin)==HIGH){
    for(;angle<180;angle++){
      servo.write(angle); delay(15); 
      if(digitalRead(sw1Pin)==LOW)break; // 중간에 스위치를 떼면 종료
    } 
  }
 else if(digitalRead(sw1Pin)==HIGH && val==HIGH) {
    servo.write(angle); delay(15); 
   digitalWrite(ledPin, HIGH); // LED ON
    }
  else{
    for(;angle>0;angle--){
      servo.write(angle); delay(15); 
      if(digitalRead(sw1Pin)==HIGH)break; // 중간에 스위치를 누르면 종료
    } 
  }
}
이렇게 했는데 else if가 안되요...
스위치를 누르고 있고 센서를 감지를 시키는데 거꾸로 돌아가지도 않고 led도 켜지지 않아요...도와주세요ㅠㅠㅠㅠㅠ 제발 도와주세요ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
메카리워즈 Image Map

브랜든 2017-06-12 (월) 22:03 6년전
프로그램 코드를 보고 개인적으로 생각나는 원인을 적어봅니다.
#1. if문에서 if, else if, else중에서 우선순위가 무엇일까요? 바로 if문, 그다음 else if 다음에는 else  순입니다.
#2. if, else if, else에서 단 한 가지만 구동이 됩니다. 즉, if문이 구동이 되면, else if, else는 다음 loop을 돌 때까지 실행되지 않습니다.
이 두 가지를 알고 현재 작성하신 프로그램 코드를 살펴보도록 하겠습니다.

현재 if문과 else if문이 서로 공통적인 부분이 섞여있죠? 그렇게 된다면, 우선순위로 if문이 구동이 됩니다.
즉, val이 high가 되고 스위치를 누르면 동작하는 else if문 동작조건이 있지만, if문도 속해있으므로, if문이 먼저 구동이 됩니다.
설명이 다소 어려울 수 있는데, 정리하자면, if문, else if문, else문에서 교집합(겹치는 범위)이 있으면 안 됩니다(우선순위로 구동이 됩니다).

물론 이와 같은 원인이 아닐 수도 있습니다. 스위치 부분에서 배선을 잘 못 했거나, else if문의 서보모터가 원래대로 구동되는 코드,
led가 점등(on)하는 코드는 있지만, 소등(off)하는 코드는 없는 면에서 문제가 발생할 수 있으니, 다시 검토해보는 것이 좋을 것 같습니다.
주소

모바일 버전으로 보기