温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于arm的多路温度采集控制系统(4)菜单界面

发布时间:2020-07-13 13:59:49 来源:网络 阅读:1027 作者:中国神汉 栏目:编程语言

嵌入式项目实践–多路温度采集控制系统(4)菜单界面

菜单界面

基于arm的多路温度采集控制系统(4)菜单界面

菜单显示

   	printf("\nTC9000 湿温度控制系统V1.0");         printf("\n    [1] 报警设置");         printf("\n    [2] 输出控制设置");          printf("\n    [3] 湿度/温度查询");         printf("\n    [4] 系统设置");         printf("\n    [x] 退出系统");


接收命令行输入

        printf(shell_s);         fflush(stdout);         get_line(cmd);


输入选择处理

        switch(cmd[0]){             case '1':                 menu_alarm(cmd);                 break;             case '2':             ...         }


消息队列

获取队列ID

id = msgget((key_t)4455,0666|IPC_CREAT);

向队列发送消息

    struct st_msg cmd;     cmd.index = index;     cmd.dat = dat;     if((msgid=get_msgid_menu()) < 0)         return -1;     if(msgsnd(msgid,(void*)&cmd,sizeof(int),0)==-1)         return -1;

消息类型处理

#define TEMP_SMG_INDEX_BASE 10 #define UPDATE_TIME_SMG_INDEX 4 msg_type = TEMP_SMG_INDEX_BASE+channel; menu_send_update(msg_type,g_dev->temp_max[channel]);

消息队列相关命令

#ipcs -q //显示消息队列 #ipcrm -q <ID> //删除指定id队列

菜单界面代码

菜单程序头文件

#ifndef _TC9000_SYS_IPC_H #define _TC9000_SYS_IPC_H #include "config.h" //消息队列接收时索引值 #define TEMP_SMG_INDEX_BASE 10 #define WEB_SMG_INDEX 2 #define WEB_UPDATE_SMG_INDEX 3 #define UPDATE_TIME_SMG_INDEX 4 struct st_msg{     long int index;     int dat; }; struct st_msg_dev{     long int index;     struct st_sys dev; }; #endif


菜单界面程序



#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include "sys_ipc.h" #include "config.h" int menu_alarm(char * cmd);//报警功能菜单 int get_line(char *cmd);//获取命令行输入 struct st_sys g_dev[1];//全局变量 char shell_s[]="\nG9000 shell>$: ";//命令行提示符号 //同菜单进程通信的队列,key=4455 int get_msgid_menu(void) {     int id = -1;     id = msgget((key_t)4455,0666|IPC_CREAT);     if(id == -1){         printf("msgget error\n");         exit(1);     }     return id; } //向主控程序发送设置的数据 /*============================================ 函数名称:menu_send_update 功能:向主控程序发送设置的数据 参数:long int 消息类型 int 消息数据 返回值:return 0 返回主菜单 ============================================*/ int menu_send_update(long int index,int dat) {     int msgid;     struct st_msg cmd;     cmd.index = index;     cmd.dat = dat;     if((msgid=get_msgid_menu()) < 0)         return -1;     if(msgsnd(msgid,(void*)&cmd,sizeof(int),0)==-1)         return -1;     return 0; } /*============================================ 函数名称:menu_alarm 功能:温湿度报警设置菜单 参数:char* cmd 用户输入的命令 返回值:return 0 返回主菜单 ============================================*/ int menu_alarm(char* cmd) {     int channel;     long int msg_type;     while(1){         printf("\n    [1] 检测间隔时间(5-300s)");         printf("\n    [2] 温度上限报警值(40-90℃)");         printf("\n    [3] 温度下限报警值(-20-5℃)");         printf("\n    [4] 温度报警回差设置(1-10℃)");         printf("\n    [x] 返回主菜单");         printf(shell_s);         fflush(stdout);         get_line(cmd);         switch(cmd[0]){             case '1':                 printf("当前检测间隔时间:%d\n",g_dev->update_time);                 printf("请输入新值:");                 fflush(stdout);                 get_line(cmd);                 g_dev->update_time= atoi(cmd);                 msg_type = UPDATE_TIME_SMG_INDEX                 menu_send_update(msg_type,g_dev->update_time);                 break;             case '2':                 printf("\n    请选择传感器编号[1] [2] [3] [4] :");                 fflush(stdout);                 get_line(cmd);                 channel = atoi(cmd)-1;                 printf("当前温度上限报警值:%d\n",g_dev->temp_max[channel]);                 printf("请输入新值:");                 fflush(stdout);                 get_line(cmd);                 g_dev->temp_max[channel]= atoi(cmd);                 msg_type = TEMP_SMG_INDEX_BASE+channel;                 menu_send_update(msg_type,g_dev->temp_max[channel]);                 break;             case 'x':                 return 0;                 break;                           default:                 printf("输入选项错误!\n");                 break;         }        }     return 1; } //命令行输入处理 int get_line(char *cmd) {     int i=0;     char temp;     memset(cmd,0,sizeof(cmd));       while (1) {          temp = getchar();         cmd[i]=temp;             if(cmd[i]==13 || cmd[i] == 10){                         cmd[i]=0;                         break;         }         fflush(stdout);         i++;     }     return 0; } /*============================================ 函数名称:main 功能:系统命令行处理菜单主程序,通过队列同后台程序通信 参数:void * arg 返回值:int ============================================*/ int main(void) {     char cmd[16];//命令数据缓冲区     load_dev(g_dev);     while(1){         system("clear");         printf("\nTC9000 湿温度控制系统V1.0");         printf("\n    [1] 报警设置");         printf("\n    [2] 输出控制设置");          printf("\n    [3] 湿度/温度查询");         printf("\n    [4] 系统设置");         printf("\n    [x] 退出系统");         printf(shell_s);         fflush(stdout);         get_line(cmd);         switch(cmd[0]){             case '1':                 menu_alarm(cmd);                 break;             case '2':                 //menu_out_set(cmd);                 break;             case '3':                 //menu_data_show(cmd);                 break;              case '4':                 //menu_sys_set(cmd);                 break;                             case 'x':                 exit(0);                 break;                    default:                 printf("输入选项错误\n");                 break;         }     } }


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI