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 ;
- }
复制代码 |