找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 512|回复: 2
收起左侧

关于蓝牙串口通信中自动模式代码修改

[复制链接]
ID:1070480 发表于 2024-4-15 16:12 | 显示全部楼层 |阅读模式
请大哥们帮看看,我做的是蓝牙温控风扇,下面代码是一个蓝牙串口通信,发送0x05相当于是个自动模式的指令,但是这个自动模式不能实时实现功能,当温度、设置的最大值Thigh和最小值TLow发生改变时要重新发送指令才能实现发生变化,如果自动模式这个代码不放在串口通信里面放到main主函数里面又会产生冲突。问一下代码要怎么修改或者提供下思路,谢谢!!!
void UART_Routine() interrupt 4  {
    if (RI) {
        RI = 0;     
        x = SBUF;
        switch (x) {
            case 0x01: Compare = 0, Speed=0; break;
            case 0x02: Compare = 50, Speed=1; break;
            case 0x03: Compare = 75, Speed=2; break;
            case 0x04: Compare = 100, Speed=3; break;
           case 0x05: if (T > THigh) {       
                                                 Compare = 100;
                                                Speed = 3;
                                        }
                                               else if (T <= THigh && T >= (THigh + TLow) / 2) {       
                                              Compare = 75;
                                               Speed = 2;
                                       }
                                             else if (T <= (THigh + TLow) / 2 && T > TLow) {                                                                       
                                                   Compare = 50;
                                            Speed = 1;
                                   }
                                          else {                       
                                          Compare = 0;
                                          Speed = 0;
                                 }
                                 break;       
        }                  
    }
}

回复

使用道具 举报

ID:161164 发表于 2024-4-16 13:06 | 显示全部楼层
自动模式要放到主循环那里判断
  1. void UART_Routine() interrupt 4  {
  2.     if (RI) {
  3.         RI = 0;     
  4.         x = SBUF;
  5.         switch (x) {
  6.                         case 0x01: Compare = 0, Speed=0; break;
  7.                         case 0x02: Compare = 50, Speed=1; break;
  8.                         case 0x03: Compare = 75, Speed=2; break;
  9.                         case 0x04: Compare = 100, Speed=3; break;
  10.         }                  
  11.     }
  12. }

  13. void main()
  14. {
  15.         //...
  16.         while(1)
  17.         {
  18.                 //...
  19.                 if(x == 0x05)
  20.                 {
  21.                         if (T > THigh)
  22.                         {
  23.                                 Compare = 100;
  24.                                 Speed = 3;
  25.                         }
  26.                         else if (T <= THigh && T >= (THigh + TLow) / 2)
  27.                         {
  28.                                 Compare = 75;
  29.                                 Speed = 2;
  30.                         }
  31.                         else if (T <= (THigh + TLow) / 2 && T > TLow)
  32.                         {
  33.                                 Compare = 50;
  34.                                 Speed = 1;
  35.                         }
  36.                         else
  37.                         {
  38.                                 Compare = 0;
  39.                                 Speed = 0;
  40.                         }
  41.                 }
  42.         }
  43. }
复制代码
回复

使用道具 举报

ID:277550 发表于 2024-4-16 11:09 | 显示全部楼层
代码不完整,需求不清晰。但建议,最好是接收到一个字符分隔符,在主函数中再处理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表