정보나눔

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

조도센서로 네오픽셀led가 켜지고 습도로 색이 바뀌는 스마트 led를 만들어보고 싶습니다
우경국 | 2016-05-01

조도센서로 네오픽셀led가 켜지고 습도로 색이 바뀌는 스마트 led를 만들어보고 싶습니다

 

찾아보니 카카오팹에 이미 비슷한 코딩이 있었습니다. 

 

그런데 찾아본것은 전동기를 쓰고 블루투스를 써서 저에겐 필요없는 블루투스와 모터쉴드 코딩이 되어 있습니다.

 

모터쉴드를 쓰지않게 전동기 부분과 블루투스 부분을 제외하고 오토모드로만 되게 코드좀 봐주실분 계실까요??

 

부탁드립니다

 

#include <DHT11.h>
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>


#define PIN A3
DHT11 dht11(5);
SoftwareSerial BTSerial(2, 4); // RX, TX
Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRB + NEO_KHZ800);

int BA = 9;
int DA = 12;
int PA = 3;
int light;
int i;
int sum;
int a,b;
int flag = 0;
int address = 0;
int err;
char BT;
float temp, humi;
char data;

void setup()
{
  strip.begin();
  strip.show();
  Serial.begin(115200);
  BTSerial.begin(9600);
  pinMode(PA, OUTPUT);
  pinMode(DA, OUTPUT);
  pinMode(BA, OUTPUT);
  strip.begin();
  strip.show();
  light = analogRead(A4);
  if(light < 500){flag = 0;}
  else if(light >= 500){flag = 1;}

}

void loop()
{
  Serial.println("Mode Select!!");
  if(BTSerial.available())
  {
    char BT;
    BT = BTSerial.read(); 
    Serial.println(BT);
  
    if(BT == '1')
    {
      Serial.println("Auto Mode");
      while(1)
      {      
        data = BTSerial.read();
        Sensing();
        Auto_Mode();
        Led_Control();
        if(BTSerial.available()){data = BTSerial.read();}
        if(data == '2'){
          BT = '2';
          break;
        }
      }
    }
    else if(BT == '2')
    {
      Serial.println("Hand Mode");
      while(1)
      {      
        //Sensing();
        //Led_Control();
        Hand_Mode();
        if(BTSerial.available()){data = BTSerial.read();}
        if(data == '1')
        {
          BT = '1';
          break;
        }
      }      
    }
  }  
}

void Sensing()
{
  // READ DATA
  if((err=dht11.read(humi, temp))==0)
  {
    Serial.print("temperature:");
    Serial.print(temp);
    Serial.print(" humidity:");
    Serial.print(humi);
    Serial.print("");
    Serial.print("  ");
    Serial.print(analogRead(A4));
    Serial.println("  ");
    delay(1000);
  }
}

void Hand_Mode()
{
  data = '0';
  Serial.print(data);
  Serial.print(" ");
  Serial.println(flag);
  delay(50);
  while(!BTSerial.available()){}
  if(BTSerial.available())
  {
    data = BTSerial.read();
    Serial.print(data);
    Serial.print(" ");
    Serial.println(flag);
    
    if(data == 'u'&& flag == 0)
    {
      Cutton_Off();
      flag = 1;
    }
    else if(data == 'd'&& flag == 1)
    {
      Cutton_On();
      flag = 0;
    }
 

  }
}
void Auto_Mode()
{
  light = analogRead(A4);
  //brightness control
  if(light < 500 && flag == 0)
  {
    Cutton_Off();
    flag = 1;
    Serial.println(flag);
  }
  else if(light >= 500 && flag == 1)
  {
    Cutton_On();
    flag = 0;
    Serial.println(flag);
  }
}
 
void Led_Control()
{
  if(humi <= 39)
  {
    i =  analogRead(A4);

    if(temp < 23)
    {
      for(a=0; a<strip.numPixels(); a++) 
      {
      strip.setPixelColor(a,strip.Color(0, 0, i));
      }
      strip.show();
    }
    else if(temp >= 23 && temp < 26)
    {
      for(a=0; a<strip.numPixels(); a++) 
      {
      strip.setPixelColor(a,strip.Color(0, i, 0));
      }
      strip.show();
    }
    else if(temp >= 26)
    {
      for(a=0; a<strip.numPixels(); a++) 
      {
      strip.setPixelColor(a,strip.Color(i, 0, 0));
      }
      strip.show();      
    }
  }
  else if(humi > 39)
  {
    type2();
  }
}

void Cutton_On()
{
  digitalWrite(DA,HIGH);
  digitalWrite(PA,HIGH);
  digitalWrite(BA,LOW);
  delay(10000);
  digitalWrite(BA,HIGH);  
}
void Cutton_Off()
{
  digitalWrite(DA,LOW);
  digitalWrite(PA,HIGH);
  digitalWrite(BA,LOW);
  delay(10000);
  digitalWrite(BA,HIGH);   
}

void type2()
{
  uint16_t i, j;
  for(j=0; j<256; j+=1) 
  {
    for(i=0; i<strip.numPixels(); i++) 
    {
      int sum = i+j;
      map(sum,0,300,120,190);
      strip.setPixelColor(i, Wheel(sum),Wheel(sum),Wheel(sum));
    }
    strip.show();
    delay(10);
  }
}

uint32_t Wheel(byte WheelPos) 
{
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) 
  {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } 
  else if(WheelPos < 170) 
  {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } 
  else 
  {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

이전글   |    아두이노 자바(소켓,시리얼) 안드로이드 작동문제... 2016-05-01
다음글   |    오렌지 보드 BLE 관련 문의 2016-05-02