|
|
|
@ -266,3 +266,82 @@ void lcd_oled_draw_line(uint16_t x, uint16_t y, uint16_t angle, uint16_t lenght,
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void lcd_oled_draw_circle(uint16_t x, uint16_t y, uint16_t radius, uint8_t fill, uint8_t color)
|
|
|
|
|
{
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
int16_t x_cicle, y_circle, d = 0;
|
|
|
|
|
if(fill == 0)
|
|
|
|
|
{
|
|
|
|
|
x_cicle = 0;
|
|
|
|
|
y_circle = radius;
|
|
|
|
|
d = 3 - 2 * radius;
|
|
|
|
|
lcd_oled_draw_circle_bresenham(x, y, x_cicle, y_circle, color);
|
|
|
|
|
while (y_circle >= x_cicle)
|
|
|
|
|
{
|
|
|
|
|
x_cicle++;
|
|
|
|
|
if (d > 0)
|
|
|
|
|
{
|
|
|
|
|
y_circle--;
|
|
|
|
|
d = d + 4 * (x_cicle - y_circle) + 10;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
d = d + 4 * x_cicle + 6;
|
|
|
|
|
lcd_oled_draw_circle_bresenham(x, y, x_cicle, y_circle, color);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else // To be optimized
|
|
|
|
|
{
|
|
|
|
|
for(i=radius; i > 0; i--)
|
|
|
|
|
{
|
|
|
|
|
x_cicle = 0;
|
|
|
|
|
y_circle = i;
|
|
|
|
|
d = 3 - 2 * i;
|
|
|
|
|
lcd_oled_draw_circle_bresenham(x, y, x_cicle, y_circle, color);
|
|
|
|
|
while (y_circle >= x_cicle)
|
|
|
|
|
{
|
|
|
|
|
x_cicle++;
|
|
|
|
|
if (d > 0)
|
|
|
|
|
{
|
|
|
|
|
y_circle--;
|
|
|
|
|
d = d + 4 * (x_cicle - y_circle) + 10;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
d = d + 4 * x_cicle + 6;
|
|
|
|
|
lcd_oled_draw_circle_bresenham(x, y, x_cicle, y_circle, color);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void lcd_oled_draw_circle_bresenham(int16_t xc, int16_t yc, uint8_t x, uint8_t y, uint8_t color)
|
|
|
|
|
{
|
|
|
|
|
lcd_oled_draw_pixel(xc+x, yc+y, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc-x, yc+y, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc+x, yc-y, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc-x, yc-y, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc+y, yc+x, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc-y, yc+x, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc+y, yc-x, color);
|
|
|
|
|
lcd_oled_draw_pixel(xc-y, yc-x, color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void lcd_oled_draw_rectangle(uint16_t x, uint16_t y, uint16_t length, uint16_t width, uint8_t fill, uint8_t color)
|
|
|
|
|
{
|
|
|
|
|
uint16_t i = 0;
|
|
|
|
|
if(fill == EMPTY)
|
|
|
|
|
{
|
|
|
|
|
lcd_oled_draw_line(x, y, 0, length, color);
|
|
|
|
|
lcd_oled_draw_line(x, y+width-1, 0, length, color);
|
|
|
|
|
lcd_oled_draw_line(x, y, 270, width, color);
|
|
|
|
|
lcd_oled_draw_line(x+length-1, y, 270, width, color);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for(i=0 ; i < width; i++)
|
|
|
|
|
{
|
|
|
|
|
lcd_oled_draw_line(x, y+i, 0, length, color);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|