정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

스마트 홈 블루투스 통신 서보모터
김준형 | 2019-04-23

#include <SoftwareSerial.h>
#include <Servo.h>
#include <Wire.h>
#include "LiquidCrystal_I2C.h"
#include "DHT.h"
#include "melody.h"

DHT dht(dhtPin, DHT11);
LiquidCrystal_I2C lcd(lcdAddr, 16, 2);
SoftwareSerial BTSerial(4, 5);
Servo myservo;

unsigned long previousMillis = 0;

boolean blind = OFF;
boolean TV = OFF;

// 현재 LED의 상태를 저장하는 배열. 0일경우 OFF, 1일 경우 ON
byte sensor[] = {0, 0, 0, 0, 0, 0, 0};

float temperature = 0;
float humidity = 0;


void setup() {
  BTSerial.begin(9600);
  dht.begin();
  lcd.init();
myservo(6);
  // 모든 LED핀을 출력모드로 설정
  for (int i = 6; i <= 13; i++) {
    pinMode(i, OUTPUT);
  }
}


void loop() {
  if (BTSerial.available()) {
    char input = BTSerial.read();

    switch (input) {
      case 'a':                          //RGB LED Red
        setToggle(ledR1, sensor[0]);
        break;

      case 'b':                          //RGB LED Green
        setToggle(ledG1, sensor[1]);
        break;

      case 'c':                          //RGB LED Blue
        setToggle(ledB1, sensor[2]);
        break;

      case 'd':                          //RGB LED1 Red
        setToggle(ledR2, sensor[3]);
        break;

      case 'e':                          //RGB LED1 Green
        setToggle(ledG2, sensor[4]);
        break;

      case 'f':                          //RGB LED1 Blue
        setToggle(ledB2, sensor[5]);
        break;

      case 'g':                          //aircon LED
        setToggle(led, sensor[6]);
        break;

       case 'k':                         
        myservo.write(6);
        break; 
         }
  }


  //================2초마다 온습도 측정================//
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {   //interval(2s)마다 온습도 측정
    previousMillis = currentMillis;
    temperature = dht.readTemperature();
    humidity = dht.readHumidity();

    if (TV == ON) {                                  //TV가 ON상태이면 온습도 값 갱신
      lcd.setCursor(0, 0);
      lcd.print("Temp : ");
      lcd.print(temperature);
      lcd.setCursor(0, 1);
      lcd.print("humi : ");
      lcd.print(humidity);
    }
  }
  //===================================================//

 

 

  //================블라인드 제어================//
  int cdsVal = analogRead(cdsPin);
  if (cdsVal > refVal && blind == OFF) {      //현재 어둡고, 블라인드가 닫혀있다면 블라인드 Open
    ascMelody();
    moveBlind(blindOpen);
    blind = ON;
  }
  else if (cdsVal < refVal && blind == ON) {   //현재 밝고, 블라인드가 열려있다면 블라인드 Close
    dscMelody();
    moveBlind(blindClose);
    blind = OFF;
  }
  //================블라인드 제어 끝================//

 

 

  //================TV 제어================//
  int IRval = analogRead(IRPin);
  if (IRval < 100 && TV == ON) {          //TV가 켜져있고, 거리가 가깝다면 TV OFF
    TV = OFF;
    lcd.clear();
    lcd.noBacklight();
  }

  else if (IRval > 900 && TV == OFF) {    //TV가 꺼져있고, 거리가 멀다면 TV ON
    TV = ON;
    lcd.backlight();
  }
  //================TV 제어 끝================//
}

 


//LED 토글함수
void setToggle(int PIN, byte& stat) {
  if (stat == OFF) {
    digitalWrite(PIN, HIGH);
    stat = ON;
  }
  else {
    digitalWrite(PIN, LOW);
    stat = OFF;
  }
}

//블라인드 제어
void moveBlind(90) {
  myservo.attach(6);
  myservo.write(180);
  delay(300);
  myservo.detach();
}

 

 

 

 

이런식으로 서보모터쪽을 바꿨엇는데 어떻게 해야 스위치문에서 선언을 하여 서보모터를 작동 가능하게 할 수 있을까요

이전글   |    스마트 홈 키트 어플 2019-04-21
다음글   |    프로세싱을 이용한 키보드 작동이 안되네요 틀린부분좀 찾아주세요ㅠ... 2019-04-25