| TQ-lkp 发表于 2013-5-14 09:11  1、波特率
 2、字符处理的方法
 尽量不要以附件的形式,一般是不会看的,直接贴代码
复制代码//该程序实现的功能:将ZigBee收集到的数据送库,进行于特定值的比对.
#include "stdio.h"
#include "sys/types.h"
#include "sys/ioctl.h"
#include "stdlib.h"
#include "termios.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "sys/time.h"
#include "sqlite3.h"
#include "string.h"
#define BUF_LEN 256
#define N 10
#define IOCTL_RELAY_OFF     0
#define IOCTL_RELAY_ON      1
int main (void) 
{ 
        int i=0;
        int fd;
        unsigned char buf[2];
        unsigned short Temp = 0;
        int flag = 0;
        sqlite3 * db = NULL;
        char *zErrMsg = 0;
        int rc;
        float a[N];
        float *p;
        int c=0;
        int ret,j;
        unsigned int value_t=0;
    unsigned int value_h=0;
    float fvalue_t,fvalue_h;
        unsigned char elec_coupler;
        double result=0;
        
        //数据库的链接:
    rc = sqlite3_open ("Ds18b20_data.db", &db);  //打开一个名为Ds18b20_data的数据库,没有该数据库则新建这个库
        if (rc != SQLITE_OK)
    {  
                fprintf (stderr, "Can't open database: %s\n", sqlite3_errmsg (db));  
                sqlite3_close (db);//关闭数据库
                exit (1);
        }
        else
        {
            printf("You have opened a sqlite3 database named Ds18b20_data.db successfully\n");
                  char sql[BUF_LEN] = { 0 };
                sprintf (sql, "CREATE TABLE Temp_data(id integer PRIMARY KEY autoincrement,Temp double,Humi double,TIME varchar(20));");//创建一个表名为Temp_data
                sqlite3_exec (db, sql, 0, 0, &zErrMsg);
  
        #ifdef _DEBUG_ //如果前面已经定义了_DEBUG_ ,则输出所创建的表存在的信息
            printf ("%s\n", zErrMsg);
        #endif
        
        //打开Ds18b20端口        
        if ((fd = open ("/dev/ttyUSB0", O_RDWR | O_NDELAY | O_NOCTTY)) < 0)//open函数用来打开一个设备fd
            {  
                        printf ("Open Device Ds18b20 failed.\r\n");  
                        exit (1);
                }
        else
    {
                        printf ("Open Device Ds18b20 successed.\r\n");
                
        while (1)
                {
                        
                        //将温度数据读入到寄存器中,并送入到数据库中
                        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]);
                        Temp = ((unsigned short) buf[1]) << 8;
                        Temp |= (unsigned short) buf[0];
                        printf ("no error here\n");
                        result = 0.0625 * ((double) Temp);
                        printf ("read data is 0x%02X-0x%02X\n",buf[1], buf[0]);
                        printf ("no error here\n");
            if(ret<0)
                                {
                                        printf("read err!\n");
                                        continue;
                                }   
            sleep(1);
                        
                        //显示数据存入的当前时间
                        struct tm *local;
                        time_t t=time(0);
                        t=time(NULL);
                        local=localtime(&t);
                        char s [20];
                        strftime(s,sizeof(s),"%Y-%m-%d %H:%M:%S",localtime(&t));
                        
                        //最终将数据的信息插入到数据库sql中的表中
                        sprintf (sql, "INSERT INTO Temp_data (Temp,TIME) VALUES(%f,%f,'%s');",result,s);
                        printf("sql: %s\n", sql);
                        
                        //回调函数
                        sqlite3_exec (db, sql, 0, 0, &zErrMsg);
                        printf("zErrMsg=%d\n", zErrMsg);
                        char *sql="select Temp from Temp_data";//sql指针指向该字符串
                        int j=0;
                        sqlite3_exec (db, &sql, 0, 0, &zErrMsg);
                        
                        a[i]=fvalue_h;
                        if(i==N){        
                                        while(j<10)
                                                { 
                                                 j++;
                                                } 
                                        p=a;j=0;
                                         int lenth=change(p);
                                         
                                         //数组中数据的比对:
                                         int b;
                                        int i;
                                         printf("please input b: ");
                                         scanf("%d",&b);
                                         for(i = N; i>= 0; i--)
                                                 {
                                                         printf("%f\n",a[i]);//数据比对后显示数组 
                                                         if(a[i]>=b)
                                                                {
                                                                 c++;
                                                                }  
                                                 } 
                                         printf(">=b numbers is %d\n",c); //统计数组中大于特定值的个数
                                        }
                                        i++;
                                        sleep (1);
                }
        
    }
        
        }
                                    
        return (0); 
        
}
//延时函数
void delay(int time)
{
   int j;
   for(j=0;j<time*1000;)
   j++;
} 
int change(float *p)       
  { float *q=p;
          int j=0;
          float a[N];
        while(j<10)
        { 
          j++;
        }
        int i;
        for(i=0;i<10;i++)
        {        printf("15\n");
                a[i]=*(q+i);
                printf("%f\n",a[i]);
        }
        
   int num = 0;  
   int len = N ; 
        
   for(i = 0 ; i < N ;i++)
   {printf("16\n");
    if(a[i]>=30.0000|a[i]<=20.0000 ) 
                {
                        num++ ;
                        len-- ; 
                }
    else
                {   
                        a[i-num] = a[i] ;
                }       
   }
    return len ;   
}
 |