oled에 온습도 값과 토양습도값을 출력하고자 한다.
소스코드는 다음과 같다.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT11.h>
#include "Timer.h"
//pin setting
int soil = A0;
DHT11 dht11(A2);
Timer t;
//value initialize
float humi=0, temp=0,soilmoisture=0;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
t.every(2000,getValue);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.println("T:"+(String)temp+"C ");
display.println("H:"+(String)humi+"% ");
display.println("S:"+(String)soilmoisture+"% ");
display.display();
}
void loop() {
t.update();
drawDisplay();
}
void getValue(){
delay(2000);
soilmoisture = analogRead(soil);
soilmoisture = ((1023-soilmoisture)/1023)*100;
dht11.read(humi, temp);
}
void drawDisplay(){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Serial.print("temperature: ");
// Serial.println(temp);
// Serial.print("humidity: ");
// Serial.println(humi);
// Serial.print("read sensor value: ");
// Serial.println(soilmoisture);
display.println("T:"+(String)temp+"C ");
display.println("H:"+(String)humi+"% ");
display.println("S:"+(String)soilmoisture+"% ");
display.display();
}
이 코드는 2초마다 센서 값을 갱신하고
Loop를 돌면서 계속 display()함수를 호출하며 값을 출력한다.
loop문안에다가 display함수를 호출안하고 getValue()함수 끝에다가 넣었더니
화면에 값 출력이 안되더라.. 그래서 저렇게 했다.
생각보다 예쁘다.
전에는 INT값으로 화면에 출력했는데 Float값으로 출력하는게 더 보기 예쁘긴 한 것 같다.
'컴퓨터 > 아두이노 라즈베리파이' 카테고리의 다른 글
[아두이노] 안드로이드와 BLE(Bluetooth4) 통신2 - 회로도/코드 (2) | 2021.11.30 |
---|---|
[아두이노] 안드로이드와 BLE(Bluetooth4) 통신1 - 안드로이드 개발 (0) | 2021.11.30 |
[아두이노] OLED (0) | 2021.11.15 |
[아두이노] 토양습도센서 SoilMoisture (0) | 2021.11.15 |
[아두이노] DHT11 온습도 센서 + 타이머 기능 활용 (0) | 2021.11.15 |
댓글