반응형
강력하고 정확한 것 두 가지를 만족시키기는 어렵다. 힘이 들어가면 빗나가거나 정확한 지점에 힘을 집중할 수 없기 때문이다. 무엇보다 힘을 빼야만 정확한 지점에 집중할 수 있다. 가끔은 강력하면서도 정확하게 할 때가 있다. 그런 시간을 넘기 직전에 있는지도 모른다.
하~ 힘들다.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SimpleDHT.h>
#include <pm2008_i2c.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
//#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
/*
static const unsigned char PROGMEM logo_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
*/
// for DHT11,
// VCC: 5V or 3V
// GND: GND
// DATA: 9
int pinDHT11 = 9;
SimpleDHT11 dht11(pinDHT11);
PM2008_I2C pm2008_i2c;
int flag = 0; //for interrupt
#define debounceTime 200 // <<- Set debounce Time (unit ms)
int redPin = 5;
int greenPin = 4;
int bluePin = 3;
int buttoninput = 2;
void setup()
{
Serial.begin(9600);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
// 바로 여기다 3C 로 수정한다.
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{ // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buttoninput, INPUT);
attachInterrupt(0, ButtonInterrupt, FALLING);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
pm2008_i2c.begin();
pm2008_i2c.command();
initial_oled();
//delay(1000);
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
//display.display();
//delay(2000); // Pause for 2 seconds
// Clear the buffer
//display.clearDisplay();
// Draw a single pixel in white
//display.drawPixel(10, 10, SSD1306_WHITE);
// Show the display buffer on the screen. You MUST call display() after
// drawing commands to make them visible on screen!
//display.display();
//delay(2000);
// display.display() is NOT necessary after every single drawing command,
// unless that's what you want...rather, you can batch up a bunch of
// drawing operations and then update the screen all at once by calling
// display.display(). These examples demonstrate both approaches...
}
int currentmode = 1;
void loop()
{
//mode lection process
if(currentmode == 1)
{
offlight();
showtemphumi();
}
if(currentmode == 2)
{
offlight();
showfinedust();
}
if(currentmode == 3)
{
showlight();
}
Serial.println(currentmode);
delay(500);
//below Test Code
//rgbtest();
//testdht11();
//testpm2008m();
//testbutton();
}
void showfinedust()
{
uint8_t ret = pm2008_i2c.read();
//Serial.print(ret);
if (ret == 0) {
Serial.print("PM 1.0 (TSI) : ");
Serial.println(pm2008_i2c.pm1p0_tsi);
Serial.print("PM 2.5 (TSI) : : ");
Serial.println(pm2008_i2c.pm2p5_tsi);
Serial.print("PM 10 (TSI) : : ");
Serial.println(pm2008_i2c.pm10_tsi);
}
delay(1000);
}
void showlight()
{
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, HIGH);
digitalWrite(bluePin, HIGH);
}
void offlight()
{
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
char _buffer[8];
void showtemphumi()
{
byte temperature = 0;
byte humidity = 0;
if (dht11.read(pinDHT11, &temperature, &humidity, NULL)) {
Serial.print("Read DHT11 failed.");
return;
}
display.setCursor(23, 10);
sprintf(_buffer, "%d ", (int)temperature);
display.print(_buffer);
display.print((char)248); // degree symbol
display.println("C");
display.setCursor(23, 30);
sprintf(_buffer, "%d ", (int)humidity);
display.print(_buffer);
display.println("%");
//display.setCursor(23, 50);
//printf(_buffer, "On/Off");
//display.print("On/Off");
//display.drawCircle(88, 12, 2, WHITE);
// update the display
display.display();
}
void initial_oled()
{
//initialize the SSD1306 OLED display with I2C address = 0x3D
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// clear the display buffer.
display.clearDisplay();
display.setTextSize(1); // text size = 1
display.setTextColor(WHITE, BLACK); // set text color to white and black background
display.setCursor(15, 0); // move cursor to position (15, 0) pixel
display.print("Today Weather");
display.display(); // update the display
display.setTextSize(2); // text size = 2
}
void testbutton()
{
if(flag == 1)
{
digitalWrite(bluePin, HIGH);
}
else
{
digitalWrite(bluePin, LOW);
}
Serial.println(flag);
delay(100);
}
void ButtonInterrupt()
{
//flag = !flag;
Serial.println("interrupt");
static unsigned long lastTime = 0;
unsigned long now = millis();
if((now-lastTime) > debounceTime)
{
flag=!flag;
}
lastTime = now;
}
void testpm2008m()
{
uint8_t ret = pm2008_i2c.read();
//Serial.print(ret);
if (ret == 0) {
//Serial.print("PM 1.0 (GRIMM) : ");
//Serial.println(pm2008_i2c.pm1p0_grimm);
//Serial.print("PM 2.5 (GRIMM) : : ");
//Serial.println(pm2008_i2c.pm2p5_grimm);
//Serial.print("PM 10 (GRIMM) : : ");
//Serial.println(pm2008_i2c.pm10_grimm);
Serial.print("PM 1.0 (TSI) : ");
Serial.println(pm2008_i2c.pm1p0_tsi);
Serial.print("PM 2.5 (TSI) : : ");
Serial.println(pm2008_i2c.pm2p5_tsi);
Serial.print("PM 10 (TSI) : : ");
Serial.println(pm2008_i2c.pm10_tsi);
//Serial.print("Number of 0.3 um : ");
//Serial.println(pm2008_i2c.number_of_0p3_um);
//Serial.print("Number of 0.5 um : ");
//Serial.println(pm2008_i2c.number_of_0p5_um);
//Serial.print("1 um : ");
//Serial.println(pm2008_i2c.number_of_1_um);
//Serial.print("2.5 um : ");
//Serial.println(pm2008_i2c.number_of_2p5_um);
//Serial.print("Number of 5 um : ");
//Serial.println(pm2008_i2c.number_of_5_um);
//Serial.print("10 um : ");
//Serial.println(pm2008_i2c.number_of_10_um);
}
delay(1000);
}
void testdht11() {
// start working...
Serial.println("=================================");
Serial.println("Sample DHT11...");
// read without samples.
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read DHT11 failed, err="); Serial.print(SimpleDHTErrCode(err));
Serial.print(","); Serial.println(SimpleDHTErrDuration(err)); delay(1000);
return;
}
Serial.print("Sample OK: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
// DHT11 sampling rate is 1HZ.
delay(1500);
}
void rgbtest()
{
setColor(255, 0, 0); // red
delay(1000);
/*setColor(0, 255, 0); // green
delay(1000);
setColor(0, 0, 255); // blue
delay(1000);
setColor(255, 255, 0); // yellow
delay(1000);
setColor(80, 0, 80); // purple
delay(1000);
setColor(0, 255, 255); // aqua
delay(1000);*/
}
void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}
void swInterrupt()
{
//flag = !flag;
static unsigned long lastTime = 0;
unsigned long now = millis();
if((now-lastTime) > debounceTime)
{
Serial.println("int0");
flag=!flag;
}
lastTime = now;
}

반응형
'개발자 > Arduino' 카테고리의 다른 글
| Nano 33 IoT WiFi 연결 불안정을 해결하는 코드 (0) | 2021.05.20 |
|---|---|
| Arduino MQTT 사용자 ID와 password로 mqtt 브로커 연결 (0) | 2021.05.17 |
| 미세먼지 측정기 센서와 커넥터 연결 - Harness (0) | 2021.05.13 |
| How to prevent SSD1306 allocation failed error (0) | 2021.04.30 |
| Nano 33 IoT 보드에서 5V 출력 사용하는 방법 (4) | 2021.04.23 |
| 아두이노 DS1820 (디지털 온도 센서) 다루기 (0) | 2021.04.19 |
| 아두이노 나노 PCB 사이즈 (0) | 2021.04.14 |
| Adafruit APDS-9960 Proximity, Light, RGB, and Gesture Sensor (0) | 2021.04.08 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩