끄적.log/〰️

[Embedded Project] Saver Light ( src )

_2J 2020. 6. 14. 07:48
#include <LiquidCrystal_I2C.h>           // LiquidCrystal_I2C의 라이브러리를 불러옵니다.(I2C LCD)
#include<Servo.h> 			 //Servo 라이브러리를 추가
LiquidCrystal_I2C lcd(0x27, 16, 2);      //lcd(LCD의 I2C 슬레이브 주소, lcd 1줄당 출력할 글자수, lcd 줄의 수)
Servo servo;      			 //Servo 클래스로 servo객체 생성

int value = 0;    			 // 각도를 조절할 변수 value
const int gasPin = A0;
int FAN = A1;
int laser = A2;
int sw1 = 10;
int sw2 = 11;
int r = 3;
int g = 5;
int b = 6;
void setup(){
  pinMode (laser, OUTPUT);   // define the digital output interface 13 feet
  digitalWrite(laser, LOW);
  pinMode(FAN, OUTPUT);
  digitalWrite(FAN, LOW);
  pinMode(9, OUTPUT);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(r, OUTPUT);
  pinMode(g, OUTPUT);
  pinMode(b, OUTPUT); 
  servo.attach(7);     	     //맴버함수인 attach : 핀 설정
  lcd.init();                // LCD_I2C 통신을 시작합니다.
  lcd.backlight();           // LCD backlight를 ON
}

void loop()
{
  Serial.println(analogRead(gasPin));
  delay(500);
  
  if(digitalRead(sw1)== LOW){
    setColor(255, 255, 255); // on
  }
  if(digitalRead(sw2)== LOW){
      setColor(0, 0, 0);     //off
  }
  
  lcd.clear();        //lcd 화면을 지웁니다.
  lcd.home();         //lcd 커서 위치를 0,1로 위치시킵니다.

   if(analogRead(gasPin) > 500){
     digitalWrite(FAN, LOW);
     digitalWrite (laser, LOW); // open the laser head
     lcd.print("AIR : VERY BAD!!");  
     digitalWrite(9, LOW);
     value = 45;            //각도를 45도 증가시킨다.
     servo.write(value);    //value값의 각도로 회전

  }else{
    digitalWrite(FAN, HIGH);    
    digitalWrite (laser, HIGH); // turn off the laser head
    lcd.print("AIR : NORMAL     ");
    
    digitalWrite(9, HIGH);
    value = 0;          //각도를 0으로 초기화
    servo.write(value); //value값의 각도로 회전.

    delay (1000);       // delay one second
  }
}
void setColor(int red, int green, int blue)
{
  analogWrite(r, red);
  analogWrite(g, green);
  analogWrite(b, blue); 
}