안녕하세요 현재 아두이노메가 2560 보드를 이용한 자작 IOT 제작을 진행하고 있습니다.

html 코드가 아니긴 하지만 관련 질문을 할곳을 마땅히 찾지 못해 여쭤봅니다.

 

다름이 아니라 아두이노 광 포토셀 CdS 조도센서 모듈 을 이용하여 아날로그 A0, A1 을 통해 빛양을 받고 있는데요 퍼센테이지로 보고 싶어서 다음과 같은 코드를 사용하였습니다.

 

pinMode 는 사용하지 않았습니다.

 

하단 코드는 전체 코드 중 일부를 발췌한것 입니다.

 

#define front A0

#define rear A1

 

float frontlux, rearlux;

 

... 중략 ...

 

frontlux = (1023 - analogRead(front)) / 1023 * 100;

rearlux = (1023 - analogRead(rear)) / 1023 * 100;

Serial.print(frontlux, 1);

Serial.print("");

Serial.println(rearlux, 1);

 

시리얼모니터를 통해 확인을 해보면 0.0 만 나옵니다..

 

하지만 

frontlux = 1023 - analogRead(front);

rearlux = 1023 - analogRead(rear);

로 하면 잘 나옵니다.

 

제가 놓친 부분이 있을까요?

  • profile

    당근이의 AVR 라는 이름의 네이버 카페 있어요. 한번 그쪽에서 물어보시는게 더 빠를 것 같아요 ㅎㅎ

  • profile

    analogRead()가 float이 아닌 integer를 리턴한다면(AD 컨버터를 읽는 것이니 integer일 것임) 연산 순서가 잘못되었네요. 100부터 곱하고 /1023으로 나눠야죠. 아니면 나누기 전에 (float) 캐스팅을 해주든지요. 

  • profile profile
    정말 빠른 답변 고맙습니다. (1023 - (float)analogRead(front)) / 1023 * 100; 으로 값이 정상 표시 됩니다.

    윗분의 당근이의 AVR 카페 정보도 정말 고맙습니다.
  • profile profile
    조금 더 여러가지 모듈을 추가하고 공부하고 코드 작성하다가 map 이라는 함수를 알게 되었습니다.
    정말 무식하면 고생한다더니 생초짜가 얄팍하게 아는 아두이노를 다뤄보겠다고 ㅋㅋ....
    map((int)analogRead(front), 0, 1023, 100, 0); 으로 손쉽게 퍼센테이지를 구할 수 있게 되었습니다.
    float 으로 결과를 받기 위해 최 상단 선언부에
    long map(long x, long in_min, long in_max, long out_min, long out_max) {
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
    도 추가했습니다.

    네 tmi 를 써 보았습니다.