天嵌 ARM开发社区

 找回密码
 注册
查看: 3154|回复: 5

TQ6410与ZigBee传输数据的问题

[复制链接]
笨笨熊ll 发表于 2013-5-13 22:44:52 | 显示全部楼层 |阅读模式
    我用一根串口线将ZigBee和6410的开发板进行连接,通过调用串口ttyUSB0将ZigBee收集到的数据通过串口线,将数据传输到开发板的上,显示数据并将这些数据进行入库(用的是sqlite)保存,我将程序烧到开发板上运行,接收到的数据是错的,能入库就是数据不对。后面我将通过开发板上自带的串口小助手显示数据上面显示的数据是对的。我现在不知道如何修改我的程序,请高人指点一下!附件中有我的代码!而且我发现只要串口小助手显示数据,我的程序在开发板上运行现实的数据就是0,小助手调用的串口也是ttyUSB0,是不是占用同一个串口,从而导致竞争,但是我在程序中主要是通过缓冲寄存器buffer将数据暂时存储在寄存器里面,应该不存在占用串口这个问题。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
TQ-lkp 发表于 2013-5-14 09:11:53 | 显示全部楼层
1、波特率
2、字符处理的方法
尽量不要以附件的形式,一般是不会看的,直接贴代码
 楼主| 笨笨熊ll 发表于 2013-5-14 15:26:15 | 显示全部楼层
TQ-lkp 发表于 2013-5-14 09:11
1、波特率
2、字符处理的方法
尽量不要以附件的形式,一般是不会看的,直接贴代码
  1. //该程序实现的功能:将ZigBee收集到的数据送库,进行于特定值的比对.

  2. #include "stdio.h"
  3. #include "sys/types.h"
  4. #include "sys/ioctl.h"
  5. #include "stdlib.h"
  6. #include "termios.h"
  7. #include "sys/stat.h"
  8. #include "fcntl.h"
  9. #include "sys/time.h"
  10. #include "sqlite3.h"
  11. #include "string.h"


  12. #define BUF_LEN 256
  13. #define N 10
  14. #define IOCTL_RELAY_OFF     0
  15. #define IOCTL_RELAY_ON      1


  16. int main (void)
  17. {
  18.         int i=0;
  19.         int fd;
  20.         unsigned char buf[2];
  21.         unsigned short Temp = 0;
  22.         int flag = 0;
  23.         sqlite3 * db = NULL;
  24.         char *zErrMsg = 0;
  25.         int rc;
  26.         float a[N];
  27.         float *p;
  28.         int c=0;
  29.         int ret,j;
  30.         unsigned int value_t=0;
  31.     unsigned int value_h=0;
  32.     float fvalue_t,fvalue_h;
  33.         unsigned char elec_coupler;
  34.         double result=0;
  35.        
  36.         //数据库的链接:
  37.     rc = sqlite3_open ("Ds18b20_data.db", &db);  //打开一个名为Ds18b20_data的数据库,没有该数据库则新建这个库
  38.         if (rc != SQLITE_OK)
  39.     {  
  40.                 fprintf (stderr, "Can't open database: %s\n", sqlite3_errmsg (db));  
  41.                 sqlite3_close (db);//关闭数据库
  42.                 exit (1);
  43.         }
  44.         else
  45.         {
  46.             printf("You have opened a sqlite3 database named Ds18b20_data.db successfully\n");
  47.                   char sql[BUF_LEN] = { 0 };
  48.                 sprintf (sql, "CREATE TABLE Temp_data(id integer PRIMARY KEY autoincrement,Temp double,Humi double,TIME varchar(20));");//创建一个表名为Temp_data
  49.                 sqlite3_exec (db, sql, 0, 0, &zErrMsg);
  50.   
  51.         #ifdef _DEBUG_ //如果前面已经定义了_DEBUG_ ,则输出所创建的表存在的信息
  52.             printf ("%s\n", zErrMsg);
  53.         #endif
  54.        
  55.         //打开Ds18b20端口       
  56.         if ((fd = open ("/dev/ttyUSB0", O_RDWR | O_NDELAY | O_NOCTTY)) < 0)//open函数用来打开一个设备fd
  57.             {  
  58.                         printf ("Open Device Ds18b20 failed.\r\n");  
  59.                         exit (1);
  60.                 }
  61.         else
  62.     {
  63.                         printf ("Open Device Ds18b20 successed.\r\n");
  64.                
  65.         while (1)
  66.                 {
  67.                        
  68.                         //将温度数据读入到寄存器中,并送入到数据库中
  69.                         fvalue_t=0.0,fvalue_h=0.0;value_t=0;value_h=0;
  70.                         ret=read(fd,buf,1);
  71.                         printf ("read data is 0x%02X-0x%02X\n",buf[1], buf[0]);
  72.                         Temp = ((unsigned short) buf[1]) << 8;
  73.                         Temp |= (unsigned short) buf[0];
  74.                         printf ("no error here\n");
  75.                         result = 0.0625 * ((double) Temp);
  76.                         printf ("read data is 0x%02X-0x%02X\n",buf[1], buf[0]);
  77.                         printf ("no error here\n");
  78.             if(ret<0)
  79.                                 {
  80.                                         printf("read err!\n");
  81.                                         continue;
  82.                                 }   
  83.             sleep(1);
  84.                        
  85.                         //显示数据存入的当前时间
  86.                         struct tm *local;
  87.                         time_t t=time(0);
  88.                         t=time(NULL);
  89.                         local=localtime(&t);
  90.                         char s [20];
  91.                         strftime(s,sizeof(s),"%Y-%m-%d %H:%M:%S",localtime(&t));
  92.                        
  93.                         //最终将数据的信息插入到数据库sql中的表中
  94.                         sprintf (sql, "INSERT INTO Temp_data (Temp,TIME) VALUES(%f,%f,'%s');",result,s);
  95.                         printf("sql: %s\n", sql);
  96.                        
  97.                         //回调函数
  98.                         sqlite3_exec (db, sql, 0, 0, &zErrMsg);
  99.                         printf("zErrMsg=%d\n", zErrMsg);
  100.                         char *sql="select Temp from Temp_data";//sql指针指向该字符串
  101.                         int j=0;
  102.                         sqlite3_exec (db, &sql, 0, 0, &zErrMsg);
  103.                        
  104.                         a[i]=fvalue_h;
  105.                         if(i==N){       
  106.                                         while(j<10)
  107.                                                 {
  108.                                                  j++;
  109.                                                 }
  110.                                         p=a;j=0;
  111.                                          int lenth=change(p);
  112.                                         
  113.                                          //数组中数据的比对:
  114.                                          int b;
  115.                                         int i;
  116.                                          printf("please input b: ");
  117.                                          scanf("%d",&b);
  118.                                          for(i = N; i>= 0; i--)
  119.                                                  {
  120.                                                          printf("%f\n",a[i]);//数据比对后显示数组
  121.                                                          if(a[i]>=b)
  122.                                                                 {
  123.                                                                  c++;
  124.                                                                 }  
  125.                                                  }
  126.                                          printf(">=b numbers is %d\n",c); //统计数组中大于特定值的个数
  127.                                         }
  128.                                         i++;
  129.                                         sleep (1);
  130.                 }
  131.        
  132.     }
  133.        
  134.         }
  135.                                   
  136.         return (0);
  137.        
  138. }


  139. //延时函数
  140. void delay(int time)
  141. {
  142.    int j;
  143.    for(j=0;j<time*1000;)
  144.    j++;
  145. }
  146. int change(float *p)      
  147.   { float *q=p;
  148.           int j=0;
  149.           float a[N];
  150.         while(j<10)
  151.         {
  152.           j++;
  153.         }
  154.         int i;
  155.         for(i=0;i<10;i++)
  156.         {        printf("15\n");
  157.                 a[i]=*(q+i);
  158.                 printf("%f\n",a[i]);
  159.         }
  160.        
  161.    int num = 0;  
  162.    int len = N ;
  163.        
  164.    for(i = 0 ; i < N ;i++)
  165.    {printf("16\n");
  166.     if(a[i]>=30.0000|a[i]<=20.0000 )
  167.                 {
  168.                         num++ ;
  169.                         len-- ;
  170.                 }
  171.     else
  172.                 {   
  173.                         a[i-num] = a[i] ;
  174.                 }      
  175.    }
  176.     return len ;   
  177. }





复制代码
 楼主| 笨笨熊ll 发表于 2013-5-14 15:37:26 | 显示全部楼层
笨笨熊ll 发表于 2013-5-14 15:26

这是我的代码,希望您帮看下。我现在也是初学阶段,还有好多东西不懂,希望您能帮我看看代码。十分感谢!
 楼主| 笨笨熊ll 发表于 2013-5-14 18:01:05 | 显示全部楼层
TQ-lkp 发表于 2013-5-14 09:11
1、波特率
2、字符处理的方法
尽量不要以附件的形式,一般是不会看的,直接贴代码

这是我的代码,希望您帮看下。我现在也是初学阶段,还有好多东西不懂,希望您能帮我看看代码。十分感谢!
TQ-lkp 发表于 2013-5-15 10:22:19 | 显示全部楼层
//将温度数据读入到寄存器中,并送入到数据库中
                        fvalue_t=0.0,fvalue_h=0.0;value_t=0;value_h=0;
                        ret=read(fd,buf,1);
                        printf ("read data is 0x%02X-0x%02X\n",buf[1], buf[0]);
这个地方你只读了一个字节,后面用了不止一个字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-6 16:32 , Processed in 1.031243 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表