극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기9

in kr-dev 커뮤니티2 years ago

안녕하세요! Jimae 입니다.

자 저번에 이어서 해볼까요?

조도 센서에 대해 이야기하고 온습도 센서와 조도 센서의 하드웨어 구성이 같다보니 저번에 그걸 설명하느라 글이 길어졌구요.

아무튼 조도센서 라이브러리를 추가하는 방법은 알았지만 이제 그걸 어떻게 쓰는지 알아야하겠죠.

#include <SFE_TSL2561.h>

boolean gain;     // Gain setting, 0 = X1, 1 = X16;
unsigned int ms;  // Integration ("shutter") time in milliseconds

SFE_TSL2561 light;

void setup() {
  // put your setup code here, to run once:
  LightSensorInit();    // 조도센서 초기화
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
   Serial.println("lux = %lf",LightSensorRead());

}

void LightSensorInit(void)
{
  light.begin();

  unsigned char ID;
  
  if (light.getID(ID))
  {
    
  }
  else
  {
    byte error = light.getError();
  //  printError(error);
  }

  gain = 0;
  unsigned char time = 2;
//  Serial.println("Set timing...");
  light.setTiming(gain,time,ms);
//  Serial.println("Powerup...");
  light.setPowerUp();
}

double LightSensorRead(void)
{
  double lux = 0;    // Resulting lux value
  
  delay(ms);

  unsigned int data0, data1;

  if (light.getData(data0,data1))
  {
    // getData() returned true, communication was successful
 
    boolean good;  // True if neither sensor is saturated
    
    // Perform lux calculation:

    good = light.getLux(gain,ms,data0,data1,lux);
    
    // Print out the results:
  
  }
  else
  {
    // getData() returned false because of an I2C error, inform the user.

    byte error = light.getError();
    printError(error);
  }

  return lux;
}

void printError(byte error)
  // If there's an I2C error, this function will
  // print out an explanation.
{
  Serial.print("I2C error: ");
  Serial.print(error,DEC);
  Serial.print(", ");
  
  switch(error)
  {
    case 0:
      Serial.println("success");
      break;
    case 1:
      Serial.println("data too long for transmit buffer");
      break;
    case 2:
      Serial.println("received NACK on address (disconnected?)");
      break;
    case 3:
      Serial.println("received NACK on data");
      break;
    case 4:
      Serial.println("other error");
      break;
    default:
      Serial.println("unknown error");
  }
}

네 이렇게 라이브러리를 쓰면 되는대요.

LightSensorInit 함수를 써서 먼저 초기화를 진행하는대

내부에서 총 3가지를 진행해주시면 됩니다.

light.begin();

gain = 0;
unsigned char time = 2;

light.setTiming(gain,time,ms);
light.setPowerUp();

위의 순서대로 실행해주시면 됩니다.

begin -> setTimeing -> setPowerUp 이순서를 꼭지켜서 쓰면 조도 센서를 쓰기위한 준비가 끝난것이라고 보시면 됩니다.

위에있는 라이브러리 절차를 썻으면 이제 loop안에서 LightSensorRead를 사용해야 하는대

이것의 절차는

light.getData(data0,data1)

먼저 실행해서 조도 센서에서 데이터를 읽어 옵니다.

물론 읽어오는것에 실패를 한다면 error 루틴으로 빠지지만 그게 아니라면 그 데이터를 가지고

light.getLux(gain,ms,data0,data1,lux);

함수를 써서 조도 센서의 값을 우리가 아는 lux값으로 계산을 해주는거죠.

라이브러리 이름이 틀려서 이 함수명들이 그대로 있는지는 모르겠지만

왠만해서는 변경되지 않았을거라고 생각됩니다.

라이브러리 순서라던지 원리라던지 이건 라이브러리를 만드는 사람의 기준으로 따라가기 때문에

설명서라던지 예제 프로그램을 꼭 참고해서 써야합니다.

오늘은 여기까지 다들 좋은 하루 되세요.

극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기1
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기2
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기3
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기4
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기5
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기6
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기7
극한의 아두이노 DIY생활 - 식물상태를 알려주는 기기8

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.18
TRX 0.14
JST 0.029
BTC 57839.82
ETH 3132.70
USDT 1.00
SBD 2.43