以下程序用到
一个I2C12864LCD屏幕
两个18b20温度传感器4.7k上拉电阻
一个电压电流功率模块ina226驱动
问题是屏幕初始化成功背光开启成功,清屏成功。到写屏的时候就卡住了。不知道是什么问题
只获取温度到屏幕显示时没有问题,加上功率测量模块后就不能写屏了
在写屏前通过串口输出测量到的电流电压等数据没有问题。
到写屏就卡住了
备注都很详细希望有人能给我看看
具体代码如下
- #include <Wire.h>
- #include <INA226.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <RSCG12864B.h> //引用库文件
- #define ONE_WIRE_BUS 2 // 单总线温度数据输出脚接开发板数字引脚30
- #define controlpower 6 //输出功率控制脚,驱动板控制脚
- INA226 ina; //创建ina266对象ina
- OneWire oneWire(ONE_WIRE_BUS); //设置单总线数据传输脚ONE_WIRE_BUS
- DallasTemperature sensors(&oneWire); //设置温度传感器对象sensors,
- uint8_t sensor1[8] = { 0x28, 0xAC, 0x3E, 0x48, 0xF6, 0x7E, 0x3C, 0xCE };//温度传感器1地址
- uint8_t sensor2[8] = { 0x28, 0xB6, 0x41, 0x48, 0xF6, 0x01, 0x3C, 0xF6 };//温度传感器2地址
- unsigned char Power[] = {0xB9, 0xA6, 0xC2, 0xCA, 0xA3, 0xBA, 0}; //功率:
- unsigned char wd[] = {0xCB, 0xAE, 0xCE, 0xC2, 0xA3, 0xBA, 0}; //水温:
- unsigned char sw[] = {0xCA, 0xD2, 0xCE, 0xC2, 0xA3, 0xBA, 0}; //室温:
- unsigned char Voltage[] = {0xB5, 0xE7, 0xD1, 0xB9, 0xA3, 0xBA, 0}; //电压:
- unsigned char Current[] = {0xB5, 0xE7, 0xC1, 0xF7, 0xA3, 0xBA, 0}; //电流:
- unsigned char tempd[] = {0xA1, 0xE6, 0}; //温度单位字符℃
- unsigned char wdz[5]; //float Temp_c1转char[]入
- unsigned char swz[5]; //float Temp_c2转char[]入
- unsigned char Iz[5]; //float Current_value转char[]入
- unsigned char Vz[5]; //float Voltage_value转char[]入
- unsigned char Pz[5]; //float Power_value转char[]入
- int powerfactor = 80; //默认功率因数
- float Power_value; //功率值float类型
- float Current_value; //电流值float类型
- float Voltage_value; //电压值float类型
- float Temp_c1; //温度值float类型
- float Temp_c2; //温度值float类型
- void setup()
- {
- pinMode(controlpower, OUTPUT); //设置功率控制脚为输出
- Serial.begin(9600); //开启串口通讯,设置速率9600,调试使用
- sensors.begin(); //单总线温度传感器数据传输初始化
- // 默认 INA226 i2c地址 0x40
- ina.begin(); //ina226数据传输i2c初始化(电压电流监控)
- ina.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
- // 配置 INA226
- Serial.print("B");
- ina.calibrate(0.001, 15); // 校正 INA226. 分流电阻 = 0.001 ohm, 最大电流 = 15A
- //ina.enableOverPowerLimitAlert(); // 启用电源超限报警
- // ina.setPowerLimit(150); //功率报警值150w
- // ina.setAlertLatch(true); //报警起开关
- RSCG12864B.begin(); //显示串口初始化
- RSCG12864B.brightness(50); //设置背光0-255
- RSCG12864B.clear(); //清屏
- }
- void loop()
- { analogWrite(controlpower, powerfactor); //启动时按默认功率工作
- //unsigned char i;
- Power_value = ina.readBusPower(); //获取功率
- Current_value = ina.readShuntCurrent(); //获取电流
- Voltage_value = ina.readBusVoltage(); //获取电压
- //写屏待操作
- //输出控制流程待构建
- /*Serial.print("Bus power: ");
- Serial.print(Power_value); //功率
- Serial.println(" W");
- Serial.print("Bus voltage: ");
- Serial.print(Voltage_value); //电压
- Serial.println(" V");
- Serial.print("Shunt current: ");
- Serial.print(Current_value); //电流
- Serial.println(" A");*/
- sensors.requestTemperatures(); // 发送命令请求温度
- Temp_c1 = sensors.getTempC(sensor1); //接收水温
- Temp_c2 = sensors.getTempC(sensor2); //接收室温
- //Serial.println(Temp_c2);
-
- RSCG12864B.print_string_12_xy(0, 0, wd); //输出汉字水温:;标记:程序在这语句时卡死。上方增加打印输出Temp_c2正常,下方打印无法输出
- //Serial.println(Temp_c2);
- { dtostrf(Temp_c1, 3, 2, wdz); //dtostrf函数,可以将字符变成字符串显示。
- //将温度值float Temp_c1转化为字符串并存储在温度值char wdz
- RSCG12864B.print_string_12_xy(13, 0, wdz); //输出水温值
- }
- RSCG12864B.print_string_12( tempd); //输出温度单位℃
- RSCG12864B.print_string_12_xy(0, 13, sw); //输出汉字室温
- {
- dtostrf(Temp_c2, 3, 2, swz);
- //将温度值float Temp_c2转化为字符串并存储在温度值char swz
- RSCG12864B.print_string_12(swz); //输出室温值
- }
- RSCG12864B.print_string_12(tempd); //输出单位℃
- RSCG12864B.print_string_12_xy(0, 26, Power); //坐标0,26,显示汉字功率
- { dtostrf(Power_value, 3, 2, Pz);
- RSCG12864B.print_string_12(Pz); //显示功率值
- }
- RSCG12864B.print_string_12("W"); //显示功率单位
- RSCG12864B.print_string_12_xy(0, 39, Voltage);//坐标0,39,显示汉字电压
- {
- dtostrf(Voltage_value, 3, 2, Vz);
- RSCG12864B.print_string_12(Vz); //显示电压值
- }
- RSCG12864B.print_string_12("V"); //显示电压单位
- RSCG12864B.print_string_12_xy(0, 52, Current);//坐标0,52,显示汉字电流
- {
- dtostrf(Current_value, 3, 2, Iz);
- RSCG12864B.print_string_12(Iz); //显示电流值
- }
- RSCG12864B.print_string_12("A"); //显示电流单位
- delay(1500); //延迟1.5秒
- RSCG12864B.clear(); //清屏
- }
- /*------------一下为子程序(功能函数)-----------------*/
复制代码
|