BASIC4MCU | 질문게시판 | 답변 : eeprom 값 출력이 다르게 나옵니다
페이지 정보
작성자 master 작성일2024-05-05 08:49 조회267회 댓글0건본문
LCD에 온도와 조도 모두 표시할 수 있으니, SW1,2로 어느 하나만 표시할 필요는 없겠습니다.
시리얼모니터는 화면이 흘러가고 있으니
SW1 눌렀을 때 시리얼모니터로 온도와 조도가 출력하도록 만들고
//
SW2는 처음엔 eeprom에 저장된 값을 출력하는 모드로 동작하고
sw2를 누르면 온도와 조도를 센서값 읽어서 출력하는 모드로 동작하고,
한번 더 누르면 현재의 온도와 조도를 저장하고, 그 값을 계속해서 유지하도록 하는 모드로 동작하면 되겠습니다.
즉, sw2는 센서값 표시와 eeprom저장 및 eeprom값을 유지하는 모드로 사용
//
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//
const int POTEN=A0,temp_pin=A1,sw1=10,sw2=9;
//
char str[30];
bool sw1_flag=0,sw2_flag=0;
int i,avg_cds=0, old_cds=0, ee_cds;
float f,avg_temp=0,old_temp=0,ee_temp;
int mode=0,count=0;
//
void setup(){
Serial.begin(9600);
lcd.init(); lcd.init(); lcd.backlight();
EEPROM.get(0,ee_cds); EEPROM.get(4,ee_temp);
Serial.print("mode="); Serial.println(mode);
sprintf(str,"mode:%d ",mode); lcd.setCursor(0,0); lcd.print(str);
}
//
void loop(){
i=analogRead(POTEN); avg_cds=(avg_cds+i)/2;
i=analogRead(temp_pin); f=((float)i*500.0/1023.0)-50; avg_temp=(avg_temp+f)/2;
//---------------------------------------------------------------------------------------------------------------
if(digitalRead(sw1)){
if(sw1_flag==0){ sw1_flag=1; sprintf(str,"%4d T:%2d ",avg_cds,(int)avg_temp); Serial.println(str); } // 센서값 표시
}
else{ sw1_flag=0; }
//
if(digitalRead(sw2)){
if(sw2_flag==0){ sw2_flag=1;
mode^=1;
if(mode==0){ ee_cds=avg_cds; ee_temp=avg_temp; EEPROM.put(0,ee_cds); EEPROM.put(4,ee_temp); }
Serial.print("mode="); Serial.println(mode);
sprintf(str,"mode:%d ",mode); lcd.setCursor(0,0); lcd.print(str);
}
}
else{ sw2_flag=0; }
//---------------------------------------------------------------------------------------------------------------
if(mode==0){ sprintf(str,"%4d T:%2d ",ee_cds, (int)ee_temp ); }
else { sprintf(str,"%4d T:%2d ",avg_cds,(int)avg_temp); }
lcd.setCursor(0,1); lcd.print(str);
//---------------------------------------------------------------------------------------------------------------
delay(100);
}
댓글 0
조회수 267등록된 댓글이 없습니다.