BASIC4MCU | 질문게시판 | 아두이노를 통해 전압값읽고 퍼센트로 나타내기 질문드립니다!!
페이지 정보
작성자 감자님 작성일2020-06-11 17:36 조회6,070회 댓글2건본문
아두이노 A0핀을 통해 건전지의 전압값을 fV3에 받고
전압의 범위에 따라 공식을 다르게하여 percent를 구하기위해 if문을 사용하여 percent를 정의해 주었습니다.
전압값은 잘 출력이 되는데..if문이 제대로 작동하지 않는지 percent가 전압fV3가 0인경우에도 88%가 나옵니다....
혹시 if문 작성이 바르게 되지 않은걸까요...?ㅜㅜ
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // LCD i2c h
SoftwareSerial BT(12, 13);
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define C 523 // 도
#define D 587 // 레
#define E 659 // 미
#define F 349 // 파
#define G 784 // 솔
#define A 440 // 라
#define B 494 // 시
#define BATTERY A0
#define RESOLUTION 1023 // 1024 x 0~1023
#define REFERENCE_VOLTAGE 4.96
#define R1 983 // 1K
#define R2 985 // 1K
int piezo = 8; // 피에조 부저의 +극을 아두이노 8번에 연결
int tempo = 200; // duration 옵션 값을 설정
int notes1[25] = {E, A, C, D, E, A, A, C, G, E }; //나비보벳따우
int notes2[25] = { };
float fReadR1 = 0;
float fV1 = 0;
float fV2 = 0;
float fCurrent = 0;
float fV3;
float percent = 0;
// LCD 초기화 관련 함수
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
}
// LCD 출력 관련 함수
void loop() {
fReadR1 = analogRead(BATTERY);
fV1 = (REFERENCE_VOLTAGE / RESOLUTION) * fReadR1;
fCurrent = fV1 / R1;
fV2 = fCurrent * R2;
fV3 = fV1 + fV2;
if(1.50<=fV3<=1.80)
{
percent=(fV3-1.8)/0.15+100;
}
else if(1.40<=fV3<1.50)
{
percent =(fV3-1.4)*80+90;
}
else if(1.30<=fV3<1.40)
{
percent =(fV3-1.4)*170+90;
}
else if(1.20<=fV3<1.30)
{
percent =(fV3-1.2)*410+32;
}
else if(1.10<=fV3<1.20)
{
percent =(fV3-1.1)*230+9;
}
else if(1.00<=fV3<1.10)
{
percent =(fV3-1)*50+4;
}
else if(0<fV3<1.00)
{
percent =4*fV3;
}
else if (fV3=0)
{
percent =0;
}
lcd.setCursor(0, 0);
lcd.print(fV3);
lcd.print("V");
lcd.setCursor(0, 1);
lcd.print(percent);
lcd.print("%");
delay(100);
if (fV3 <= 1.25 )
{
for (int i = 0; i < 10; i++)
{
tone(piezo, notes1[i], tempo);
delay(300);
}
delay(100);
}
else
{
for (int i = 0; i < 10; i++)
{
tone(piezo, notes2[i], tempo);
delay(300);
}
delay(100);
}
delay(100); //12번 음까지 연주하고 잠깐 멈춤
}
댓글 2
조회수 6,070master님의 댓글
master 작성일
if(1.50<=fV3<=1.80)
이런식의 비교문은 산수책에서만 가능하며 프로그램에서는 사용하지 못합니다.
if( (1.50<=fV3) && (fV3<=1.80) )
이런식으로 구분해서 작성해야합니다.
감자님님의 댓글
감자님 작성일
비교문의 문제였다니...
답변해주셔서 감사합니다!!!