diff --git a/DrawBezier.c b/BackBuffer.c similarity index 55% rename from DrawBezier.c rename to BackBuffer.c index 1eae67d..fa61d97 100644 --- a/DrawBezier.c +++ b/BackBuffer.c @@ -1,5 +1,36 @@ -#include "DrawBezier.h" -#include "SetPixel.h" +#include "BackBuffer.h" +#include + +uint16_t frame_buffer[WIDTH * HEIGHT]; // Буфер для экрана +// Установка пикселя в буфере (с проверкой границ) + +unsigned short reverse(unsigned short x) +{ + x = (x & 0xFF) << 8 | (x & 0xFF00) >> 8; + return x; +} + +void set_pixel(uint16_t x, uint16_t y, uint16_t color) { + if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) { + frame_buffer[y * WIDTH + x] = color; + } +} + +void generate_sine_wave_points(uint16_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift) { + if (num_points == 0) { + return; + } + + float step = (2.0f * M_PI * frequency) / (num_points - 1); + float x_step = (float)WIDTH / (num_points - 1); + + for (size_t i = 0; i < num_points; i++) { + int x = offset_x + (int)(i * x_step); + int y = offset_y + (int)(amplitude * sinf(i * step + phase_shift)); // Добавлен сдвиг фазы + set_pixel(x, y, reverse(0b0000011111100000)); + } +} + // Функция для вычисления базисного полинома Бернштейна float bernstein(int i, int n, float t) { // Вычисление биномиального коэффициента C(n, i) diff --git a/BackBuffer.h b/BackBuffer.h new file mode 100644 index 0000000..db1e691 --- /dev/null +++ b/BackBuffer.h @@ -0,0 +1,20 @@ +#ifndef __BACKBUFFER_H__ +#define __BACKBUFFER_H__ + +#include +#include + +#define WIDTH 320 +#define HEIGHT 240 +#define COLOR_BLACK 0x0000 +#define COLOR_WHITE 0xFFFF + +extern uint16_t frame_buffer[WIDTH * HEIGHT]; + +float bernstein(int i, int n, float t); +void draw_bezier(const int *points_x, const int *points_y, size_t num_points, uint16_t color); +unsigned short reverse(unsigned short x); +void set_pixel(uint16_t x, uint16_t y, uint16_t color); +void generate_sine_wave_points(uint16_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift); + +#endif // __BACKBUFFER_H__ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 3073f9f..b93b512 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ set(CMAKE_CXX_STANDARD 17) pico_sdk_init() -add_executable(${PROJECT_NAME} main.c Thread.c DrawBezier.c font_data.c Reverse.c SineWave.c SetPixel.c) +add_executable(${PROJECT_NAME} main.c Thread.c font_data.c BackBuffer.c) target_link_libraries(${PROJECT_NAME} pico_stdlib diff --git a/DrawBezier.h b/DrawBezier.h deleted file mode 100644 index c9c4a9f..0000000 --- a/DrawBezier.h +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include -#include "Thread.h" - - -float bernstein(int i, int n, float t); -void draw_bezier(const int *points_x, const int *points_y, size_t num_points, uint16_t color); \ No newline at end of file diff --git a/Reverse.c b/Reverse.c deleted file mode 100644 index adae891..0000000 --- a/Reverse.c +++ /dev/null @@ -1,5 +0,0 @@ -unsigned short reverse(unsigned short x) -{ - x = (x & 0xFF) << 8 | (x & 0xFF00) >> 8; - return x; -} \ No newline at end of file diff --git a/Reverse.h b/Reverse.h deleted file mode 100644 index 5588c6a..0000000 --- a/Reverse.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef REVERSE_H -#define REVERSE_H -unsigned short reverse(unsigned short x); -#endif \ No newline at end of file diff --git a/SetPixel.c b/SetPixel.c deleted file mode 100644 index 6706a49..0000000 --- a/SetPixel.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "SetPixel.h" -#include "Thread.h" -// Установка пикселя в буфере (с проверкой границ) -void set_pixel(uint16_t x, uint16_t y, uint16_t color) { - if (x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT) { - frame_buffer[y * WIDTH + x] = color; - } -} diff --git a/SetPixel.h b/SetPixel.h deleted file mode 100644 index 6321885..0000000 --- a/SetPixel.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef SET_PIXEL_H -#define SET_PIXEL_H -#include -void set_pixel(uint16_t x, uint16_t y, uint16_t color); -#endif \ No newline at end of file diff --git a/SineWave.c b/SineWave.c deleted file mode 100644 index d0e4db5..0000000 --- a/SineWave.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "SineWave.h" -#include "font_data.h" -#include "Thread.h" -#include "Reverse.h" -#include "SetPixel.h" -#include -void generate_sine_wave_points(size_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift) { - if (num_points == 0) { - return; - } - - float step = (2.0f * M_PI * frequency) / (num_points - 1); - float x_step = (float)WIDTH / (num_points - 1); - - for (size_t i = 0; i < num_points; i++) { - int x = offset_x + (int)(i * x_step); - int y = offset_y + (int)(amplitude * sinf(i * step + phase_shift)); // Добавлен сдвиг фазы - set_pixel(x, y, reverse(0b0000011111100000)); - } -} diff --git a/SineWave.h b/SineWave.h deleted file mode 100644 index ed7023d..0000000 --- a/SineWave.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef SINE_WAVE_H -#define SINE_WAVE_H -void generate_sine_wave_points(size_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift); -#endif \ No newline at end of file diff --git a/Thread.c b/Thread.c index 29ac6f3..d1265ce 100644 --- a/Thread.c +++ b/Thread.c @@ -2,8 +2,8 @@ #include "pico/stdlib.h" #include "hardware/spi.h" #include "pico/multicore.h" +#include "BackBuffer.h" -uint16_t frame_buffer[WIDTH * HEIGHT]; // Буфер для экрана //uint16_t frame_buffer1[WIDTH * HEIGHT]; // Буфер для экрана1 diff --git a/Thread.h b/Thread.h index 967e451..63f215e 100644 --- a/Thread.h +++ b/Thread.h @@ -11,13 +11,8 @@ #define PIN_RST 13 #define PIN_BL 12 -#define WIDTH 320 -#define HEIGHT 240 -#define COLOR_BLACK 0x0000 -#define COLOR_WHITE 0xFFFF -extern uint16_t frame_buffer[WIDTH * HEIGHT]; -extern uint16_t frame_buffer1[WIDTH * HEIGHT]; + void st7789_send_command(uint8_t cmd); void st7789_send_data(uint8_t data); diff --git a/font_data.c b/font_data.c index 17050f1..2a99013 100644 --- a/font_data.c +++ b/font_data.c @@ -1,9 +1,8 @@ // Шрифт, сгенерированный из /home/smikhai/Repo/rp_pico_test/Font/font_grid_with_cyrillic.bmp #include "font_data.h" #include "Thread.h" -#include "SetPixel.h" #include -#include "Reverse.h" +#include "BackBuffer.h" const uint16_t image_linear_width = 704; const uint8_t char_width = 22; const uint8_t char_height = 22; diff --git a/main.c b/main.c index 0766e0d..ceedd44 100644 --- a/main.c +++ b/main.c @@ -2,9 +2,9 @@ #include "Thread.h" #include "pico/multicore.h" #include "pico/stdlib.h" -#include "DrawBezier.h" #include "font_data.h" -#include "Reverse.h" +#include "BackBuffer.h" + int main() { uint16_t red = 0; uint16_t green = 0; diff --git a/main.h b/main.h index c034a87..2b0f46e 100644 --- a/main.h +++ b/main.h @@ -1,5 +1,4 @@ #include void fillBufer (uint16_t* buffer,uint16_t color); -unsigned short reverse(unsigned short x); -void generate_sine_wave_points(size_t num_points, int amplitude, float frequency, int offset_x, int offset_y, float phase_shift); \ No newline at end of file +//unsigned short reverse(unsigned short x); \ No newline at end of file