BASIC4MCU | 질문게시판 | 답변 : 아두이노 디지털 핀 문제
페이지 정보
작성자 master 작성일2023-05-24 17:12 조회36회 댓글1건본문
#include <Adafruit_NeoPixel.h>
#include <LedControl.h>
#include <pm2008_i2c.h>
PM2008_I2C pm2008_i2c;
LedControl lc=LedControl(50,51,53,8);
//
#define PIXEL_COUNT 32
#define PIXEL_PIN 9
Adafruit_NeoPixel pixels(PIXEL_COUNT,PIXEL_PIN,NEO_GRB+NEO_KHZ800);
#define PIXEL_PINN 8
Adafruit_NeoPixel pixelss(PIXEL_COUNT,PIXEL_PINN,NEO_GRB+NEO_KHZ800);
//
const int LIGHT_PIN=A0,gas=A1,PIR_PIN=110,flame=12,buzzer=13;
//
#define LIGHT_THRESHOLD 700
//
int state=0,num,pirVal,lightVal,gas1;
//
void setup(){
pixels.begin(); // 디지털 8번
pixelss.begin(); // 디지털 9번
pinMode(PIR_PIN,INPUT);
pinMode(buzzer,OUTPUT);
pinMode(flame,INPUT);
Serial.begin(9600);
#ifdef PM2008N
delay(10000); // wait for PM2008N to be changed to I2C mode
#endif
pm2008_i2c.begin();
pm2008_i2c.command();
delay(1000);
Serial.begin(9600);
for (num=0;num<8;num++){ // 매트릭스 0번부터 7번까지 세팅
lc.shutdown(num,false); // 0~7번까지 매트릭스 절전모드 해제
lc.setIntensity(num,8); // 매트릭스의 밝기 선언 8,0~15의 수
lc.clearDisplay(num); // 매트릭스 led를 초기화
}
}
//
// matrix 함수 선언 슬픔
void matrix(){
byte a[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; // '매트릭스'의 1번
byte b[8]={B00000100,B00001000,B00010000,B00100000,B00010000,B00001000,B00000100,B00000000}; // '매트릭스'의 2번
byte c[8]={B00000000,B00000100,B00001000,B00010000,B00100000,B00100000,B00100000,B00100000}; // '매트릭스'의 3번
byte d[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; // '매트릭스'의 4번
byte e[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; // '매트릭스'의 5번
byte f[8]={B00000000,B00000100,B00001000,B00010000,B00100000,B00010000,B00001000,B00000100}; // '매트릭스'의 6번
byte g[8]={B00100000,B00100000,B00100000,B00100000,B00010000,B00001000,B00000100,B00000000}; // '매트릭스'의 7번
byte h[8]={B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}; // '매트릭스'의 8번
// lc.setRow 함수는 행(Row)기준으로 도트매트릭스를 제어 lc.setRow(matrix_number,Row,value)
for(int j=0;j<8;j++){
lc.setRow(0,j,h[j]); lc.setRow(1,j,g[j]); lc.setRow(2,j,f[j]); lc.setRow(3,j,e[j]);
lc.setRow(4,j,d[j]); lc.setRow(5,j,c[j]); lc.setRow(6,j,b[j]); lc.setRow(7,j,a[j]);
}
delay(500);
}
//
void loop(){
noTone(buzzer);
// 미세먼지 센서
Serial.print("Number of 0.3 um : "); Serial.println(pm2008_i2c.number_of_0p3_um);
uint8_t ret=pm2008_i2c.read();
if(pm2008_i2c.number_of_0p3_um>1300){ matrix(); }
else{ matrixx(); }
//가스센서 + 불꽃 감지센서
gas1=analogRead(gas); Serial.println(gas1);
state=digitalRead(flame);
if (state==0){ Serial.print("__on"); tone(buzzer,1000,100); matrixxxx(); }
else if(gas1>100){ Serial.print("__on"); tone(buzzer,1000,100); matrixxx(); }
else { Serial.print("__OFF"); noTone(buzzer); for(num=0;num<8;num++)lc.clearDisplay(num); } // 8개의 매트릭스led 초기화
// NEOPIXEL 부분
lightVal=analogRead(LIGHT_PIN); Serial.println(lightVal);
if(lightVal>LIGHT_THRESHOLD){ // 밝을 떄
for (int i=0;i<PIXEL_COUNT;i++){
pixels.setPixelColor(i,pixels.Color(0,0,0)); // 네오픽셀을 끄기
pixelss.setPixelColor(i,pixelss.Color(0,0,0)); // 네오픽셀을 끄기
}
}
else{ // 어두울 때 if(lightVal<LIGHT_THRESHOLD){
pirVal=digitalRead(PIR_PIN);
if(pirVal){
for(int i=0;i<PIXEL_COUNT;i++){
pixels.setPixelColor(i,pixels.Color(255,255,255)); // 네오픽셀을 흰색으로 켜기
pixelss.setPixelColor(i,pixelss.Color(255,255,255)); // 네오픽셀을 흰색으로 켜기
}
}
else{
for(int i=0;i<PIXEL_COUNT;i++){
pixels.setPixelColor(i,pixels.Color(10,10,10)); // 네오픽셀을 약간 밝게 켜기
pixelss.setPixelColor(i,pixelss.Color(10,10,10)); // 네오픽셀을 약간 밝게 켜기
}
}
}
pixels.show();
pixelss.show();
}
댓글 1
조회수 36미ㅏㄴㅇ님의 댓글
미ㅏㄴㅇ 작성일감사합니다!