2014-11-14 2 views
-3

거리를 제어하는 ​​거리를 제어하는 ​​LED를 만들려고합니다. 나는 arduino Leonardo와 거리 센서를 사용하고 있습니다. 순간에 보드에 플러그를 꽂으면 LED가 계속 켜져 있고 거리가 줄어들면 LED가 꺼지지 않습니다. 이 일을하기 위해서 무엇이 바뀌어야하는지 말해 주시겠습니까?거리 제어 led가

const int TrigPin = 2; 
const int EchoPin = 3; 
float cm; 
int ledPin = 12; //define ledPin12 is the output port of led’s level. 
int val = 0; //define original of val. 
void setup() 
{ 
    Serial.begin(9600); 
    pinMode(TrigPin, OUTPUT); 
    pinMode(EchoPin, INPUT); 
    pinMode(ledPin, OUTPUT); //set ledPin output 
} 
void loop() 
{ 
    digitalWrite(TrigPin, LOW); //Low-high-low level sent a short time pulse to TrigPin 
    delayMicroseconds(2); 
    digitalWrite(TrigPin, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(TrigPin, LOW); 
    cm = pulseIn(EchoPin, HIGH)/58.0; //Echo time converted into cm 
    cm = (int(cm * 100.0))/100.0; // retain two decimal places 
    Serial.print(cm); 
    Serial.print("cm"); 
    Serial.println(); 
    delay(1000); 

    val = analogRead(EchoPin); //get the value from sensor 
    if(val<=1) 
    { 
     //512=2.5V, if want the sensor be more sensitive, increase the number, or lese low the number. 
     digitalWrite(ledPin, HIGH); //when the value of val is less than 512(2.5V), light up led lamp 
    } 
    else 
    { 
     digitalWrite(ledPin, LOW); 
    } 
} 
+2

StackOverflow의 디버거 없습니다. 어떤 오류가 있습니까? 상수 값을 사용하여 논리를 테스트 했습니까? 주석이 코드와 일치하지 않는 이유는 무엇입니까? –

+0

그것은 나에게 어떤 오류도주지 않고있다, 나는 단지 기대했던 것처럼 기능하지 않는다. –

+1

pulseIn() 및 analogRead()는 무엇을합니까? 두 핀 모두를 ​​똑같은 핀으로 빠르게 호출 할 수 있습니까? cm 인쇄를위한 출력물은 무엇입니까? –

답변

0

나는 센서가 SRF005와 비슷하다고 추측하고있다. 귀하는 귀하의 질문에 그 세부 사항을 포함시켜야합니다.

방아쇠는 괜찮아 보이지만 조금 더 긴 펄스, 예를 들면 20 us에 아무런 해가 없는지 확인하십시오. 에코의 캡쳐는 데이터 시트에서 발견 한 것을 제외하고는 5.8, 58.0이 아닌 5.8로 나누고 반환 값은 부호없는 long, float가 아닌 것입니다.

그러나 analogRead()을 사용해서는 안됩니다. 에코 핀. 그 시점에서 0이됩니다. 오히려 거리가 이미 cm 변수에 있습니다.

는 (물론 거리를 표시하기 위해 핀 전압을 사용하는 센서가 있습니다,하지만 그들은 트리거 및 에코 핀이 없습니다. 종류의 당신이 실제로 사용하고있는?)

void loop() 
{ 
    int cm = 0; 

    digitalWrite(TrigPin, LOW); //Low-high-low level sent a short time pulse to TrigPin 
    delayMicroseconds(2); 
    digitalWrite(TrigPin, HIGH); 
    delayMicroseconds(10); // <<<<<<<<<<<<<<<<<<<<<<<< Change to 20 
    digitalWrite(TrigPin, LOW); 
    cm = (int)(pulseIn(EchoPin, HIGH) * 10/58); //Echo time converted into cm <<<<<<<<< 5.8 ???? 
    Serial.print(cm); 
    Serial.print("cm"); 
    Serial.println(); 


    if(cm < 50) 
    { 
     digitalWrite(ledPin, HIGH); 
    } 
    else 
    { 
     digitalWrite(ledPin, LOW); 
    } 

    delay(1000); 
}