|
|
一直想弄个解析电池电量的显示屏,但是苦于我是个好厨子只会好菜,前几天搜索带单片机的数码管发现了这个玩意,不过坑还挺多的,比如断电以后需要手动按按钮设置,
不过路子挺野,用app从蓝牙读取再使用蓝牙透传反传给数码管。
不过发现他家还有个可以支持数字字母的数码管,不过要三十多大洋没舍得整,等哪天有空了再研究吧。手里还有个4G透传和GPS也打算给他缝进去,不过4G透传走TCP模式很容易呆了,又得绕回单片机这个问题
如果问我推不推荐搞一个这样的我感觉是不推荐,我感觉真要搞还是得弄个单片机,再搭配个支持ASCII的数码管表,直接走RS485方案,毕竟我能想到的只有用微型PC或者安卓手机通讯串口,单片机我倒是搞了几个开发板连环境我都搭建不了。
生命不息,折腾不止
解析SOC的函数(485):
发送:
收到
- 01 03 3A 17 70 00 11 00 5A 06 F6 04 D2 00 00 00 16 00 17 00 18 10 1B 10 02 10 10 10 7E 0F AC 0F C1 0F CC 0F D7 0F E2 0F ED 0F F8 10 03 10 04 10 0F 10 1A 10 25 10 30 10 3B 10 46 10 51 XX XX
复制代码
拆分为4个字母一组:索引位为4(0开始)
既:
附带中盛数码管数据合成函数:
- function createNumberPacket(num) {
- // 基础数据部分(站号1,功能码06,寄存器地址0000)
- const base = [0x01, 0x06, 0x00, 0x00];
-
- // 根据输入的数字设置数据部分
- const valueHigh = (num >> 8) & 0xFF;
- const valueLow = num & 0xFF;
-
- const data = new Uint8Array([...base, valueHigh, valueLow]);
-
- // 计算CRC
- let crc = 0xFFFF;
- for (let i = 0; i < data.length; i++) {
- crc ^= data[i];
- for (let j = 0; j < 8; j++) {
- crc = crc & 0x0001 ? (crc >> 1) ^ 0xA001 : crc >> 1;
- }
- }
- const packet = new Uint8Array(8);
- packet.set(data);
- packet[6] = crc & 0xFF;
- packet[7] = (crc >> 8) & 0xFF;
-
- return packet;
- }
- // 测试
- console.log('数字 1:', Buffer.from(createNumberPacket(1)).toString('hex') );
- console.log('数字 2:', Buffer.from(createNumberPacket(2)).toString('hex') );
- console.log('数字 3:', Buffer.from(createNumberPacket(3)).toString('hex') );
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|