BASIC4MCU | 질문게시판 | 어제 아두이노 핀 문제
페이지 정보
작성자 미ㅏㄴㅇ 작성일2023-05-25 15:27 조회2,247회 댓글2건본문
어제 아두이노 핀 문제로 문의 드렸던 학생입니다!
마스터 님께서 알려주신 코드로 하니 에러가 조금 생겨 처음 전체 코딩 부분에서
delay를 mills로 변환하려면 어떻게 해야 하나요?
#include <Adafruit_NeoPixel.h>
#include <LedControl.h>
#include <pm2008_i2c.h>
#define PIXEL_PIN 9
#define PIXEL_PINN 8
#define PIXEL_COUNT 32
#define PIR_PIN 10
#define LIGHT_PIN A0
#define LIGHT_THRESHOLD 700
PM2008_I2C pm2008_i2c;
LedControl lc = LedControl(50, 51, 53, 8);
int num;
int buzzer = 13;
int flame = 12;
int state = 0;
int gas = A1;
Adafruit_NeoPixel pixels(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixelss(PIXEL_COUNT, PIXEL_PINN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin();
pixelss.begin();
pinMode(PIR_PIN, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(flame, INPUT);
Serial.begin(9600);
#ifdef PM2008N
// wait for PM2008N to be changed to I2C mode
delay(10000);
#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 matrixx() { // 미소
{
// '화'의 윗부분 이진수로 배열 선언
// '이모티콘'의 1번
byte i[8] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
// '이모티콘'의 2번
byte k[8] = {B00000100,B00001000,B00010000,B00100000,B00010000,B00001000,B00000100,B00000000};
// '이모티콘'의 3번
byte l[8] = {B00000000,B00100000,B00010000,B00001000,B00000100,B00000100,B00000100,B00000100};
// '이모티콘'의 4번
byte m[8] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
// '이모티콘'의 5번
byte n[8] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
//'이모티콘'의 6번
byte o[8] = {B00000000,B00000100,B00001000,B00010000,B00100000,B00010000,B00001000,B00000100};
// '이모티콘'의 7번
byte p[8] = {B00000100,B00000100,B00000100,B00000100,B00001000,B00010000,B00100000,B00000000};
// '이모티콘'의 8번
byte q[8] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
// lc.setRow 함수는 행(Row) 기준으로 도트매트릭스를 제어 lc.setRow(matrix_number,Row,value)
for (int j = 0; j < 8; j++)
{
lc.setRow(0, j, q[j]); // 0번째 매트릭스에서 '빈공간'출력
lc.setRow(1, j, p[j]); // 1번째 매트릭스에서 '이모티콘'출력
lc.setRow(2, j, o[j]); // 2번째 매트릭스에서 '이모티콘'출력
lc.setRow(3, j, n[j]); // 3번째 매트릭스에서 '빈공간'출력
lc.setRow(4, j, m[j]); // 4번째 매트릭스에서 '빈공간'출력
lc.setRow(5, j, l[j]); // 5번째 매트릭스에서 '이모티콘'출력
lc.setRow(6, j, k[j]); // 6번째 매트릭스에서 '이모티콘'출력
lc.setRow(7, j, i[j]); // 7번째 매트릭스에서 '빈공간'출력
}
delay(500);
}
}
void matrixxx() //화재 위험
{
// '재'의 윗부분 이진수로 배열 선언
byte aa[8] = {B00001111,B00000001,B00001111,B00000000,B00000100,B00000111,B00000100,B00000100};
// 한글 '재'의 밑부분 이진수로 배열 선언
byte bb[8] = {B11110000,B00000000,B11110000,B00100000,B01000000,B10000000,B01000000,B00100000};
// 한글 '험'의 윗 이진수로 배열 선언
byte cc[8] = {B00000000,B00000111,B00000001,B00000101,B00001110,B00001110,B00001110,B00000101};
// '험'의 밑부분 이진수로 배열 선언
byte dd[8] = {B00000000,B11000000,B00000000,B10111000,B01101000,B01101000,B01111000,B10000000};
// 한글 '화'의 위부분 이진수로 배열 선언
byte ee[8] = {B00000000,B00001111,B00000000,B00000101,B00001110,B00001110,B00001110,B00000101};
// 한글 '화'의 밑부분 이진수로 배열 선언
byte ff[8] = {B10000000,B11110000,B00000000,B10010000,B01010000,B01110000,B01010000,B10010000};
// 한글 '위'의 윗부분 이진수로 배열 선언
byte gg[8] = {B00000000,B00011111,B00000000,B00000111,B00001000,B00001000,B00001000,B00000111};
// '위'의 밑부분 이진수로 배열 선언
byte hh[8] = {B00000000,B11110000,B00000000,B01000000,B11000000,B11110000,B11000000,B01000000};
// lc.setRow 함수는 행(Row) 기준으로 도트매트릭스를 제어 lc.setRow(matrix_number,Row,value)
for (int j = 0; j < 8; j++)
{
lc.setRow(0, j, hh[j]); // 0번째 매트릭스에서 '험'아래출력
lc.setRow(1, j, gg[j]); // 1번째 매트릭스에서 '위'아래출력
lc.setRow(2, j, ff[j]); // 2번째 매트릭스에서 '재'아래출력
lc.setRow(3, j, ee[j]); // 3번째 매트릭스에서 '화'아래출력
lc.setRow(4, j, dd[j]); // 4번째 매트릭스에서 '험'위출력
lc.setRow(5, j, cc[j]); // 5번째 매트릭스에서 '위'위출력
lc.setRow(6, j, bb[j]); // 6번째 매트릭스에서 '재'위출력
lc.setRow(7, j, aa[j]); // 7번째 매트릭스에서 '화'위 출력
}
delay(5000);
}
void matrixxxx() //화재발생
{
// '재'의 윗부분 이진수로 배열 선언
byte aa[8] = {B00001111,B00000001,B00001111,B00000000,B00000100,B00000111,B00000100,B00000100};
// 한글 '재'의 밑부분 이진수로 배열 선언
byte bb[8] = {B11110000,B00000000,B11110000,B00100000,B01000000,B10000000,B01000000,B00100000};
// 한글 '발'의 윗 이진수로 배열 선언
byte cc[8] = {B00001111,B00000001,B00001111,B00000010,B00000100,B00001000,B00000100,B00000010};
// '발'의 밑부분 이진수로 배열 선언
byte dd[8] = {B11100000,B00000000,B11100000,B01100000,B10010000,B10010000,B01100000,B00000000};
// '화'의 윗부분
byte ee[8] = {B00000000,B00001111,B00000000,B00000101,B00001110,B00001110,B00001110,B00000101};
// 한글 '화'의 밑부분 이진수로 배열 선언
byte ff[8] = {B10000000,B11110000,B00000000,B10010000,B01010000,B01110000,B01010000,B10010000};
// 한글 '발'의 윗부분 이진수로 배열 선언
byte gg[8] = {B00000001,B00001111,B00000000,B00001111,B00000101,B00000101,B00001111,B00000000};
// '발'의 밑부분 이진수로 배열 선언
byte hh[8] = {B00000000,B11110000,B00000000,B11101000,B10101000,B10101000,B10111000,B00000000};
// lc.setRow 함수는 행(Row) 기준으로 도트매트릭스를 제어 lc.setRow(matrix_number,Row,value)
for (int j = 0; j < 8; j++)
{
lc.setRow(0, j, hh[j]); // 0번째 매트릭스에서 '험'아래출력
lc.setRow(1, j, gg[j]); // 1번째 매트릭스에서 '위'아래출력
lc.setRow(2, j, ff[j]); // 2번째 매트릭스에서 '재'아래출력
lc.setRow(3, j, ee[j]); // 3번째 매트릭스에서 '화'아래출력
lc.setRow(4, j, dd[j]); // 4번째 매트릭스에서 '험'위출력
lc.setRow(5, j, cc[j]); // 5번째 매트릭스에서 '위'위출력
lc.setRow(6, j, bb[j]); // 6번째 매트릭스에서 '재'위출력
lc.setRow(7, j, aa[j]); // 7번째 매트릭스에서 '화'위 출력
}
delay(5000);
}
void loop() {
int pirVal = digitalRead(PIR_PIN);
int lightVal = analogRead(LIGHT_PIN);
int gas1 = analogRead(gas);
state = digitalRead(flame);
Serial.print("gas : ");
Serial.println(analogRead(gas));
Serial.print("Light : ");
Serial.println(analogRead(A0));
noTone(buzzer);
uint8_t ret = pm2008_i2c.read();
Serial.print("Number of 0.3 um : ");
Serial.println(pm2008_i2c.number_of_0p3_um);
// 미세먼지 센서
if (pm2008_i2c.number_of_0p3_um > 1300) {
matrix();
}
else {
matrixx();
}
//가스센서 + 불꽃 감지센서
if (state == 0) {
Serial.print("__on");
tone(buzzer, 1000, 100);
matrixxxx();
delay(10000);
}
else if (gas1 > 100) {
Serial.print("__on");
tone(buzzer, 1000, 100);
matrixxx();
delay(10000);
}
else {
for (num = 0; num < 8; num++) // 8개의 매트릭스led 초기화
{
lc.clearDisplay(num);
}
Serial.print("__OFF");
noTone(buzzer);
}
// 밑에서 부터 NEOPIXEL 9번핀
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)); // 네오픽셀을 끄기
}
pixels.show();
pixelss.show();
}
else { // 어두울 때
if ( lightVal < LIGHT_THRESHOLD ) {
for (int i = 0; i < PIXEL_COUNT; i++) {
pixels.setPixelColor(i, pixels.Color(10, 10, 10)); // 네오픽셀을 약간 밝게 켜기
pixelss.setPixelColor(i, pixelss.Color(10, 10, 10)); // 네오픽셀을 약간 밝게 켜기
}
pixelss.show();
pixels.show();
}
if (lightVal < LIGHT_THRESHOLD && pirVal == HIGH) {
for (int i = 0; i < PIXEL_COUNT; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 255)); // 네오픽셀을 흰색으로 켜기
pixelss.setPixelColor(i, pixelss.Color(255, 255, 255)); // 네오픽셀을 흰색으로 켜기
}
pixels.show();
pixelss.show();
delay(2000);
}
}
for (int i = 0; i < PIXEL_COUNT; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // 네오픽셀을 끄기
pixelss.setPixelColor(i, pixelss.Color(0, 0, 0)); // 네오픽셀을 끄기
}
}
댓글 2
조회수 2,247master님의 댓글
master 작성일
https://physis-maker.tistory.com/11
이 예제에서는 millis()함수를 사용해서 2초마다 온습도 센서를 읽고 있습니다.
참고해서 만들어보세요
미ㅏㄴㅇ님의 댓글
미ㅏㄴㅇ 작성일넵 감사합니다!