BASIC4MCU | 질문게시판 | 이산화탄소 센서와 릴레이로 환풍기를 제어하고 LCD에 값을 표시하려고하는데 질문이 있습니다.
페이지 정보
작성자 유채 작성일2021-11-09 14:53 조회7,138회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=17057
본문
LCD에 불만켜지고 글자는 나오지 않습니다. 왜 그런걸까요?? 소스쪽에 혹시 문제가 있을까 소스 올려보았습니다.#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int relay = 7; #define MG_PIN (0) //아날로그 값을 입력받을 핀을 정의 #define BOOL_PIN (2) //디지털 값을 입력받을 핀을 정의 #define DC_GAIN (8.5) //증폭회로의 전압이득 정의(변경 X) #define READ_SAMPLE_INTERVAL (50) //샘플 값 추출 간격 #define READ_SAMPLE_TIMES (5) //추출할 샘플 값의 개수 //추출할 샘플 값들의 평균값이 측정값입니다. #define ZERO_POINT_VOLTAGE (0.324) //이산화탄소가 400ppm 일 때의 전압 값 (수정 X) #define REACTION_VOLTGAE (0.020) //이산화탄소가 1000ppm 일 때의 전압 값(수정 X) float CO2Curve[3] = {2.602,ZERO_POINT_VOLTAGE,(REACTION_VOLTGAE/(2.602-3))}; //위의 두 값들은 곡선 위에 존재합니다. //이 두 점에서 라인이 생성이 되는데, //원래의 곡선과 가깝습니다. //번역된 부분으로 읽는데 잘 파악이 되지는 않네요 //센서 값 곡선 그래프에 맞추어 계산을 하기 위한 //설정값 들이라고 생각하면 될듯합니다. //data format:{ x, y, slope}; point1: (lg400, 0.324), point2: (lg4000, 0.280) //slope = ( reaction voltage) / (log400 – log1000) void setup() { Serial.begin(9600); //UART setup, baudrate = 9600bps pinMode(BOOL_PIN, INPUT); //set pin to input digitalWrite(BOOL_PIN, HIGH); //turn on pullup resistors Serial.print("MG-811 Demostration\n"); pinMode(relay, OUTPUT); lcd.begin(16, 2); } char data[14] = {0,}; void loop() { long percentage; float volts; volts = MGRead(MG_PIN); Serial.print( "SEN0159:" ); Serial.print(volts); Serial.print( "V " ); percentage = MGGetPercentage(volts,CO2Curve); lcd.setCursor(0,1); sprintf(data,"%13d",percentage); Serial.print("CO2:"); if (percentage == -1) { Serial.print( "<400" ); lcd.print("Less than 400"); } else { Serial.print(percentage); lcd.print(data); } Serial.print( "ppm" ); lcd.setCursor(13,1); lcd.print("ppm"); Serial.print( " Time point:" ); Serial.print(millis()); Serial.print("\n"); if (digitalRead(BOOL_PIN)) { Serial.print( "=====BOOL is HIGH======" ); } else { Serial.print( "=====BOOL is LOW======" ); } Serial.print("\n"); if(percentage>400) // 만약 400을 500으로 고치면 500ppm이 넘으면 릴레이 작동 { digitalWrite(relay,HIGH); } else { digitalWrite(relay,LOW); } delay(1000); } float MGRead(int mg_pin) { int i; float v=0; for (i=0;i<READ_SAMPLE_TIMES;i++) { v += analogRead(mg_pin); delay(READ_SAMPLE_INTERVAL); } v = (v/READ_SAMPLE_TIMES) *5/1024 ; return v; } long MGGetPercentage(float volts, float *pcurve) { if ((volts/DC_GAIN )>=ZERO_POINT_VOLTAGE) { return -1; } else { return pow(10, ((volts/DC_GAIN)-pcurve[1])/pcurve[2]+pcurve[0]); } }
댓글 1
조회수 7,138master님의 댓글
master 작성일
LCD 예제를 찾아서 정상동작하는지 체크해보세요
LCD 예제가 동작하지 않는다면 선연결에 문제가 있던지, LCD가 고장이든지 하겠죠