BASIC4MCU | 질문게시판 | 아두이노 컴파일 에러 질문
페이지 정보
작성자 master 작성일2018-09-01 09:11 조회15,200회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2882
본문
#include<string.h>//2016(2x16) 키패드 쉴드 library#include <LiquidCrystal.h>//온습도 센서 library#include "DHT.h" // http://www.geeetech.com/wiki/index.php/Electric_thermometer_by_using_DHT11_sensor_module// Library down load ==>/*-----( Declare objects )-----*///dht DHT;// 2016 LCD 패널에 통신을 위해 사용 된 핀번호.LiquidCrystal lcd(8, 9, 4, 5, 6, 7);int dly_button = 3000; // Button Push delay wait value.byte buff[11];unsigned long duration; //지속시간unsigned long starttime; //시작시간unsigned long curtime; //종료시간unsigned long sampletime_ms = 30000; // 30초 = 먼지 측정 주기(간격)-조정하세요 ; (1초=1000으로 설정)unsigned long lowpulseoccupancy = 0; //지속시간 누적float ratio = 0;float concentration = 0; // using spec sheet curvefloat pcsPerCF = 0; //입자당 CF를 0으로 초기화float ugm3 = 0; //세제곱미터(큐빅 미터)당 마이크로 그램(㎍/㎥)int i = 0;int dht_sw = 0;int air_sw = 0;/********************************************************************LCD panel and the buttons*********************************************************************/// define some values used by the panel and buttonsint lcd_button_sw = 1; // LCD 버튼 스위치 값int lcd_key = 0;int adc_key_in = 0; // LCD 버튼의 누른(터치)값// LCD 패널의 버튼에서 사용되는 값 정의#define btnRIGHT 0#define btnUP 1#define btnDOWN 2#define btnLEFT 3#define btnSELECT 4#define btnNONE 5//온도 / 습도 아이콘 만들기 값 = 바이너리 값//byte nan[8] = {B00000, B00000, B00000, B10010, B10010, B10010, B11110, B10000};//byte pow[8] = {B11000, B00100, B11000, B00100, B11000, B00000, B00000, B00000};// Custom character - i1 / 동일한 기능을 하는 값을 두가지로 작성 하였습니다.byte nan[8] = //icon for termometer 온도계 아이콘{ B00100, B01010, B01010, B01110, B01110, B11111, B11111, B01110};uint8_t nan8[8] = { 0x4, 0xa, 0xa, 0xe, 0xe, 0x1f, 0x1f, 0xe };// Custom character - i2 / 동일한 기능을 하는 값을 두가지로 작성 하였습니다.byte pic[8] = //icon for water droplet 습도계 아이콘{ B00100, B00100, B01010, B01010, B10001, B10001, B10001, B01110};uint8_t pic8[8] = { 0x4, 0x4, 0xa, 0xa, 0x11, 0x11, 0x11, 0xe };// 아두이노 로고 생성값(Bit Map) Binary 정의.byte a1[8] = {B11000, B01100, B00110, B00011, B00001, B00000, B00000};byte a2[8] = {B00000, B00000, B00000, B00000, B10001, B11111, B01110};byte a3[8] = {B00011, B00111, B01100, B11000, B10000, B00000, B00000};byte a4[8] = {B00000, B00000, B00000, B00001, B00011, B00110, B01100, B11000};byte a5[8] = {B00000, B01110, B11111, B10001, B00000, B00000, B01110, B00000};byte a6[8] = {B00000, B00000, B00000, B10000, B11000, B01100, B00110, B00011};byte a7[8] = {B00000, B01110, B11111, B10001, B00000, B00000, B00000, B00000};byte a8[8] = {B00100, B01110, B00100, B00000, B10001, B11111, B01110};int pin = 3;//DSM501A input pin#/*-----( Declare Constants, Pin Numbers )-----*/#define DHT11_PIN 2 //dht11 signal pin connected to pin.#define DHTTYPE DHT11 // DHT 11//#define DHTTYPE DHT22 // DHT 22DHT dht(DHT11_PIN, DHTTYPE);/*********************************************************************************************setup - 이 처리 루틴은 아두이노가 시작후 처음 한번만 실행후 - 다음 Loop를 계속 처리를 합니다*********************************************************************************************/void setup(){Serial.begin(9600); //시리얼 통신 데이타를 확인할수 있습니다.pinMode(pin, INPUT);lcd.begin(16, 2); //Creating an Object and naming it as "lcd".lcd.clear();arduino_Logo_Display(); // 소스 하단의 LCD에 로고 출력 function을 호출합니다.Serial.println("Dust senser start,\twait,...\n");delay(3000);// i1).온도 / 습도 아이콘 생성, 바이너리(Binary) 값 = 아래의 i2).헥사(Hex) 값과 동일한 기능을 합니다.// Custom character - 1/*lcd.createChar(8, nan); //온도 아이콘 만들기lcd.createChar(9, pic); //습도 아이콘 만들기lcd.setCursor(4, 1); // LCD 위치 0,0 : x=칼럼,y=라인(열)lcd.print((char)8); // 온도 아이콘 LCD에 출력lcd.setCursor(8, 1); // LCD 위치 0,0 : x=칼럼,y=라인(열)lcd.print((char)9); // 습도 아이콘 LCD에 출력*//*//i2). 온도 / 습도 아이콘 내부 버퍼에 생성, 헥사(Hex) 값 = 위의 i1).바이너리(Binary) 값과 동일한 기능을 합니다.// Custom character - 2lcd.createChar(8, nan8); //온도 아이콘 만들기lcd.createChar(9, pic8); //습도 아이콘 만들기lcd.setCursor(4, 1); // LCD 위치 0,0 : x=칼럼,y=라인(열)lcd.write(8); // 온도 아이콘 LCD에 출력lcd.setCursor(8, 1); // LCD 위치 0,0 : x=칼럼,y=라인(열)lcd.write(9); // 습도 아이콘 LCD에 출력*/lcd.createChar(8, nan8); //온도 아이콘 만들기lcd.createChar(9, pic8); //습도 아이콘 만들기pinMode(pin, INPUT); // 생략가능starttime = millis(); //시작 값을 아두이노로부터 읽어 들인다.- 초 단위로 사용lcd.begin(16, 2); // 로고 출력후 LCD 초기화.lcd.clear();}/****************************************************************************************Loop - 이 처리 루틴은 아두이노가 Setup 실행후 - 종료 처리를 하지 않는 이상 계속 처리(루핑)를 합니다****************************************************************************************/void loop(){//--------- 먼지 센서 값을 검출 계산 --------------------------------------------*/duration = pulseIn(pin, LOW);lowpulseoccupancy = lowpulseoccupancy + duration;curtime = millis(); //아두이노 내부, 현재 시간;if ((curtime - starttime) >= sampletime_ms) //대기시간 > = 30s{ratio = lowpulseoccupancy / (sampletime_ms * 10.0); // // 비율 정수값 0=>100// concentration = 미세먼지 센서 제조사에서 출력하는 값concentration = 1.1 * pow(ratio, 3) - 3.8 * pow(ratio, 2) + 520 * ratio + 0.62; // using spec sheet curvepcsPerCF = concentration * 100; // 입자 농도에 100을 곱하면 입자당 CF값// org ugm3 = pcsPerCF / 13000; //입자당 CF를 나누면 세제곱미터당 마이크로그램 미세먼지 값ugm3 = pcsPerCF / 1300; //입자당 CF를 1300으로 미세먼지 값// Serial.print("duration:");// Serial.print(duration);// Serial.print(" / ");// Serial.print("ugm3:");// Serial.print(ugm3);// Serial.print(" / ");// Serial.print("lowpulseoccupancy:");// Serial.print(lowpulseoccupancy);// Serial.print(" / ");// Serial.print("ratio:");// Serial.print(ratio);// Serial.print(" / ");// Serial.print("concentration:");// Serial.print(concentration);// Serial.print(" / ");// Serial.print(" pcs/0.01cf:");// Serial.println(pcsPerCF);// Serial.println("\n");// Serial.print("f-concentration:");// Serial.println(float(concentration/500));lowpulseoccupancy = 0;starttime = millis();}if ( concentration == 0) { //만약 결과값이 0 이면 아래를 LCD에 출력한다.lcd.setCursor(0, 0);lcd.print("Analyzing air:"); // 메세지 출력.lcd.print(air_sw++); lcd.print(" ");lcd.blink();delay (150);} else{air_sw = 0;lcd.setCursor(0, 0);lcd.print("Dust ");lcd.print(ugm3);// lcd.print(float(concentration/500));lcd.print(" ug/m3"); lcd.print(" ");lcd.noBlink();}// 1602 keypad Shield BUTTON 눌렀는지 확인lcd_button_sw = 0; // 버튼 스위치 초기화lcd_key = read_LCD_buttons(); // read the buttonsswitch (lcd_key) // 어떤 버튼을 눌렀는지 값을 확인후 해당 버튼 값을 LCD에 출력, RESET 버튼은 출력 안함=바로 리부팅(재시작).{case btnRIGHT:{init_lcd();lcd.print("Push on button"); // LCD에 출력.lcd.setCursor(4, 1); // LCD 위치 조정 : x=칼럼,y=라인(열)lcd.print("RIGHT ");delay(dly_button);lcd_button_sw = 1;lcd.clear();break;}case btnLEFT:{init_lcd();lcd.print("Push on button"); // LCD에 출력.lcd.setCursor(4, 1); // LCD 위치 조정 : x=칼럼,y=라인(열)lcd.print("LEFT ");lcd_button_sw = 2;delay(dly_button);lcd.clear();break;}case btnUP:{init_lcd();lcd.print("Push on button"); // LCD에 출력.lcd.setCursor(6, 1); // LCD 위치 조정 : x=칼럼,y=라인(열)lcd.print("UP ");lcd_button_sw = 3;delay(dly_button);lcd.clear();break;}case btnDOWN:{init_lcd();lcd.print("Push on button"); // LCD에 출력.lcd.setCursor(4, 1); // LCD 위치 조정 : x=칼럼,y=라인(열)lcd.print("DOWN ");lcd_button_sw = 4;delay(dly_button);lcd.clear();break;}case btnSELECT:{init_lcd();lcd.print("Push on button"); // LCD에 출력.lcd.setCursor(4, 1); // LCD 위치 조정 : x=칼럼,y=라인(열)lcd.print("SELECT");lcd_button_sw = 5;delay(dly_button);lcd.clear();break;}case btnNONE:{// lcd.print("NONE ");// delay(dly_button);lcd_button_sw = 0;break;}} // - end caseif (lcd_key = btnNONE) { // 버튼이 눌러지지 않은 경우만 온,습도 처리.dht_sw = 0;/* DHT11 Another Type sensor --- Close 201.11.11* // READ DATAint chk = DHT.read11(DHT11_PIN); // 온도,습도 센서의 값을 읽음.switch (chk){case DHTLIB_OK:// Serial.print("OK,\t");break;case DHTLIB_ERROR_CHECKSUM:Serial.println("DHT11 Sensor Checksum error,\t");dht_sw = 1;break;case DHTLIB_ERROR_TIMEOUT:Serial.println("DHT11 Sensor Time out error,\t");dht_sw = 1;break;case DHTLIB_ERROR_CONNECT:Serial.println("DHT11 Sensor Connect error,\t");dht_sw = 1;break;case DHTLIB_ERROR_ACK_L:Serial.println("DHT11 Sensor Ack Low error,\t");dht_sw = 1;break;case DHTLIB_ERROR_ACK_H:Serial.println("DHT11 Sensor Ack High error,\t");dht_sw = 1;break;default:Serial.println("DHT11 Sensor Unknown error,\t");dht_sw = 1;break;}*/// READ DATAfloat h = dht.readHumidity();float t = dht.readTemperature();if (isnan(t) || isnan(h)) {Serial.println("Failed to read from DHT");dht_sw = 1;}else {/* lcd.setCursor(0,0);lcd.print("Temp=");lcd.print(t);*/Serial.print("Temp=");Serial.print(t);/*lcd.print(" *C");lcd.setCursor(0,1);lcd.print("Humidity=");lcd.print(h);lcd.print("% ");*/Serial.print("Humidity=");Serial.print(h);Serial.println("% ");// delay(500);}// dsp_Temp_Hum(dht_sw); //displaying Temperature & Humidity -- 온도와 습도를 LCD에 출력.dsp_Temp_Hum(dht_sw, t, h); //displaying Temperature & Humidity -- 온도와 습도를 LCD에 출력.}delay(1000); // 1초 대기}///////////////// - END OF SOURCE (main-loop) - //////////////////////////// ----------------- Begin Function -----------------------------------///***********************************************************************// 온도 습도 센서의 값을 화면의 2번째 라인에 출력 합니다.***********************************************************************//** close 2017. 11.11 New Type sensorvoid dsp_Temp_Hum(int dht_sw){ //Serial.print("dsp_Temp_Hum:"); Serial.println(dht_sw);int chk = DHT.read11(DHT11_PIN); // 온도,습도 센서의 값을 읽음.lcd.setCursor(0, 1);lcd.write(8); //온도 아이콘 앞쪽if (dht_sw == 0) {lcd.setCursor(2, 1);lcd.print("");lcd.print((float)DHT.temperature, 0); //온도출력// lcd.setCursor(4, 1);lcd.print((char)223); //온도표시 아이콘 출력(뒤쪽)lcd.print("C");} else { // 센서 오류lcd.setCursor(2, 1);lcd.print(" ");lcd.print("^-^"); // 아이콘 출력(뒤쪽)lcd.print(" "); lcd.print(" "); lcd.print(" ");}lcd.setCursor(9, 1);lcd.write(9); //습도 아이콘 앞쪽if (dht_sw == 0) {lcd.setCursor(11, 1);lcd.print((float)DHT.humidity, 0); //습도 출력// lcd.setCursor(13, 1);lcd.print("%");lcd.print(" ");} else { // 센서 오류lcd.setCursor(11, 1);lcd.print(" ");lcd.print("^-^"); // 아이콘 출력(뒤쪽)}// DHT11 센서는 처리후, 최소 1초의 시간은 기다려야 합니다.// 현재의 소스는 먼지 센서 부분에서 대기 시간 설정 있음.}*///* new sensor function 2017.11.11void dsp_Temp_Hum(int dht_sw, float tt, float hh){ //Serial.print("dsp_Temp_Hum:"); Serial.println(dht_sw);lcd.setCursor(0, 1);lcd.write(8); //온도 아이콘 앞쪽if (dht_sw == 0) {lcd.setCursor(2, 1);lcd.print("");lcd.print((float)tt, 0); //온도출력// lcd.setCursor(4, 1);lcd.print((char)223); //온도표시 아이콘 출력(뒤쪽)lcd.print("C");} else { // 센서 오류lcd.setCursor(2, 1);lcd.print(" ");lcd.print("^-^"); // 아이콘 출력(뒤쪽)lcd.print(" "); lcd.print(" "); lcd.print(" ");}lcd.setCursor(9, 1);lcd.write(9); //습도 아이콘 앞쪽if (dht_sw == 0) {lcd.setCursor(11, 1);lcd.print((float)hh, 0); //습도 출력// lcd.setCursor(13, 1);lcd.print("%");lcd.print(" ");} else { // 센서 오류lcd.setCursor(11, 1);lcd.print(" ");lcd.print("^-^"); // 아이콘 출력(뒤쪽)}// DHT11 센서는 처리후, 최소 1초의 시간은 기다려야 합니다.// 현재의 소스는 먼지 센서 부분에서 대기 시간 설정 있음.}/***********************************************************************// read the buttons 버튼을 눌렀는지 체크 합니다.***********************************************************************/int read_LCD_buttons(){// Serial.println("Push Button check#:");adc_key_in = analogRead(0); // read the value from the sensorif (adc_key_in > 1000) return btnNONE;if (adc_key_in < 50) return btnRIGHT;if (adc_key_in < 195) return btnUP;if (adc_key_in < 380) return btnDOWN;if (adc_key_in < 555) return btnLEFT;if (adc_key_in < 790) return btnSELECT;return btnNONE; // when all others fail, return this...}/***********************************************************************// 아두이노 로고-버퍼 생성.***********************************************************************/void arduino_Logo_Setup() { // LCD 사용자 문자 생성.lcd.begin(16, 2);lcd.clear();lcd.createChar(0, a1);lcd.createChar(1, a2);lcd.createChar(2, a3);lcd.createChar(3, a4);lcd.createChar(4, a5);lcd.createChar(5, a6);lcd.createChar(6, a7);lcd.createChar(7, a8);// lcd.begin(16, 2); //Creating an Object and naming it as "lcd".lcd.setCursor(0, 0);lcd.print("Arduino");delay(150);lcd.setCursor(10, 0); // COLUMN= 10 and ROW 0.lcd.write(byte(3));lcd.write(byte(4));lcd.write(byte(5));lcd.write(byte(3));lcd.write(byte(6));lcd.write(byte(5));delay(1000); // LOWER HALF of the logolcd.setCursor(0, 1);lcd.print("eduiot.kr");lcd.setCursor(10, 1);lcd.write(byte(0));lcd.write(byte(1));lcd.write(byte(2));lcd.write(byte(0));lcd.write(byte(7));lcd.write(byte(2));}/***********************************************************************// 아두이노 로고 LCD 화면 출력***********************************************************************/void arduino_Logo_Display() {lcd.createChar(0, a1);lcd.createChar(1, a2);lcd.createChar(2, a3);lcd.createChar(3, a4);lcd.createChar(4, a5);lcd.createChar(5, a6);lcd.createChar(6, a7);lcd.createChar(7, a8);lcd.setCursor(0, 0);lcd.print("Arduino");delay(150);lcd.setCursor(10, 0); // COLUMN= 10 and ROW 0.lcd.write(byte(3));lcd.write(byte(4));lcd.write(byte(5));lcd.write(byte(3));lcd.write(byte(6));lcd.write(byte(5));delay(1000); // LOWER HALF of the logolcd.setCursor(0, 1);lcd.print("eduiot.kr");lcd.setCursor(10, 1);lcd.write(byte(0));lcd.write(byte(1));lcd.write(byte(2));lcd.write(byte(0));lcd.write(byte(7));lcd.write(byte(2));lcd.setCursor(10, 0); // COLUMN= 10 and ROW 0.lcd.write(byte(3));lcd.write(byte(4));lcd.write(byte(5));lcd.write(byte(3));lcd.write(byte(6));lcd.write(byte(5));delay(1000); // LOWER HALF of the logolcd.setCursor(10, 1);lcd.write(byte(0));lcd.write(byte(1));lcd.write(byte(2));lcd.write(byte(0));lcd.write(byte(7));lcd.write(byte(2));}/***********************************************************************// LCD 화면 초기화*********************************************************************/void init_lcd() {lcd.begin(16, 2); // LCD 초기화.lcd.setCursor(0, 0); // LCD 위치 조정 : x=칼럼,y=라인(열)lcd.clear();}이렇게 짜여있는 아두이노 예제파일을 받았는데 컴파일 에러가 납니다. 도움 부탁드려요.//// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-08-21 오전 11:14:10// by Ok-Hyun Park//#include <string.h>#include <LiquidCrystal.h>#include "DHT.h" //http://www.geeetech.com/wiki/index.php/Electric_thermometer_by_using_DHT11_sensor_moduleLiquidCrystal lcd(8,9,4,5,6,7);int dly_button=3000; // Button Push delay wait value.byte buff[11];unsigned long duration; // 지속시간unsigned long starttime; // 시작시간unsigned long curtime; // 종료시간unsigned long sampletime_ms=30000; // 30초=먼지 측정 주기(간격)-조정하세요;(1초=1000으로 설정)unsigned long lowpulseoccupancy=0; // 지속시간 누적float ratio=0;float concentration=0; // using spec sheet curvefloat pcsPerCF=0; // 입자당 CF를 0으로 초기화float ugm3=0; // 세제곱미터(큐빅 미터)당 마이크로 그램(㎍/㎥)int i=0,dht_sw=0,air_sw=0;/********************************************************************LCD panel and the buttons*********************************************************************/// define some values used by the panel and buttonsint lcd_button_sw=1; // LCD 버튼 스위치 값int lcd_key=0;int adc_key_in=0; // LCD 버튼의 누른(터치)값// LCD 버튼#define btnRIGHT 0#define btnUP 1#define btnDOWN 2#define btnLEFT 3#define btnSELECT 4#define btnNONE 5//온도/습도 아이콘//byte nan[8]={B00000,B00000,B00000,B10010,B10010,B10010,B11110,B10000};//byte pow[8]={B11000,B00100,B11000,B00100,B11000,B00000,B00000,B00000};//byte nan[8]={ B00100,B01010,B01010,B01110,B01110,B11111,B11111,B01110}; // 온도계 아이콘uint8_t nan8[8]={0x4,0xa,0xa,0xe,0xe,0x1f,0x1f,0xe};//byte pic[8]={ B00100,B00100,B01010,B01010,B10001,B10001,B10001,B01110}; // 습도계 아이콘uint8_t pic8[8]={0x4,0x4,0xa,0xa,0x11,0x11,0x11,0xe};// 아두이노 로고byte a1[8]={B11000,B01100,B00110,B00011,B00001,B00000,B00000};byte a2[8]={B00000,B00000,B00000,B00000,B10001,B11111,B01110};byte a3[8]={B00011,B00111,B01100,B11000,B10000,B00000,B00000};byte a4[8]={B00000,B00000,B00000,B00001,B00011,B00110,B01100,B11000};byte a5[8]={B00000,B01110,B11111,B10001,B00000,B00000,B01110,B00000};byte a6[8]={B00000,B00000,B00000,B10000,B11000,B01100,B00110,B00011};byte a7[8]={B00000,B01110,B11111,B10001,B00000,B00000,B00000,B00000};byte a8[8]={B00100,B01110,B00100,B00000,B10001,B11111,B01110};int pin=3; //DSM501A input pin#//#define DHT11_PIN 2#define DHTTYPE DHT11 // DHT 11//#define DHTTYPE DHT22 // DHT 22DHT dht(DHT11_PIN,DHTTYPE);///* *close 2017.11.11 New Type sensorvoid dsp_Temp_Hum(int dht_sw){//Serial.print("dsp_Temp_Hum: "); Serial.println(dht_sw);int chk=DHT.read11(DHT11_PIN);lcd.setCursor(0,1); lcd.write(8); //온도 아이콘 앞쪽if(dht_sw==0){ lcd.setCursor(2,1); lcd.print(""); lcd.print((float)DHT.temperature,0); lcd.print((char)223); lcd.print("C"); } //온도출력else { lcd.setCursor(2,1); lcd.print(" ^-^ "); } // 센서 오류lcd.setCursor(9,1);lcd.write(9); //습도 아이콘 앞쪽if(dht_sw==0){ lcd.setCursor(11,1); lcd.print((float)DHT.humidity,0); lcd.print("%"); lcd.print(" "); } //습도 출력else { lcd.setCursor(11,1); lcd.print(" ^-^"); } // 센서 오류}*///*new sensor function 2017.11.11void dsp_Temp_Hum(int dht_sw,float tt,float hh){//Serial.print("dsp_Temp_Hum: "); Serial.println(dht_sw);lcd.setCursor(0,1); lcd.write(8); //온도 아이콘 앞쪽if(dht_sw==0){ lcd.setCursor(2,1); lcd.print((float)tt,0); lcd.print((char)223); lcd.print("C"); } //온도출력else { lcd.setCursor(2,1); lcd.print(" ^-^ "); } // 센서 오류lcd.setCursor(9,1); lcd.write(9); //습도 아이콘 앞쪽if(dht_sw==0){ lcd.setCursor(11,1); lcd.print((float)hh,0); lcd.print("% "); } //습도 출력else { lcd.setCursor(11,1); lcd.print(" ^-^"); } // 센서 오류}/***********************************************************************// read the buttons 버튼을 눌렀는지 체크 합니다.***********************************************************************/int read_LCD_buttons(){//Serial.println("Push Button check#: ");adc_key_in=analogRead(0);if(adc_key_in>1000)return btnNONE;if(adc_key_in< 50)return btnRIGHT;if(adc_key_in< 195)return btnUP;if(adc_key_in< 380)return btnDOWN;if(adc_key_in< 555)return btnLEFT;if(adc_key_in< 790)return btnSELECT;return btnNONE;}/***********************************************************************// 아두이노 로고-버퍼 생성.***********************************************************************/void arduino_Logo_Setup(){ // LCD 사용자 문자 생성.lcd.begin(16,2);lcd.clear();lcd.createChar(0,a1); lcd.createChar(1,a2); lcd.createChar(2,a3); lcd.createChar(3,a4);lcd.createChar(4,a5); lcd.createChar(5,a6); lcd.createChar(6,a7); lcd.createChar(7,a8);// lcd.begin(16,2);lcd.setCursor(0,0); lcd.print("Arduino");delay(150);lcd.setCursor(10,0); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(3); lcd.write(6); lcd.write(5);delay(1000);lcd.setCursor( 0,1); lcd.print("eduiot.kr");lcd.setCursor(10,1); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(byte(0)); lcd.write(7); lcd.write(2);}/***********************************************************************// 아두이노 로고 LCD 화면 출력***********************************************************************/void arduino_Logo_Display(){lcd.createChar(0,a1); lcd.createChar(1,a2); lcd.createChar(2,a3); lcd.createChar(3,a4);lcd.createChar(4,a5); lcd.createChar(5,a6); lcd.createChar(6,a7); lcd.createChar(7,a8);lcd.setCursor(0,0); lcd.print("Arduino");delay(150);lcd.setCursor(10,0); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(3); lcd.write(6); lcd.write(5);delay(1000);lcd.setCursor( 0,1); lcd.print("eduiot.kr");lcd.setCursor(10,1); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(byte(0)); lcd.write(7); lcd.write(2);lcd.setCursor(10,0); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(3); lcd.write(6); lcd.write(5);delay(1000);lcd.setCursor(10,1); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(byte(0)); lcd.write(7); lcd.write(2);}/***********************************************************************// LCD 화면 초기화*********************************************************************/void init_lcd(){lcd.begin(16,2);lcd.setCursor(0,0); lcd.clear();}//void setup(){pinMode(pin,INPUT);Serial.begin(9600);lcd.begin(16,2); lcd.clear();arduino_Logo_Display();Serial.println("Dust senser start,\twait,...\n");delay(3000);lcd.createChar(8,nan8); //온도 아이콘 만들기lcd.createChar(9,pic8); //습도 아이콘 만들기starttime=millis();}//void loop(){duration=pulseIn(pin,LOW);lowpulseoccupancy=lowpulseoccupancy+duration;curtime=millis();if((curtime-starttime)>=sampletime_ms){// 대기시간>=30sratio=lowpulseoccupancy/(sampletime_ms*10.0); // 비율 정수값 0=>100// concentration=미세먼지 센서 제조사에서 출력하는 값concentration=1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curvepcsPerCF=concentration*100; // 입자 농도에 100을 곱하면 입자당 CF값// org ugm3=pcsPerCF/13000; // 입자당 CF를 나누면 세제곱미터당 마이크로그램 미세먼지 값ugm3=pcsPerCF/1300; //입자당 CF를 1300으로 미세먼지 값// Serial.print("duration: "); Serial.print(duration); Serial.print("/");//Serial.print("ugm3:");Serial.print(ugm3);Serial.print("/");// Serial.print("lowpulseoccupancy: "); Serial.print(lowpulseoccupancy); Serial.print("/");//Serial.print("ratio:");Serial.print(ratio);Serial.print("/");// Serial.print("concentration: "); Serial.print(concentration); Serial.print("/");// Serial.print(" pcs/0.01cf: "); Serial.println(pcsPerCF); Serial.println("\n");// Serial.print("f-concentration: "); Serial.println(float(concentration/500));lowpulseoccupancy=0;starttime=millis();}if(concentration==0){lcd.setCursor(0,0); lcd.print("Analyzing air: "); lcd.print(air_sw++); lcd.print(" ");lcd.blink(); delay(150);}else{air_sw=0;lcd.setCursor(0,0); lcd.print("Dust "); lcd.print(ugm3); lcd.print(" ug/m3"); lcd.print(" ");lcd.noBlink();}//lcd_button_sw=0;lcd_key=read_LCD_buttons();switch(lcd_key){case btnRIGHT:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("RIGHT "); delay(dly_button); lcd_button_sw=1; lcd.clear();break;}case btnLEFT:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("LEFT "); lcd_button_sw=2; delay(dly_button); lcd.clear();break;}case btnUP:{init_lcd(); lcd.print("Push on button");lcd.setCursor(6,1); lcd.print("UP "); lcd_button_sw=3; delay(dly_button); lcd.clear();break;}case btnDOWN:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("DOWN "); lcd_button_sw=4; delay(dly_button); lcd.clear();break;}case btnSELECT:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("SELECT"); lcd_button_sw=5; delay(dly_button); lcd.clear();break;}case btnNONE:{ lcd_button_sw=0; break; } // lcd.print("NONE "); // delay(dly_button);}if(lcd_key=btnNONE){ // 버튼이 눌러지지 않은 경우만 온,습도 처리.dht_sw=0;/*int chk=DHT.read11(DHT11_PIN); // 온도,습도 센서의 값을 읽음.switch(chk){caseDHTLIB_OK:break;//Serial.print("OK,\t");case DHTLIB_ERROR_CHECKSUM: Serial.println("DHT11 Sensor Checksum error,\t"); dht_sw=1; break;case DHTLIB_ERROR_TIMEOUT: Serial.println("DHT11 Sensor Time out error,\t"); dht_sw=1; break;case DHTLIB_ERROR_CONNECT: Serial.println("DHT11 Sensor Connect error,\t"); dht_sw=1; break;case DHTLIB_ERROR_ACK_L: Serial.println("DHT11 Sensor Ack Low error,\t"); dht_sw=1; break;case DHTLIB_ERROR_ACK_H: Serial.println("DHT11 Sensor Ack High error,\t"); dht_sw=1; break;default:Serial.println("DHT11SensorUnknownerror,\t");dht_sw=1;break;}*/// READ DATAfloat h=dht.readHumidity();float t=dht.readTemperature();if(isnan(t)||isnan(h)){ Serial.println("Failed to read from DHT"); dht_sw=1; }else{/*lcd.setCursor(0,0); lcd.print("Temp="); lcd.print(t);*/Serial.print("Temp="); Serial.print(t);/*lcd.print("*C"); lcd.setCursor(0,1); lcd.print("Humidity="); lcd.print(h); lcd.print("%");*/Serial.print("Humidity="); Serial.print(h); Serial.println("%");//delay(500);}//dsp_Temp_Hum(dht_sw);dsp_Temp_Hum(dht_sw,t,h);}delay(1000); // 1초 대기}
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-08-21 오전 11:18:38// by Ok-Hyun Park//#include <string.h>#include <LiquidCrystal.h>#include "DHT.h"LiquidCrystal lcd(8,9,4,5,6,7);int dly_button=3000; // Button Push delay wait value.byte buff[11];unsigned long duration; // 지속시간unsigned long starttime; // 시작시간unsigned long curtime; // 종료시간unsigned long sampletime_ms=30000; // 30초=먼지 측정 주기(간격)-조정하세요;(1초=1000으로 설정)unsigned long lowpulseoccupancy=0; // 지속시간 누적float ratio=0;float concentration=0; // using spec sheet curvefloat pcsPerCF=0; // 입자당 CF를 0으로 초기화float ugm3=0; // 세제곱미터(큐빅 미터)당 마이크로 그램(㎍/㎥)int i=0,dht_sw=0,air_sw=0;//int lcd_button_sw=1; // LCD 버튼 스위치 값int lcd_key=0;int adc_key_in=0; // LCD 버튼의 누른(터치)값// LCD 버튼#define btnRIGHT 0#define btnUP 1#define btnDOWN 2#define btnLEFT 3#define btnSELECT 4#define btnNONE 5//byte nan[8]={ B00100,B01010,B01010,B01110,B01110,B11111,B11111,B01110}; // 온도계 아이콘uint8_t nan8[8]={0x4,0xa,0xa,0xe,0xe,0x1f,0x1f,0xe};//byte pic[8]={ B00100,B00100,B01010,B01010,B10001,B10001,B10001,B01110}; // 습도계 아이콘uint8_t pic8[8]={0x4,0x4,0xa,0xa,0x11,0x11,0x11,0xe};// 아두이노 로고byte a1[8]={B11000,B01100,B00110,B00011,B00001,B00000,B00000};byte a2[8]={B00000,B00000,B00000,B00000,B10001,B11111,B01110};byte a3[8]={B00011,B00111,B01100,B11000,B10000,B00000,B00000};byte a4[8]={B00000,B00000,B00000,B00001,B00011,B00110,B01100,B11000};byte a5[8]={B00000,B01110,B11111,B10001,B00000,B00000,B01110,B00000};byte a6[8]={B00000,B00000,B00000,B10000,B11000,B01100,B00110,B00011};byte a7[8]={B00000,B01110,B11111,B10001,B00000,B00000,B00000,B00000};byte a8[8]={B00100,B01110,B00100,B00000,B10001,B11111,B01110};int pin=3; //DSM501A input pin#//#define DHT11_PIN 2#define DHTTYPE DHT11DHT dht(DHT11_PIN,DHTTYPE);//void dsp_Temp_Hum(int dht_sw,float tt,float hh){//Serial.print("dsp_Temp_Hum: "); Serial.println(dht_sw);lcd.setCursor(0,1); lcd.write(8); //온도 아이콘 앞쪽if(dht_sw==0){ lcd.setCursor(2,1); lcd.print((float)tt,0); lcd.print((char)223); lcd.print("C"); } //온도출력else { lcd.setCursor(2,1); lcd.print(" ^-^ "); } // 센서 오류lcd.setCursor(9,1); lcd.write(9); //습도 아이콘 앞쪽if(dht_sw==0){ lcd.setCursor(11,1); lcd.print((float)hh,0); lcd.print("% "); } //습도 출력else { lcd.setCursor(11,1); lcd.print(" ^-^"); } // 센서 오류}/***********************************************************************// read the buttons 버튼을 눌렀는지 체크 합니다.***********************************************************************/int read_LCD_buttons(){adc_key_in=analogRead(0);if(adc_key_in>1000)return btnNONE;if(adc_key_in< 50)return btnRIGHT;if(adc_key_in< 195)return btnUP;if(adc_key_in< 380)return btnDOWN;if(adc_key_in< 555)return btnLEFT;if(adc_key_in< 790)return btnSELECT;return btnNONE;}/***********************************************************************// 아두이노 로고-버퍼 생성.***********************************************************************/void arduino_Logo_Setup(){ // LCD 사용자 문자 생성.lcd.begin(16,2); lcd.clear();lcd.createChar(0,a1); lcd.createChar(1,a2); lcd.createChar(2,a3); lcd.createChar(3,a4);lcd.createChar(4,a5); lcd.createChar(5,a6); lcd.createChar(6,a7); lcd.createChar(7,a8);lcd.setCursor(0,0); lcd.print("Arduino");delay(150);lcd.setCursor(10,0); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(3); lcd.write(6); lcd.write(5);delay(1000);lcd.setCursor( 0,1); lcd.print("eduiot.kr");lcd.setCursor(10,1); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(byte(0)); lcd.write(7); lcd.write(2);}/***********************************************************************// 아두이노 로고 LCD 화면 출력***********************************************************************/void arduino_Logo_Display(){lcd.createChar(0,a1); lcd.createChar(1,a2); lcd.createChar(2,a3); lcd.createChar(3,a4);lcd.createChar(4,a5); lcd.createChar(5,a6); lcd.createChar(6,a7); lcd.createChar(7,a8);lcd.setCursor(0,0); lcd.print("Arduino");delay(150);lcd.setCursor(10,0); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(3); lcd.write(6); lcd.write(5);delay(1000);lcd.setCursor( 0,1); lcd.print("eduiot.kr");lcd.setCursor(10,1); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(byte(0)); lcd.write(7); lcd.write(2);lcd.setCursor(10,0); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(3); lcd.write(6); lcd.write(5);delay(1000);lcd.setCursor(10,1); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(byte(0)); lcd.write(7); lcd.write(2);}/***********************************************************************// LCD 화면 초기화*********************************************************************/void init_lcd(){lcd.begin(16,2);lcd.setCursor(0,0); lcd.clear();}//void setup(){pinMode(pin,INPUT);Serial.begin(9600);lcd.begin(16,2); lcd.clear(); arduino_Logo_Display();Serial.println("Dust senser start,\twait,...\n");delay(3000);lcd.createChar(8,nan8); //온도 아이콘 만들기lcd.createChar(9,pic8); //습도 아이콘 만들기starttime=millis();}//void loop(){duration=pulseIn(pin,LOW);lowpulseoccupancy=lowpulseoccupancy+duration;curtime=millis();if((curtime-starttime)>=sampletime_ms){// 대기시간>=30sratio=lowpulseoccupancy/(sampletime_ms*10.0); // 비율 정수값 0=>100concentration=1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curvepcsPerCF=concentration*100; // 입자 농도에 100을 곱하면 입자당 CF값ugm3=pcsPerCF/1300; // 입자당 CF를 1300으로 미세먼지 값lowpulseoccupancy=0;starttime=millis();}if(concentration==0){lcd.setCursor(0,0); lcd.print("Analyzing air: "); lcd.print(air_sw++); lcd.print(" ");lcd.blink(); delay(150);}else{air_sw=0;lcd.setCursor(0,0); lcd.print("Dust "); lcd.print(ugm3); lcd.print(" ug/m3"); lcd.print(" ");lcd.noBlink();}//lcd_button_sw=0;lcd_key=read_LCD_buttons();switch(lcd_key){case btnRIGHT:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("RIGHT "); delay(dly_button); lcd_button_sw=1; lcd.clear();break;}case btnLEFT:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("LEFT "); lcd_button_sw=2; delay(dly_button); lcd.clear();break;}case btnUP:{init_lcd(); lcd.print("Push on button");lcd.setCursor(6,1); lcd.print("UP "); lcd_button_sw=3; delay(dly_button); lcd.clear();break;}case btnDOWN:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("DOWN "); lcd_button_sw=4; delay(dly_button); lcd.clear();break;}case btnSELECT:{init_lcd(); lcd.print("Push on button");lcd.setCursor(4,1); lcd.print("SELECT"); lcd_button_sw=5; delay(dly_button); lcd.clear();break;}case btnNONE:{ lcd_button_sw=0; break; } // lcd.print("NONE "); // delay(dly_button);}if(lcd_key=btnNONE){ // 버튼이 눌러지지 않은 경우만 온,습도 처리.dht_sw=0;float h=dht.readHumidity();float t=dht.readTemperature();if(isnan(t)||isnan(h)){ Serial.println("Failed to read from DHT"); dht_sw=1; }else{Serial.print("Temp="); Serial.print(t);Serial.print("Humidity="); Serial.print(h); Serial.println("%");}dsp_Temp_Hum(dht_sw,t,h);}delay(1000); // 1초 대기}
질문 소스는 컴파일 오류 없습니다.
댓글 0
조회수 15,200등록된 댓글이 없습니다.