1. 첫번째 영상을 보시면 교수님처럼 온도센서가 고정된 값이 아니라 이리저리 값이 바뀌는데 왜그런건가요?? VCC,GND,아날로그핀은 이상없이 연결하였습니다.
2. 두번째는 sw1버튼을 뒤로가기로 활용할 때 어쩔땐 한번만 눌러도 뒤로가지는 반면 어쩔 때에는 여러번 눌러야 뒤로가지는 현상이 나는데 이점 또한 궁금합니다!
TEMP 부분과 SW부분 코드 같이 첨부하겠습니다.
TEMP-----------------------------------------------------------------------------------------------------
temp_value = analogRead(temp_pin) ;
temp = 0.488155 * (temp_value - 20) ;
delay(500) ;
lcd.setCursor(0,0) ;
lcd.print("T:") ;
lcd.print(temp,2) ;
lcd.print("C") ;
SWICH-----------------------------------------------------------------------------------------------------
void sw_mode_setup()
{
pinMode(sw1, INPUT) ;
pinMode(sw2, INPUT) ;
pinMode(sw3, INPUT) ;
}
void sw_reset() // SW1 3초간 누를경우 초기화 구문
{ // SW1을 누를경우 LOW값과 1ms마다 증가하는 reset_timer 변수 값이 3000이하까지 반복
while(!s_state1 && reset_timer++ <= 3000)
{
s_state1 = digitalRead(sw1); //SW1번 현재상태 감지
delayMicroseconds(1000) ; //1ms 딜레이
if(reset_timer == 3000) // 총 3초간 SW1을 눌렀을 경우
{
start_flag = 1; //MAIN 탭 LOOP구문에서 초기화 및 초기동작 실행
}
}
reset_timer = 0 ; // WHILE 문에서 빠져나올 경우 reset_timer 변수 초기화
}
void sw_mode_1()
{
s_state1 = digitalRead(sw1) ; // 현재상태감지
if(old_state1 != s_state1) // 클럭감지, 기존값이 현재 값과 다를 경우 만족
{
old_state1 = s_state1 ; // 현재값이 기존값이 되었으므로
if(s_state1 == HIGH) // 상승엣지 스위치를 눌렀다 뗄 경우
{
// SW2가 눌리지 않은 상태에서의 SW1동작, 시계모드와 센서모드 선택 가능
if(sw2_pulse_flag == 0 && sw2_sensor_flag == 0)
{
sw_flag_1++ ; // 스위치를 뗄떼마다 값을 1씩 증가
if(sw_flag_1 > 1) // 2가지경우, 0과 1만 사용
{
sw_flag_1 = 0 ; // 2가되면 0으로 초기화, 오버플로우 방지
}
if(sw_flag_1 % 2 == 1) // 0과 1의 값을 나눈 변수를 2로 나눈 나머지 값을 이용
{ // 처음 SW1을 누르면 SW_flag 값은 1
sw1_pulse_flag = 1; // 모드선택화면, B_ACT 탭에서 시계모드 LCD 동작
sw1_sensor_flag = 0; // 센서모드 LCD 미동작
}
else //SW_FALG 값이 0일 경우 동작
{
sw1_sensor_flag = 1; // 모드선택화면, B_ACT 탭에서 센서모드 LCD 동작
sw1_pulse_flag = 0; // 시계모드 LCD 미동작
}
}
//SW 2번을 눌러 시계모드 동작 중일 경우 뒤로 가기 기능
if(sw2_pulse_flag == 1)
{
sw1_pulse_flag = 1 ; // 모드 선택화면 B_ACT 탭에서 시계모드 LCD 동작
sw2_pulse_flag = 0 ; // 시계모드 C_Clock 동작 멈춤
}
//SW 2번을 눌러 센서모드 동작 중일 경우 뒤로 가기 기능
if(sw2_sensor_flag == 1)
{
sw1_sensor_flag = 1 ; // 모드 선택홤면 B_ACT 탭에서 센서모드 LCD 동작
sw2_sensor_flag = 0 ; // 센서모드 D_sensor 동작 멈춤
sw3_select_flag = 0 ; // 센서모드 내에서 모드 변경 값 초기화
}
}
}
sw_reset() ; //SW1번 리셋동작함수실행
}
void sw_mode_2()
{
s_state2 = digitalRead(sw2) ; // 현재 상태감지
if(old_state2 != s_state2) // 클럭감지 기존 값이 현재 값과 다를 경우 만족
{
old_state2 = s_state2; // 현재 값이 기존 값이 되었으므로
if(s_state2 == HIGH) // 상승엣지, 스위치를 눌렀다 뗄 경우
{
if(sw1_pulse_flag == 1) // SW1번으로 B_act 탭에서 시계모드 LCD 동작 중일 경우
{
sw2_pulse_flag = 1; // 시계모드 동작
timer_flag = 1; // 처음 시계모드 동작시 초기동작 활성화
}
if(sw1_sensor_flag == 1) // SW1번으로 B_act 탭에서 센서모드 LCD 동작 중일 경우
{
sw2_sensor_flag = 1; // 센서모드 동작
}
}
}
}
void sw_mode_3()
{
s_state3 = digitalRead(sw3) ; // 현재 상태 감지
if(old_state3 != s_state3) // 클럭감지, 기존 값과 현재 값이 다를 경우 만족
{
old_state3 = s_state3; // 현재 값이 기존 값이 되었으므로
if(s_state3 == HIGH) // 상승엣지, 스위치를 눌렀다 뗄 경우
{
s_state1 = 0;
s_state2 = 0;
s_state3 = 0;
sw_flag_1 = 1;
sw_flag_2 = 0;
sw_flag_3 = 0;
old_state1 = 1; // 풀업 회로이므로 SW를 누르면 LOW 값을 입력 받기에
old_state2 = 1; // 기존 값을 HIGH로 세팅
old_state3 = 1;
sw1_pulse_flag = 1;
sw1_sensor_flag = 0;
sw2_pulse_flag = 0;
sw2_sensor_flag = 0;
}
}
}