sample
// LCD를 쉽게 제어하기 위한 라이브러리를 추가합니다.
#include <LiquidCrystal_I2C.h>
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include "DHT.h"
#include "module.h"
// 0x3F I2C 주소를 가지고 있는 16x2 LCD객체를 생성합니다.(I2C 주소는 LCD에 맞게 수정해야 합니다.)
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(2, DHT22);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, 8, NEO_GRB + NEO_KHZ800);
unsigned char rcv[8] = {0,};
unsigned int arr[6] = {0,}; //순서대로 온도, 습도, EC, 미세먼지, CO₂,조도 센서
void serialEvent1()
{
Serial1.readBytes(rcv, 8);
}
/*0.8705,0,0.2078*/
// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
#include "init.h"
for (int i = 0; i < 8; i++)strip.setPixelColor(i, 111, 0, 27);
strip.show();
cF[0]|=1;
}
void loop() {
forward();
reverse();
static unsigned char f[2]={0,};
digitalWrite(12,1); //펌프 릴레이 활성화
/*플래그의 심플 토글 래치*/
if((OCR1A>=160)&(f[0]))f[0]=0;
if((OCR1A<=40)&(!f[0]))f[0]=1;
/*서보 제어 코드*/
if(f[0])OCR1A++; else OCR1A--;
}
int.h
//init.h
digitalWrite(9,1); //미세먼지 센서 내장 LED: 부논리 초기설정
DDRF|=240; //A4-A7
pinMode(8,1);
pinMode(9,1); //미세먼지 센서 내장 LED 핀 활성화
pinMode(11,1); //PWM핀 활성화
pinMode(12,1); //펌프 릴레이 핀 활성화
pinMode(17,1); //FAN 릴레이 핀 활성화
digitalWrite(13,0); //펌프 릴레이 신호: 초기값 0;
Serial.begin(9600); //디버깅용
Serial1.begin(9600); //CO₂ 센서
dht.begin();
lcd.init(); // I2C LCD를 초기화 합니다..
lcd.backlight(); // I2C LCD의 백라이트를 켜줍니다.
strip.begin();
strip.clear();
lcd.setCursor(0,0);
lcd.print("waiting....");
//delay(30000);
lcd.clear();
TCCR1A=130;
TCCR1B=28;
ICR1=1249;
OCR1A= 20;
/*
* 핀 설정
* 2:DHT22 온습도 센서 인터페이스 핀
* 4:
* 5:
* 6:
* 7:
* 8:네오픽셀 컨트롤 핀
* 9:미세 먼지 센서 내장 LED 제어 핀
* 10:장애물 감지 센서 입력 핀
* 11:서보모터 PWM 핀
* 13:펌프 제어 핀
*
* 15:close센서(창문)
* 16:open센서(창문)
* 17:FAN 제어 핀
* 18:CO₂ 센서 시리얼 Tx핀
* 19:CO₂ 센서 시리얼 Rx핀
* 20:lcd 용 I²C SDA
* 21:lcd 용 I²C SCL
*
* A2:EC센서 입력 ADC 핀
* A3:미세 먼지 센서 입력 ADC 핀
* A4:스텝 모터 A-IA연결 A
* A5:스텝 모터 A-IB연결 /A
* A6:스텝 모터 B-IA연결 B
* A7:스텝 모터 B-IB연결 /B
* A15: CdS 조도 센서 입력 ADC 핀
* A14: LM35 온도센서
*/
module.h
volatile unsigned char cF[3]={0,};
void forward()
{
const unsigned char sig[4]={0x60,0x50,0x90,0xA0};
static int phase=0;
static long int pT=0;
if(cF[0])
{
digitalWrite(17,1);
if (micros() > (pT + 800)) //0.8밀리초 주기
{
if(phase<480)PORTF= sig[phase&3]|PORTF&15;
else
{
cF[0]=0;
cF[1]|=1;
phase=0;
}
phase++;
pT =micros(); //타임 스탬프
}
}
else phase=0;
}
void reverse()
{
const unsigned char sig[4]={0x60,0x50,0x90,0xA0};
static int phase=0;
static long int pT=0;
if(cF[1])
{
digitalWrite(17,0);
if (micros() > (pT + 800)) //0.8밀리초 주기
{
if(phase<480)PORTF= sig[3-(phase&3)]|PORTF&15;
else
{
cF[1]=0;
cF[0]|=1;
phase=0;
}
phase++;
pT =micros(); //타임 스탬프
}
}
else phase=0;
}
'project > 2020.11 (아두이노)스마트팜' 카테고리의 다른 글
github (0) | 2020.11.20 |
---|---|
포토인터럽터 SG-207 (0) | 2020.11.19 |
L9110 H-bridge module (0) | 2020.11.17 |
voltage regulator 7805CT (0) | 2020.11.17 |
201117 (0) | 2020.11.17 |