BASIC4MCU | 질문게시판 | 압력센서 값에 따른 LED출력
페이지 정보
작성자 메초보 작성일2022-10-20 00:26 조회5,993회 댓글6건본문
안녕하세요압력센서에 힘을 주면 그에따른 입력에 따라 LED3개를 상 중 하로 나누어 출력하려고 합니다.일단 코드와 사진 올리겠습니다.const int ledhi = 9;const int ledmid =10;const int ledlow =11;const int sensorPin = A0;int value;void setup(){pinMode(ledhi, OUTPUT);pinMode(ledmid, OUTPUT);pinMode(ledlow, OUTPUT);Serial.begin(9600);}void loop(){value = analogRead(sensorPin);Serial.println(value);value = map(value, 0, 1023, 0, 255);if(value<400){digitalWrite(ledhi, HIGH);digitalWrite(ledmid, LOW);digitalWrite(ledlow, LOW);}else if(value>800){digitalWrite(ledhi, LOW);digitalWrite(ledmid, LOW);digitalWrite(ledlow, HIGH);}else{digitalWrite(ledhi, LOW);digitalWrite(ledmid, HIGH);digitalWrite(ledlow, LOW);}}코드가 틀린걸까요 아님 배선이 문제인걸까요..A0에 연결된 저항을 올려서 시리얼모니터 확인해보면 0~1000정도는 출력되는게 확인이 되는데LED는 반응이 없습니다 ㅠㅠ 뭐가 문제인걸까요p.s)https://rockjjy.tistory.com/m/2440의 오마이엔지니어님의 코드와 배선을 참조하였는데 저걸 그대로 따라해도 틴커캐드에서는 안되더라구요..
댓글 6
조회수 5,993master님의 댓글
master 작성일
https://kin.naver.com/qna/detail.naver?d1id=1&dirId=10405&docId=430843681&page=1#answer2
답변글로 동작시켜 보셨나요?
(12번핀 LED가 없어졌군요)
//
3번 LED도 밝기가 안 변하던가요?
LED는 어느정도 이상의 밝기가 되면 눈으로 확연히 구분되지 못합니다.
(3번도 없어졌군요)
map()함수를 사용 할 필요가 없는데요..
//
value = map(value, 0, 1023, 0, 255);
여기서 value를 0~255로 변경 했기 때문에
if(value<400){
여기만 실행 되고
else if 나 else는 실행되지 않습니다.
master님의 댓글
master 작성일
void loop(){
Serial.println();
Serial.println("==== start ====");
delay(1000);
value = analogRead(sensorPin);
Serial.print("analog value="); Serial.println(value);
int pwm = map(value,0,1023,0,255);
Serial.print("pwm(3) value="); Serial.println(pwm);
//
if(value<400){
digitalWrite(ledhi,1); digitalWrite(ledmid,0); digitalWrite(ledlow,0);
Serial.println("1. value<400 ledhi(9)");
}
else if(value<800){
digitalWrite(ledhi,0); digitalWrite(ledmid,1); digitalWrite(ledlow,0);
Serial.println("2. 400<value<800 ledlow(11)");
}
else{
digitalWrite(ledhi,0); digitalWrite(ledmid,0); digitalWrite(ledlow,1);
Serial.println("3. value>800 ledmid(10)");
}
Serial.println("==== end ====");
Serial.println();
delay(3000);
}
loop함수를 이 코드로 돌려보세요
master님의 댓글
master 작성일
압력센서 종류에 따라서 저항값이 달라지긴 하지만
10K 저항 때문에 0~1023 범위로 값이 읽히지 않습니다.
아나로그 입력값의 범위를 잘 체크해서 if()문 조건식에 사용하세요
메초보님의 댓글
메초보 작성일
감사합니다 덕분에 많은 도움이되었습니다.
코드를 이해하는데에는 정말 도움이 되었어요
그런데 틴커캐드에서는 여전히 LED에는 불이 들어오질 않는군요 ㅠㅠ
저항도 다시 설정했음에도 그러니 뭔가 아쉽습니다..ㅠ
master님의 댓글
master
LED 블링크 예제로 돌려보세요
LED를 거꾸로 연결 했을 수도 있습니다.
메초보님의 댓글
메초보
제가 멍청하게 배선한게 문제였습니다 ㅠㅠㅠㅠ
덕분에 큰 꺠달음 얻고갑니다.. 감사합니다!!