关于cc2530平台contiki编写ds18b20温度传感器的问题 5C

各位大大,小弟需要采用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();
}

上述代码非原创,小弟软件大四生一枚,之前并无类似开发经验,因项目需求得实现上述内容,若问的问题相当小白,也恳请大大们帮忙提供解决思路。

5个回答

 #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,这里你得去计算

Redy_Hello
Redy_Hello 两个函数不一样的,一个是保留整数类型数值,一个是保留一位小数,题目内容已经更新了。然后,想哭,更新个题目以及回复您得一个小时
3 年多之前 回复
shen_wei
shen_wei ReadDs18B20 温度的原始值这两个函数是否一致哪??
3 年多之前 回复
Redy_Hello
Redy_Hello 好的,感谢您的回答。显示1002,应该是我把数值类型设置错误的缘故。更新了一下代码,发现在floatReadDs18B20发送内容变成temp=...........一直不变,而ReadDs18B20发送temp=<7.........不变。我现在更新一下题目内容,麻烦您了
3 年多之前 回复

ReadDs18B20 温度的原始值这两个函数是否一致哪??

在下需要此代码资源,能否共享?感激不尽!

兄弟,能否把完整代码分享参考一下,在此感谢!!!

您好,我想请教strTemp[0] = ucTemp/10+48,其中48是什么意思?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐