程序卡死,不知道原因有大神给帮忙诊断下吗?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 453|回复: 2

[未解决] 程序卡死,不知道原因有大神给帮忙诊断下吗?

[复制链接]
发表于 2022-6-10 20:25 | 显示全部楼层 |阅读模式
以下程序用到
一个I2C12864LCD屏幕
两个18b20温度传感器4.7k上拉电阻
一个电压电流功率模块ina226驱动
问题是屏幕初始化成功背光开启成功,清屏成功。到写屏的时候就卡住了。不知道是什么问题
只获取温度到屏幕显示时没有问题,加上功率测量模块后就不能写屏了
在写屏前通过串口输出测量到的电流电压等数据没有问题。
到写屏就卡住了
备注都很详细希望有人能给我看看
具体代码如下
  1. #include <Wire.h>
  2. #include <INA226.h>
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>
  5. #include <RSCG12864B.h>                      //引用库文件
  6. #define ONE_WIRE_BUS 2                       // 单总线温度数据输出脚接开发板数字引脚30
  7. #define controlpower 6                       //输出功率控制脚,驱动板控制脚
  8. INA226 ina;                                  //创建ina266对象ina

  9. OneWire oneWire(ONE_WIRE_BUS);               //设置单总线数据传输脚ONE_WIRE_BUS
  10. DallasTemperature sensors(&oneWire);         //设置温度传感器对象sensors,
  11. uint8_t sensor1[8] = { 0x28, 0xAC, 0x3E, 0x48, 0xF6, 0x7E, 0x3C, 0xCE };//温度传感器1地址
  12. uint8_t sensor2[8] = { 0x28, 0xB6, 0x41, 0x48, 0xF6, 0x01, 0x3C, 0xF6 };//温度传感器2地址
  13. unsigned char Power[] = {0xB9, 0xA6, 0xC2, 0xCA, 0xA3, 0xBA, 0};        //功率:
  14. unsigned char wd[] = {0xCB, 0xAE, 0xCE, 0xC2, 0xA3, 0xBA, 0};           //水温:
  15. unsigned char sw[] = {0xCA, 0xD2, 0xCE, 0xC2, 0xA3, 0xBA, 0};           //室温:
  16. unsigned char Voltage[] = {0xB5, 0xE7, 0xD1, 0xB9, 0xA3, 0xBA, 0};      //电压:
  17. unsigned char Current[] = {0xB5, 0xE7, 0xC1, 0xF7, 0xA3, 0xBA, 0};      //电流:
  18. unsigned char tempd[] = {0xA1, 0xE6, 0};      //温度单位字符℃
  19. unsigned char wdz[5];                         //float Temp_c1转char[]入
  20. unsigned char swz[5];                         //float Temp_c2转char[]入
  21. unsigned char Iz[5];                          //float Current_value转char[]入
  22. unsigned char Vz[5];                          //float Voltage_value转char[]入
  23. unsigned char Pz[5];                          //float Power_value转char[]入
  24. int powerfactor = 80;                         //默认功率因数
  25. float Power_value;                            //功率值float类型
  26. float Current_value;                          //电流值float类型
  27. float Voltage_value;                          //电压值float类型
  28. float Temp_c1;                                //温度值float类型
  29. float Temp_c2;                                //温度值float类型

  30. void setup()
  31. {
  32.   pinMode(controlpower, OUTPUT);              //设置功率控制脚为输出
  33.   Serial.begin(9600);                         //开启串口通讯,设置速率9600,调试使用
  34.   sensors.begin();                            //单总线温度传感器数据传输初始化
  35.   // 默认 INA226 i2c地址  0x40
  36.   ina.begin();                                //ina226数据传输i2c初始化(电压电流监控)
  37.   ina.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
  38.   // 配置 INA226
  39.   Serial.print("B");
  40.   ina.calibrate(0.001, 15);                   // 校正 INA226. 分流电阻 = 0.001 ohm, 最大电流 = 15A
  41.   //ina.enableOverPowerLimitAlert();          // 启用电源超限报警
  42.   // ina.setPowerLimit(150);                  //功率报警值150w
  43.   // ina.setAlertLatch(true);                 //报警起开关

  44.   RSCG12864B.begin();                         //显示串口初始化
  45.   RSCG12864B.brightness(50);                  //设置背光0-255
  46.   RSCG12864B.clear();                         //清屏
  47. }

  48. void loop()
  49. { analogWrite(controlpower, powerfactor);      //启动时按默认功率工作
  50.   //unsigned char i;
  51.   Power_value = ina.readBusPower();            //获取功率
  52.   Current_value = ina.readShuntCurrent();      //获取电流
  53.   Voltage_value = ina.readBusVoltage();        //获取电压

  54.   //写屏待操作
  55.   //输出控制流程待构建
  56.   /*Serial.print("Bus power:     ");
  57.   Serial.print(Power_value);                   //功率
  58.   Serial.println(" W");
  59.   Serial.print("Bus voltage:   ");
  60.   Serial.print(Voltage_value);                 //电压
  61.   Serial.println(" V");
  62.   Serial.print("Shunt current: ");
  63.   Serial.print(Current_value);                 //电流
  64.   Serial.println(" A");*/
  65.   sensors.requestTemperatures();               // 发送命令请求温度
  66.   Temp_c1 = sensors.getTempC(sensor1);         //接收水温
  67.   Temp_c2 = sensors.getTempC(sensor2);         //接收室温
  68.   //Serial.println(Temp_c2);
  69.   
  70.   RSCG12864B.print_string_12_xy(0, 0, wd);     //输出汉字水温:;标记:程序在这语句时卡死。上方增加打印输出Temp_c2正常,下方打印无法输出
  71.   //Serial.println(Temp_c2);
  72.   { dtostrf(Temp_c1, 3, 2, wdz);               //dtostrf函数,可以将字符变成字符串显示。

  73.     //将温度值float Temp_c1转化为字符串并存储在温度值char wdz
  74.     RSCG12864B.print_string_12_xy(13, 0, wdz); //输出水温值
  75.   }
  76.   RSCG12864B.print_string_12( tempd);          //输出温度单位℃

  77.   RSCG12864B.print_string_12_xy(0, 13, sw);    //输出汉字室温
  78.   {
  79.     dtostrf(Temp_c2, 3, 2, swz);
  80.     //将温度值float Temp_c2转化为字符串并存储在温度值char swz
  81.     RSCG12864B.print_string_12(swz);           //输出室温值
  82.   }
  83.   RSCG12864B.print_string_12(tempd);           //输出单位℃
  84.   RSCG12864B.print_string_12_xy(0, 26, Power); //坐标0,26,显示汉字功率
  85.   { dtostrf(Power_value, 3, 2, Pz);
  86.     RSCG12864B.print_string_12(Pz);             //显示功率值
  87.   }
  88.   RSCG12864B.print_string_12("W");              //显示功率单位
  89.   RSCG12864B.print_string_12_xy(0, 39, Voltage);//坐标0,39,显示汉字电压
  90.   {
  91.     dtostrf(Voltage_value, 3, 2, Vz);
  92.     RSCG12864B.print_string_12(Vz);             //显示电压值
  93.   }
  94.   RSCG12864B.print_string_12("V");              //显示电压单位
  95.   RSCG12864B.print_string_12_xy(0, 52, Current);//坐标0,52,显示汉字电流
  96.   {
  97.     dtostrf(Current_value, 3, 2, Iz);
  98.     RSCG12864B.print_string_12(Iz);             //显示电流值
  99.   }
  100.   RSCG12864B.print_string_12("A");              //显示电流单位
  101.   delay(1500);                                  //延迟1.5秒
  102.   RSCG12864B.clear();                           //清屏
  103. }


  104. /*------------一下为子程序(功能函数)-----------------*/
复制代码



发表于 2022-6-11 11:16 | 显示全部楼层
换个屏幕驱动库
 楼主| 发表于 2022-6-12 10:36 | 显示全部楼层

屏幕单独工作时是正常的,所有传感器配件都单独测试过,然后放一起就卡bug了。屏幕驱动库找了好久才找到这个,是库里的写屏函数有问题吗?能预估下是哪方面出问题了我自己把库函数修改下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 01:02 , Processed in 0.123169 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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