在线时间1188 小时
UID3174487
注册时间2015-10-31
NXP金币2221
TA的每日心情 | 开心 昨天 08:51 |
---|
签到天数: 2628 天 [LV.Master]伴坛终老
金牌会员
- 积分
- 10677
- 最后登录
- 2024-4-26
|
最近确实有点忙,昨晚又抽空把板子拿出来折腾了起来。因为自己没有LCD屏幕,但是板子上引出了I2C是可以接OLED的,屏幕小了点但是显示几个参数还是绰绰有余的。照着官方的例程修修补补总算是可以工作了。不过I2C的速度有点低刷新有点慢,找了半天不知道在哪里设置,有知道的朋友指点一下哈。
通过以下指令可以扫描i2c总线上挂接的设备,这里0x68是DS3231,0x57是24c32,0x3c是oled屏,0x40是sht20。
驱动程序就根据官方的例程改了改。
- int main(int argc, char** argv){
-
- fd = open("/dev/i2c-1",O_RDWR);
- if(fd<0){
- printf("Fail to open i2c device\r\n");
- return 0;
- }
- printf("device is ready!!!\r\n");
- ds3231_data.nmsgs=2;
- ds3231_data.msgs=(struct i2c_msg*)malloc(ds3231_data.nmsgs*sizeof(struct i2c_msg));
- if(!ds3231_data.msgs){
- printf("ds3231 malloc error\r\n");
- return 0;
- }
- ssd1306_data.nmsgs=1;
- ssd1306_data.msgs=(struct i2c_msg*)malloc(ssd1306_data.nmsgs*sizeof(struct i2c_msg));
- if(!ssd1306_data.msgs){
- printf("ssd1306 malloc error\r\n");
- return 0;
- }
- sht20_data.nmsgs=2;
- sht20_data.msgs=(struct i2c_msg*)malloc(sht20_data.nmsgs*sizeof(struct i2c_msg));
- if(!sht20_data.msgs){
- printf("sht20 malloc error\r\n");
- return 0;
- }
- ssd1306_init();
- ssd1306_Clear();
- sleep(1);
- SHT20_Soft_Reset();
- reg1 = SHT20_Read_Register();
- SHT20_Write_Register(((reg1 & 0x7e) | 0x80));
- reg2 = SHT20_Read_Register();
- sprintf(str, "0x%x---0x%x", reg1, reg2);
- OLED_ShowString(0,0,str,16);
- while(1){
- ds3231_ReadTime();
- printf("%02d",bcd_decimal((ds3231_data.msgs[1]).buf[2]));
- printf(":%02d",bcd_decimal((ds3231_data.msgs[1]).buf[1]));
- printf(":%02d\r\n",bcd_decimal((ds3231_data.msgs[1]).buf[0]));
- sprintf(str, "%02d:%02d:%02d", bcd_decimal((ds3231_data.msgs[1]).buf[2]),\
- bcd_decimal((ds3231_data.msgs[1]).buf[1]),\
- bcd_decimal((ds3231_data.msgs[1]).buf[0]));
- OLED_ShowString(0,2,str,16);
- usleep(1000*10);
- temp = SHT20_Read_value(Trigger_T_measuremnet_hold_master);
- temp &= ~0x0003;
- temp_t = -46.85 + 175.72 / 65536 * temp;
-
- sprintf(str, "T -%2.3f", temp_t);
- OLED_ShowString(0, 4, str, 16);
- temp = SHT20_Read_value(Trigger_RH_measuremnet_hold_master);
- temp &= ~0x0003;
- temp_rh = -6.0 + 125.0 / 65536 * temp;
- sprintf(str, "RH-%2.3f", temp_rh);
- OLED_ShowString(0, 6, str, 16);
- }
- // close(fd);
- // return 0;
- }
复制代码 最后上一张效果图,现在做的还比较简单,温湿度没有经过处理直接获取,有空了再折腾吧。
|
|