조도센서로 네오픽셀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);
}
}
|