各位大大,小弟需要采用cc2530板子读取ds18b20温度值并将之发送到服务器。其中,cc2530裸机测试ds18b20温度值无问题,能正确读取数值,如下:
放到contiki中,出现问题如下:
以下是部分代码:
PROCESS_THREAD(udp_sender_process, ev, data)
{
static struct uip_ds6_notification n;
static struct udp_socket s;
PROCESS_BEGIN();
leds_on(LEDS_ALL);
set_global_address(); //设置IP地址
uip_ds6_notification_add(&n, route_callback);
/* Register UDP socket callback */
udp_socket_register(&s, NULL, receiver);
/* Bind UDP socket to local port */
udp_socket_bind(&s, DATA_CLIENT_PORT);
/* Connect UDP socket to remote port */
udp_socket_connect(&s, NULL, DATA_SERVER_PORT);
while(1) {
PROCESS_WAIT_EVENT_UNTIL(ev == event_data_ready);
sprintf(databuf,"temp=%s", data);
udp_socket_sendto(&s, // socket
databuf, 16, //数据指针,实际数据长度
&udp_server_addr, DATA_SERVER_PORT);// 服务器地址,服务器端口
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(read_ds18b20_process, ev, data)
{
static unsigned char ucTemp;
static float fTemp;
static char strTemp[8];
PROCESS_BEGIN();
event_data_ready = process_alloc_event();
etimer_set(&et_read_ds18b20, CLOCK_SECOND);
while(1){
memset(strTemp, 0, ARRAY_SIZE(strTemp));
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
#if defined(FLOAT_TEMP)
fTemp = floatReadDs18B20();
memcpy(strTemp, &fTemp, sizeof(fTemp));
#else
ucTemp = ReadDs18B20();
strTemp[0] = ucTemp/10+48; //取出十位数
strTemp[1] = ucTemp%10+48; //取出个位数
#endif
process_post(&udp_sender_process, event_data_ready, &strTemp);
etimer_reset(&et_read_ds18b20);
}
PROCESS_END();
}
上述代码非原创,小弟软件大四生一枚,之前并无类似开发经验,因项目需求得实现上述内容,若问的问题相当小白,也恳请大大们帮忙提供解决思路。
#if defined(FLOAT_TEMP)
fTemp = floatReadDs18B20();
sprintf(strTemp, "%.01f", fTemp);
#else
ucTemp = ReadDs18B20();
strTemp[0] = ucTemp/10+48; //取出十位数
strTemp[1] = ucTemp%10+48; //取出个位数
#endif
看这里的转换关系。。。temp = 1002,这里你得去计算
ReadDs18B20 温度的原始值这两个函数是否一致哪??
在下需要此代码资源,能否共享?感激不尽!
兄弟,能否把完整代码分享参考一下,在此感谢!!!
您好,我想请教strTemp[0] = ucTemp/10+48,其中48是什么意思?