Compare commits

...

2 Commits

Author SHA1 Message Date
c7b78edbf8 贪吃蛇但颜色位置有点问题 2024-08-04 14:43:38 +08:00
f4b9e5d8bd 删掉lvgl+led,编译爆内存 2024-08-03 15:45:29 +08:00
8 changed files with 175 additions and 17 deletions

16
.config
View File

@ -1577,7 +1577,13 @@ CONFIG_SOC_SERIES_STM32F4=y
# CONFIG_BSP_USING_ARDUINO is not set
CONFIG_BSP_USING_USB_TO_USART=y
# CONFIG_BSP_USING_COM3 is not set
# CONFIG_BSP_USING_RS485 is not set
CONFIG_BSP_USING_RS485=y
#
# set rts pin number
#
CONFIG_BSP_RS485_RTS_PIN=104
CONFIG_RS485_UART_DEVICE_NAME="uart6"
CONFIG_BSP_USING_SRAM=y
CONFIG_BSP_USING_ONBOARD_LCD=y
CONFIG_BSP_USING_ONBOARD_LCD_PWM_BL=y
@ -1614,12 +1620,16 @@ CONFIG_BSP_USING_UART1=y
# CONFIG_BSP_USING_UART3 is not set
# CONFIG_BSP_USING_UART4 is not set
# CONFIG_BSP_USING_UART5 is not set
# CONFIG_BSP_USING_UART6 is not set
CONFIG_BSP_USING_UART6=y
# CONFIG_BSP_UART6_RX_USING_DMA is not set
# CONFIG_BSP_UART6_TX_USING_DMA is not set
# CONFIG_BSP_USING_TIM is not set
CONFIG_BSP_USING_PWM=y
# CONFIG_BSP_USING_PWM1 is not set
# CONFIG_BSP_USING_PWM2 is not set
# CONFIG_BSP_USING_PWM3 is not set
CONFIG_BSP_USING_PWM3=y
CONFIG_BSP_USING_PWM3_CH2=y
# CONFIG_BSP_USING_PWM3_CH4 is not set
# CONFIG_BSP_USING_PWM4 is not set
CONFIG_BSP_USING_PWM14=y
CONFIG_BSP_USING_PWM14_CH1=y

View File

@ -12,13 +12,14 @@
#include <rtdevice.h>
#include <board.h>
#include "drv_common.h"
#include <ntp.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <drv_lcd.h>
#include <rttlogo.h>
#include "my_func.h"
/* 配置 LED 灯引脚 */
#define PIN_LED_B GET_PIN(F, 11) // PF11 : LED_B --> LED
@ -40,21 +41,29 @@ int xymove[4][2] = {
extern void wlan_autoconnect_init(void);
void lcd_black(int x, int y)
void mytime()
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(BLACK);
}
void xy_round(int x, int y, int x2, int y2, int r,int ii)
{
rt_kprintf("x:%d,y:%d,x2:%d,y2:%d,r:%d\n", x, y, x2, y2, r);
for (int i = x; i != x2; i+=xymove[ii][0])
rt_thread_mdelay(10000);
time_t cur_time;
cur_time = ntp_get_time(RT_NULL);
if( cur_time)
{
for (int j = y; j != y2; j+=xymove[ii][1])
rt_kprintf("NTP Server Time: %s", ctime((const time_t *)&cur_time));
}
lcd_show_string(2, 2, 16, ctime((const time_t *)&cur_time));
}
void xy_round(int x, int y, int x2, int y2, int r, int ii)
{
// rt_kprintf("x:%d,y:%d,x2:%d,y2:%d,r:%d\n", x, y, x2, y2, r);
for (int i = x; i != x2; i += xymove[ii][0])
{
for (int j = y; j != y2; j += xymove[ii][1])
{
int newi = x2 - i;
int newj = y2 - j;
rt_kprintf("(%d,%d,%d)",(newi * newi + newj * newj), newi, newj);
// rt_kprintf("(%d,%d,%d)",(newi * newi + newj * newj), newi, newj);
if ((newi * newi + newj * newj) > (r * r))
{
// rt_kprintf("x:%d,y:%d\n", i, j);
@ -65,9 +74,13 @@ void xy_round(int x, int y, int x2, int y2, int r,int ii)
}
void my_round(int r)
{
// 这个范围涂黑
lcd_fill(0, 0, roundxy[2][0], roundxy[2][1],BLACK);
lcd_write_half_word(BLACK);
for (int i = 0; i < 4; i++)
{
xy_round(roundxy[i][0], roundxy[i][1], roundxy[i][0] + r * xymove[i][0], roundxy[i][1] + r * xymove[i][1], r,i);
xy_round(roundxy[i][0], roundxy[i][1], roundxy[i][0] + r * xymove[i][0], roundxy[i][1] + r * xymove[i][1], r, i);
}
}
void xy_sink()
@ -82,14 +95,20 @@ void xy_sink()
// rt_kprintf("(%d,...) Blacked\n", i);
}
}
// void mylvgl()
// {
// lv_init();
// lv_demo_music();
// }
int main(void)
{
// system("snake game");
char str[] = "wifi join Dong abcd07691234";
my_round(20);
rt_wlan_config_autoreconnect(RT_TRUE);
rt_wlan_connect("Dong", "abcd07691234");
system(str);
mytime();
/* init Wi-Fi auto connect feature */
// wlan_autoconnect_init();

30
dayandnight/my_func.c Normal file
View File

@ -0,0 +1,30 @@
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <stdlib.h>
#include <drv_lcd.h>
void lcd_black(int x, int y)
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(BLACK);
}
void lcd_white(int x, int y)
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(WHITE);
}
void snake_address(int x, int y,int r,const rt_uint16_t da)
{
lcd_fill(x*r, y*r, x*r+r-1, y*r+r-1,da);
lcd_write_half_word(da);
}
// bt 命令行
int color_cmd(int argc, char **argv)
{
snake_address(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]),BLACK);
return 1;
}
MSH_CMD_EXPORT_ALIAS(color_cmd, snk, bt );

17
dayandnight/my_func.h Normal file
View File

@ -0,0 +1,17 @@
#include <drv_lcd.h>
#include <rtthread.h>
#include <stdio.h>
#include <malloc.h>
void lcd_black(int x, int y);
void lcd_white(int x, int y);
void snake_address(int x, int y, int r, const rt_uint16_t da);
// typedef int QDataType;
// typedef struct QListNode
// {
// QDataType data;
// struct QListNode* next;
// } QueueNode;

View File

@ -9,6 +9,7 @@
#include <ap3216c.h>
#include <dfs_posix.h>
#include <drv_lcd.h>
#include "mysnake.h"
char DEMO_PRODUCT_KEY[IOTX_PRODUCT_KEY_LEN + 1] = {0};
@ -282,6 +283,7 @@ static void mqtt_example_main(void *parameter)
#define THREAD_TIMESLICE 5
rt_thread_t MQTT_Thread = RT_NULL;
rt_thread_t Snake_Thread = RT_NULL;
void ath_init(void)
{
@ -313,6 +315,20 @@ int ap3_init(void){
return 0;
}
void snk_init(void)
{
Snake_Thread = rt_thread_create("Snake_Thread", snake_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
if (Snake_Thread != RT_NULL)
{
rt_thread_startup(Snake_Thread);
}
else
{
rt_kprintf("Snake Thread Create Failed!\n");
}
}
MSH_CMD_EXPORT_ALIAS(snk_init, snake, "snake game");
// void i20_init(void)
// {
// const char* i2c_bus_name = "i2c2";

51
dayandnight/mysnake.c Normal file
View File

@ -0,0 +1,51 @@
#include <stdio.h>
#include <rtthread.h>
#include <stdbool.h>
#include "my_func.h"
#include "mysnake.h"
#define LCD_MAX 240
#define SNAKE_SIZE 20
#define SNAKE_MAX LCD_MAX / SNAKE_SIZE
// bool snake_table[SNAKE_MAX][SNAKE_MAX] = {0};
// struct My_snake
// {
// int x;
// int y;
// }snake_list[SNAKE_MAX*SNAKE_MAX] = {0};
// /* rt_event_t 是指向事件结构体的指针类型 */
// typedef struct My_snake* my_snake_t;
void snake_entry(void)
{
int snake_list[SNAKE_MAX][2] = {0};
int snake_direction[4][2] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; // 上,下,左,右
int snake_head = 2, snake_tail = 0, former_head; // 蛇头,蛇尾
int now_direction = 3; // 当前方向
snake_list[1][0] = SNAKE_MAX / 2;
snake_list[1][1] = SNAKE_MAX / 2;
snake_list[0][0] = snake_list[1][0] - 1;
snake_list[0][1] = snake_list[1][1];
snake_list[2][0] = snake_list[1][0] + 1;
snake_list[2][1] = snake_list[1][1];
// snake_table[snake_list[0][0]][snake_list[0][1]] = 1;
// snake_table[snake_list[1][0]][snake_list[1][1]] = 1;
// snake_table[snake_list[2][0]][snake_list[2][1]] = 1;
snake_address(snake_list[0][0], snake_list[0][1], SNAKE_SIZE, BLACK);
snake_address(snake_list[1][0], snake_list[1][1], SNAKE_SIZE, BLACK);
snake_address(snake_list[2][0], snake_list[2][1], SNAKE_SIZE, BLACK);
int xx = 5;
while (1)
{
rt_thread_mdelay(500);
snake_address(snake_list[snake_tail][0], snake_list[snake_tail][1], SNAKE_SIZE, WHITE);
former_head = snake_head;
snake_head = (snake_head + 1) % (SNAKE_MAX);
snake_tail = (snake_tail + 1) % (SNAKE_MAX);
snake_list[snake_head][0] = snake_list[former_head][0] + snake_direction[now_direction][0];
snake_list[snake_head][1] = snake_list[former_head][1] + snake_direction[now_direction][1];
snake_address(snake_list[snake_head][0], snake_list[snake_head][1], SNAKE_SIZE, BLACK);
}
}

6
dayandnight/mysnake.h Normal file
View File

@ -0,0 +1,6 @@
#include <stdio.h>
#include <rtthread.h>
#include <stdbool.h>
#include "my_func.h"
void snake_entry(void);

View File

@ -578,6 +578,12 @@
/* Onboard Peripheral Drivers */
#define BSP_USING_USB_TO_USART
#define BSP_USING_RS485
/* set rts pin number */
#define BSP_RS485_RTS_PIN 104
#define RS485_UART_DEVICE_NAME "uart6"
#define BSP_USING_SRAM
#define BSP_USING_ONBOARD_LCD
#define BSP_USING_ONBOARD_LCD_PWM_BL
@ -597,7 +603,10 @@
#define BSP_USING_GPIO
#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_USING_UART6
#define BSP_USING_PWM
#define BSP_USING_PWM3
#define BSP_USING_PWM3_CH2
#define BSP_USING_PWM14
#define BSP_USING_PWM14_CH1
#define BSP_USING_ON_CHIP_FLASH