Commit da072c9c authored by 957dd's avatar 957dd

Merge branch 'feature/device_change' into 'master'

加入了mqtt改名和版本回退 See merge request !30
parents cb2cc0a7 00d76b09
...@@ -1108,6 +1108,7 @@ CMakeFiles/main.dir/device_judg/judg/judg.c.o ...@@ -1108,6 +1108,7 @@ CMakeFiles/main.dir/device_judg/judg/judg.c.o
/home/orangepi/car/master/device_judg/device/pao.h /home/orangepi/car/master/device_judg/device/pao.h
/home/orangepi/car/master/include/fileopen.h /home/orangepi/car/master/include/fileopen.h
/home/orangepi/car/master/system/gpio/gpio_pwm_tank0202.h /home/orangepi/car/master/system/gpio/gpio_pwm_tank0202.h
/home/orangepi/car/master/device_judg/device/device_change.h
CMakeFiles/main.dir/src/delay.c.o CMakeFiles/main.dir/src/delay.c.o
/home/orangepi/car/master/src/delay.c /home/orangepi/car/master/src/delay.c
...@@ -1566,6 +1567,7 @@ CMakeFiles/main.dir/src/fileopen.c.o ...@@ -1566,6 +1567,7 @@ CMakeFiles/main.dir/src/fileopen.c.o
/home/orangepi/car/master/include/log.h /home/orangepi/car/master/include/log.h
/home/orangepi/car/master/include/delay.h /home/orangepi/car/master/include/delay.h
/home/orangepi/car/master/include/delay.h /home/orangepi/car/master/include/delay.h
/home/orangepi/car/master/device_judg/device/device_change.h
CMakeFiles/main.dir/src/ip.c.o CMakeFiles/main.dir/src/ip.c.o
/home/orangepi/car/master/src/ip.c /home/orangepi/car/master/src/ip.c
......
...@@ -1100,7 +1100,8 @@ CMakeFiles/main.dir/device_judg/judg/judg.c.o: ../device_judg/judg/judg.c \ ...@@ -1100,7 +1100,8 @@ CMakeFiles/main.dir/device_judg/judg/judg.c.o: ../device_judg/judg/judg.c \
../device_judg/device/ship.h \ ../device_judg/device/ship.h \
../device_judg/device/pao.h \ ../device_judg/device/pao.h \
../include/fileopen.h \ ../include/fileopen.h \
../system/gpio/gpio_pwm_tank0202.h ../system/gpio/gpio_pwm_tank0202.h \
../device_judg/device/device_change.h
CMakeFiles/main.dir/src/delay.c.o: ../src/delay.c \ CMakeFiles/main.dir/src/delay.c.o: ../src/delay.c \
/usr/include/stdc-predef.h \ /usr/include/stdc-predef.h \
...@@ -1555,7 +1556,8 @@ CMakeFiles/main.dir/src/fileopen.c.o: ../src/fileopen.c \ ...@@ -1555,7 +1556,8 @@ CMakeFiles/main.dir/src/fileopen.c.o: ../src/fileopen.c \
../system/gpio/gpio_common.h \ ../system/gpio/gpio_common.h \
../include/log.h \ ../include/log.h \
../include/delay.h \ ../include/delay.h \
../include/delay.h ../include/delay.h \
../device_judg/device/device_change.h
CMakeFiles/main.dir/src/ip.c.o: ../src/ip.c \ CMakeFiles/main.dir/src/ip.c.o: ../src/ip.c \
/usr/include/stdc-predef.h \ /usr/include/stdc-predef.h \
......
...@@ -141,4 +141,5 @@ CMakeFiles/main.dir/device_judg/judg/judg.c.o: \ ...@@ -141,4 +141,5 @@ CMakeFiles/main.dir/device_judg/judg/judg.c.o: \
/home/orangepi/car/master/device_judg/device/ship.h \ /home/orangepi/car/master/device_judg/device/ship.h \
/home/orangepi/car/master/device_judg/device/pao.h \ /home/orangepi/car/master/device_judg/device/pao.h \
/home/orangepi/car/master/include/fileopen.h \ /home/orangepi/car/master/include/fileopen.h \
/home/orangepi/car/master/system/gpio/gpio_pwm_tank0202.h /home/orangepi/car/master/system/gpio/gpio_pwm_tank0202.h \
/home/orangepi/car/master/device_judg/device/device_change.h
...@@ -129,4 +129,5 @@ CMakeFiles/main.dir/src/fileopen.c.o: \ ...@@ -129,4 +129,5 @@ CMakeFiles/main.dir/src/fileopen.c.o: \
/home/orangepi/car/master/system/gpio/gpio_common.h \ /home/orangepi/car/master/system/gpio/gpio_common.h \
/home/orangepi/car/master/include/log.h \ /home/orangepi/car/master/include/log.h \
/home/orangepi/car/master/include/delay.h \ /home/orangepi/car/master/include/delay.h \
/home/orangepi/car/master/include/delay.h /home/orangepi/car/master/include/delay.h \
/home/orangepi/car/master/device_judg/device/device_change.h
...@@ -2,5 +2,5 @@ ...@@ -2,5 +2,5 @@
#define PROJECT_VERSION_MINOR 1 #define PROJECT_VERSION_MINOR 1
#define PROJECT_VERSION_PATCH 0 #define PROJECT_VERSION_PATCH 0
#define GIT_HASH "" #define GIT_HASH ""
#define BUILD_TIMESTAMP "2025-05-10T10:40:46" #define BUILD_TIMESTAMP "2025-05-12T08:19:12"
#define BUILD_USER "orangepi" #define BUILD_USER "orangepi"
No preview for this file type
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#define BUFFER_SIZE 1024 #define BUFFER_SIZE 1024
char buffer_device_change_fail[40]; // 用于回退存储文件内容
// 判断文件是否存在 // 判断文件是否存在
int file_exists(const char *path) { int file_exists(const char *path) {
return access(path, F_OK) == 0; return access(path, F_OK) == 0;
...@@ -137,7 +139,7 @@ time_t extract_timestamp(const char *filename) { ...@@ -137,7 +139,7 @@ time_t extract_timestamp(const char *filename) {
return 0; return 0;
} }
// 查找目录中最新的设备备份文件 // 查找目录中最
char *find_latest_file(const char *dir_path) { char *find_latest_file(const char *dir_path) {
DIR *dir = opendir(dir_path); DIR *dir = opendir(dir_path);
if (!dir) { if (!dir) {
...@@ -230,5 +232,27 @@ char *device_changename_back_fail(void) { ...@@ -230,5 +232,27 @@ char *device_changename_back_fail(void) {
my_zlog_debug("回退路径为: %s", full_path); my_zlog_debug("回退路径为: %s", full_path);
free(latest_file); free(latest_file);
return full_path;
return full_path;
}
//读取失败备份内容
char *read_device_back_fail() {
FILE *file;
char *device_back_fail =device_changename_back_fail();
if(device_back_fail !=NULL) { //如果在备份文件中找到
file = fopen(device_back_fail, "r"); // 以只读模式打开文件
if (fgets(buffer_device_change_fail, sizeof(buffer_device_change_fail), file) != NULL) {
// 如果文件内容不为空
fclose(file);
my_zlog_debug("读取到备份文件内容: %s", buffer_device_change_fail);
free(device_back_fail);
return buffer_device_change_fail;
} else {
my_zlog_debug("读取备份文件失败");
}
fclose(file);
return NULL;
}
return NULL;
} }
...@@ -7,4 +7,5 @@ ...@@ -7,4 +7,5 @@
int device_changename_back(const char *device_date, const char *device_id);//设备号备份和写人新设备号 int device_changename_back(const char *device_date, const char *device_id);//设备号备份和写人新设备号
int file_exists(const char *path);//文件已经存在 int file_exists(const char *path);//文件已经存在
int create_directory_if_not_exists(const char *path);//创建目录 int create_directory_if_not_exists(const char *path);//创建目录
char *read_device_back_fail();//下载失败回退版本
#endif #endif
\ No newline at end of file
...@@ -11,12 +11,14 @@ ...@@ -11,12 +11,14 @@
#include "pao.h" #include "pao.h"
#include "fileopen.h" #include "fileopen.h"
#include "gpio_pwm_tank0202.h" #include "gpio_pwm_tank0202.h"
#include "device_change.h"
char TOPIC_middle[23]; char TOPIC_middle[23];
char TOPIC2_middle[23]; char TOPIC2_middle[23];
char TOPIC3_middle[15]; char TOPIC3_middle[15];
bool device_name_exists=0;
// char TOPIC_BACK_middle[23]; // char TOPIC_BACK_middle[23];
// char TOPIC2_BACK_middle[23]; // char TOPIC2_BACK_middle[23];
// char TOPIC3_BACK_middle[15]; // char TOPIC3_BACK_middle[15];
...@@ -89,7 +91,7 @@ int hash_insert_init(HashTable *hashTable) { ...@@ -89,7 +91,7 @@ int hash_insert_init(HashTable *hashTable) {
int Device_judg(CodeEnum code,char *sub_str) { int Device_judg(CodeEnum code,char *sub_str) {
if (code == CAR_0101) { if (code == CAR_0101) {
car_Init_0101() ; car_Init_0101();
my_zlog_info("使用型号%s",sub_str); my_zlog_info("使用型号%s",sub_str);
}else if(code == CAR_0102) { }else if(code == CAR_0102) {
car_Init_0102(); car_Init_0102();
...@@ -107,16 +109,16 @@ int Device_judg(CodeEnum code,char *sub_str) { ...@@ -107,16 +109,16 @@ int Device_judg(CodeEnum code,char *sub_str) {
ptr_Init_0401(); ptr_Init_0401();
my_zlog_info("使用型号%s",sub_str); my_zlog_info("使用型号%s",sub_str);
}else { }else {
my_zlog_error("没有找到设备号"); my_zlog_error("没有找到设备号,尝试启用备用mqtt,topic进行改名");
exit(0); device_name_exists=1;
//exit(0);
} }
return 0; return 0;
} }
int Device_File_Init() {//设备文件读取函数 int Device_File_Init() {//设备文件读取函数
char *readmidbuf=device_inspect(); //读取代码 char *readmidbuf=device_inspect(); //读取代码
if(strlen(readmidbuf) > 14 && readmidbuf[14]=='\n') readmidbuf[14]='\0';//将\n去除
if(strlen(readmidbuf) > 14 && readmidbuf[14]=='\n') readmidbuf[14]=='\0';//将\n去除
const char *readbuf = readmidbuf; const char *readbuf = readmidbuf;
...@@ -138,10 +140,16 @@ int Device_File_Init() {//设备文件读取函数 ...@@ -138,10 +140,16 @@ int Device_File_Init() {//设备文件读取函数
free(sub_str); free(sub_str);
Delay_Ms(20,0); Delay_Ms(20,0);
if(device_name_exists == 0) {
sprintf(TOPIC2_middle,"dev2app/%s",readbuf);
sprintf(TOPIC_middle,"app2dev/%s",readbuf);
sprintf(TOPIC3_middle,"%s",readbuf);
} else {
sprintf(TOPIC2_middle,"dev2app/%s","00000000000000");
sprintf(TOPIC_middle,"app2dev/%s","00000000000000");
sprintf(TOPIC3_middle,"%s","00000000000000");
}
sprintf(TOPIC2_middle,"dev2app/%s",readbuf);
sprintf(TOPIC_middle,"app2dev/%s",readbuf);
sprintf(TOPIC3_middle,"%s",readbuf);
topic_middle_value();//指针传值声明 topic_middle_value();//指针传值声明
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
#define INITIAL_TABLE_SIZE 10 //定义大小 #define INITIAL_TABLE_SIZE 10 //定义大小
// 定义一个枚举类型 CodeEnum,用于表示不同的代码 // 定义一个枚举类型 CodeEnum,用于表示不同的代码
// 枚举类型是一种用户自定义的数据类型,它可以让代码更具可读性和可维护性 // 枚举类型是一种用户自定义的数据类型,它可以让代码更具可读性和可维护性
typedef enum { typedef enum {
......
#include "fileopen.h" #include "fileopen.h"
#include "common.h" #include "common.h"
#include "delay.h" #include "delay.h"
#include "device_change.h"
char buffer_device[30]; // 用于存储文件内容 char buffer_device[30]; // 用于存储文件内容
char buffer_version[30];// 用于存储版本号内容 char buffer_version[30];// 用于存储版本号内容
char *device_inspect() {//读出文件函数 char *device_inspect() {//读出文件函数
FILE *file; FILE *file;
char *read_device_back_fail_middle=read_device_back_fail();
while (1) { while (1) {
file = fopen(FILENAME, "r"); // 以只读模式打开文件 file = fopen(FILENAME, "r"); // 以只读模式打开文件
if (file == NULL) { if (file == NULL) {
if(read_device_back_fail_middle!=NULL) {//回退文件
return read_device_back_fail_middle;
}
my_zlog_debug("文件 %s 打开失败,等待中...", FILENAME); my_zlog_debug("文件 %s 打开失败,等待中...", FILENAME);
} }
else { else {
...@@ -22,6 +26,10 @@ char *device_inspect() {//读出文件函数 ...@@ -22,6 +26,10 @@ char *device_inspect() {//读出文件函数
my_zlog_debug("读取到文件内容: %s", buffer_device); my_zlog_debug("读取到文件内容: %s", buffer_device);
return buffer_device; return buffer_device;
} else { } else {
if(read_device_back_fail_middle!=NULL) {
fclose(file);
return read_device_back_fail();
}
my_zlog_debug("文件为空,等待中..."); my_zlog_debug("文件为空,等待中...");
} }
fclose(file); fclose(file);
...@@ -34,7 +42,7 @@ char *program_version() {//打开版本文件 ...@@ -34,7 +42,7 @@ char *program_version() {//打开版本文件
FILE *file; FILE *file;
file = fopen(FILE_VERSION, "r"); // 以只读模式打开文件 file = fopen(FILE_VERSION, "r"); // 以只读模式打开文件
if (file == NULL) { if (file == NULL) {
my_zlog_debug("文件无"); my_zlog_debug("版本文件无");
} else { } else {
// 尝试读取文件内容 // 尝试读取文件内容
if (fgets(buffer_version, sizeof(buffer_version), file) != NULL) { if (fgets(buffer_version, sizeof(buffer_version), file) != NULL) {
......
...@@ -61,13 +61,13 @@ int mqtt_init() { ...@@ -61,13 +61,13 @@ int mqtt_init() {
void on_connect(struct mosquitto *mosq, void *obj, int rc) {//回调函数 void on_connect(struct mosquitto *mosq, void *obj, int rc) {//回调函数
if (rc == 0) { if (rc == 0) {
my_zlog_debug("Connected to broker"); my_zlog_debug("Connected to broker");
topic_middle_value(); topic_middle_value();
mosquitto_subscribe(mosq, NULL, TOPIC, 0); mosquitto_subscribe(mosq, NULL, TOPIC, 0);
//mosquitto_subscribe(mosq, NULL, TOPIC_BACK, 0); //mosquitto_subscribe(mosq, NULL, TOPIC_BACK, 0);
} else { } else {
fprintf(stderr, "Connection failed with code %d\n", rc); fprintf(stderr, "Connection failed with code %d\n", rc);
my_zlog_fatal("Connection failed"); my_zlog_fatal("Connection failed");
} }
} }
......
...@@ -27,25 +27,25 @@ void car0102_mode_1_flont(unsigned char gval) { ...@@ -27,25 +27,25 @@ void car0102_mode_1_flont(unsigned char gval) {
}else if (gval < 50) { }else if (gval < 50) {
pwmWrite(PWM_PIN_SPEED, 1000); pwmWrite(PWM_PIN_SPEED, 1000);
} else if (gval <= 55) { } else if (gval <= 55) {
pwmWrite(PWM_PIN_SPEED, 1000-200); pwmWrite(PWM_PIN_SPEED, 1000-350);
} else if (gval <= 60) { } else if (gval <= 60) {
pwmWrite(PWM_PIN_SPEED, 1000-300); pwmWrite(PWM_PIN_SPEED, 1000-400);
} else if (gval <= 65) { } else if (gval <= 65) {
pwmWrite(PWM_PIN_SPEED, 1000-350); pwmWrite(PWM_PIN_SPEED, 1000-450);
} else if (gval <= 70) { } else if (gval <= 70) {
pwmWrite(PWM_PIN_SPEED, 1000-400); pwmWrite(PWM_PIN_SPEED, 1000-500);
} else if (gval <= 75) { } else if (gval <= 75) {
pwmWrite(PWM_PIN_SPEED, 1000-450); pwmWrite(PWM_PIN_SPEED, 1000-550);
} else if (gval <= 90) { } else if (gval <= 90) {
pwmWrite(PWM_PIN_SPEED, 1000-500); pwmWrite(PWM_PIN_SPEED, 1000-600);
} else if (gval <= 100) { } else if (gval <= 100) {
pwmWrite(PWM_PIN_SPEED, 1000-550);
} else if (gval <= 110) {
pwmWrite(PWM_PIN_SPEED, 1000-600); pwmWrite(PWM_PIN_SPEED, 1000-600);
} else if (gval <= 110) {
pwmWrite(PWM_PIN_SPEED, 1000-650);
} else if (gval <= 120) { } else if (gval <= 120) {
pwmWrite(PWM_PIN_SPEED, 1000-650); pwmWrite(PWM_PIN_SPEED, 1000-650);
} else if (gval <= 130) { } else if (gval <= 130) {
pwmWrite(PWM_PIN_SPEED, 1000-100); pwmWrite(PWM_PIN_SPEED, 1000-700);
} else if (gval <= 140) { } else if (gval <= 140) {
pwmWrite(PWM_PIN_SPEED, 1000-750); pwmWrite(PWM_PIN_SPEED, 1000-750);
} else if (gval <= 150) { } else if (gval <= 150) {
...@@ -65,43 +65,44 @@ void car0102_mode_1_flont(unsigned char gval) { ...@@ -65,43 +65,44 @@ void car0102_mode_1_flont(unsigned char gval) {
void car0102_mode_2_back(unsigned char gval) { void car0102_mode_2_back(unsigned char gval) {
int k = 5; int k = 5;
int b = 10;
pin_value(26,0); pin_value(26,0);
if (gval < 50) { if (gval < 50) {
pwmWrite(PWM_PIN_SPEED, 0); pwmWrite(PWM_PIN_SPEED, 0);
} else if (gval <= 55) { } else if (gval <= 55) {
pwmWrite(PWM_PIN_SPEED, 5 * k); pwmWrite(PWM_PIN_SPEED, b + 30 * k);
} else if (gval <= 60) { } else if (gval <= 60) {
pwmWrite(PWM_PIN_SPEED, 0+10 * k); pwmWrite(PWM_PIN_SPEED, b + 30 * k);
} else if (gval <= 65) { } else if (gval <= 65) {
pwmWrite(PWM_PIN_SPEED, 0+15 * k); pwmWrite(PWM_PIN_SPEED, b + 30 * k);
} else if (gval <= 70) { } else if (gval <= 70) {
pwmWrite(PWM_PIN_SPEED, 0+20 * k); pwmWrite(PWM_PIN_SPEED, b + 30 * k);
} else if (gval <= 75) { } else if (gval <= 75) {
pwmWrite(PWM_PIN_SPEED, 0+25 * k); pwmWrite(PWM_PIN_SPEED, b + 30 * k);
} else if (gval <= 90) { } else if (gval <= 90) {
pwmWrite(PWM_PIN_SPEED, 0+30 * k); pwmWrite(PWM_PIN_SPEED, b + 30 * k);
} else if (gval <= 100) { } else if (gval <= 100) {
pwmWrite(PWM_PIN_SPEED, 0+35 * k); pwmWrite(PWM_PIN_SPEED, b + 35 * k);
} else if (gval <= 110) { } else if (gval <= 110) {
pwmWrite(PWM_PIN_SPEED, 0+40 * k); pwmWrite(PWM_PIN_SPEED, b + 40 * k);
} else if (gval <= 120) { } else if (gval <= 120) {
pwmWrite(PWM_PIN_SPEED, 0+45 * k); pwmWrite(PWM_PIN_SPEED, b + 45 * k);
} else if (gval <= 130) { } else if (gval <= 130) {
pwmWrite(PWM_PIN_SPEED, 0+50 * k); pwmWrite(PWM_PIN_SPEED, b + 50 * k);
} else if (gval <= 140) { } else if (gval <= 140) {
pwmWrite(PWM_PIN_SPEED, 0+55 * k); pwmWrite(PWM_PIN_SPEED, b + 55 * k);
} else if (gval <= 150) { } else if (gval <= 150) {
pwmWrite(PWM_PIN_SPEED, 0+60 * k); pwmWrite(PWM_PIN_SPEED, b + 60 * k);
} else if (gval <= 160) { } else if (gval <= 160) {
pwmWrite(PWM_PIN_SPEED, 0+60 * k); pwmWrite(PWM_PIN_SPEED, b + 60 * k);
} else if (gval <= 170) { } else if (gval <= 170) {
pwmWrite(PWM_PIN_SPEED, 0+65 * k); pwmWrite(PWM_PIN_SPEED, b + 65 * k);
} else if (gval <= 180) { } else if (gval <= 180) {
pwmWrite(PWM_PIN_SPEED, 0+70 * k); pwmWrite(PWM_PIN_SPEED, b + 70 * k);
} else if (gval <= 190) { } else if (gval <= 190) {
pwmWrite(PWM_PIN_SPEED, 0+75 * k); pwmWrite(PWM_PIN_SPEED, b + 75 * k);
} else if (gval <= 200) { } else if (gval <= 200) {
pwmWrite(PWM_PIN_SPEED, 0+100 * k); pwmWrite(PWM_PIN_SPEED, b + 100 * k);
} }
} }
......
...@@ -12,7 +12,7 @@ void car_calculate_L_R(int angle) {//将角度转化为对应的舵机pwm值 ...@@ -12,7 +12,7 @@ void car_calculate_L_R(int angle) {//将角度转化为对应的舵机pwm值
float pulse_width=(2 / 180.0) * angle + 0.5; float pulse_width=(2 / 180.0) * angle + 0.5;
// 周期(ms) // 周期(ms)
float period = 1000.0 / 50; float period = 1000.0 / 50;
int val = (int)((pulse_width / period) * 1024); int val = (int)((pulse_width / period) * 1000);
pwmWrite(PWM_PIN_CHANGE,val); pwmWrite(PWM_PIN_CHANGE,val);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment