1. 프로젝트 사용한 보드 종류
아두이노 UNO
2. 사용한 개발 프로그램명
아두이노 IDE
3. 사용한 센서 모델명
종류 상관없이 아날로그 값을 내보내는 센서
4. 연결한 회로 설명 (또는 이미지)
128X64 oled패널 한 개, 아날로그 값을 내보내는 센서 한 개 (센서는 A0포트)
5. 소스코드 (주석 필수)
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
//이 소스 코드는 센서의 아날로그 값을 받아 매핑한 후
//128x64 디스플레이에 멀티미터 계기판 바늘의 움직 같이 바늘의 움직임으로 표현하고자 한 코드입니다.
void setting (void){ //디스플레이의 기본 세팅
u8g.setFont(u8g_font_unifont);
u8g.drawCircle(63, 63, 60);
u8g.drawLine(123, 63, 4, 63);
}
void mappingVal(uint8_t a){ //필요한 값을 10도 에서 170도로 매핑하는 함수
a = map(a,0,1023,10,170);
return a;
}
//u8glib의 특성상 직선을 그리려면 좌표점 2개가 있어야 합니다. 그래서 x,y 좌표를 각각 변환시켰습니다.
void mappingX (int val){ //매핑된 각도를 움직이는 좌표의 x좌표로 변환하는 함수
int x;
if (mappingVal(val) < 90){ // <===이 부분이 오류코드입니다.
x = round(sqrt(sq(50)/sq(tan(radians(mappingVal(val))))+1));
return x;
}
else if(mappingVal(val) > 90){
x = -1 * round(sqrt(sq(50)/sq(tan(radians(mappingVal(val))))+1));
return x;
}
else if(mappingVal(val) == 0){
x = 0;
return x;
}
}
void mappingY (int val){ //매핑된 각도를 움직이는 좌표의 y좌표로 변환하는 함수
int y
if (mappingVal(val) < 90){
y = round(mappingVal(val) * tan(radians((mappingVal(val)))));
return y;
}
else if(mappingVal(val) > 90){
y = -1 * round(mappingVal(val) * tan(radians(mappingVal(val)))));
return y;
}
else if(mappingVal(val) == 0){
y = 50;
return y;
}
}
void lastCal(uint8_t val){ //마지막으로 변환한 좌표값을 넣어 선을 그려주는 함수
return u8g.drawLine(63,63,63 + mappingX(val),63 - mappingY(val));
}
void draw (void){ //전체적으로 종합해 구동되는 화면을 구현하는 함수
uint8_t val = analogRead(A0);
setting();
lastCal(mappingVal(val));
}
void setup() {
}
void loop() {
u8g.firstPage();
do {
draw();
}while(u8g.nextPage());
}
6. 문제점 및 에러 내용
invalid operands of types 'void' and 'int' to binary 'operator<'
|