2988|5

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

各位高手,请指教。这个程序检测传感器信息for(i=0; i<8; i++) {flagSensor[i] = sensorDat...看不懂啊? [复制链接]

/ 检测传感器信息
                        if(g_enSensor) {
                                len = read(fd_Sensor, &sensorData, sizeof(unsigned char));
                                if(len > 0) {
                                        printf("sensorData is 0x%x \n", sensorData);
                                } else {
                                        perror("error to read fd_Sensor\n");
                                        exit(1);
                                }
                        }

                        for(i=0; i<8; i++) {
                                flagSensor = sensorData & 0x80;
                                sensorData <<= 1;
                        }
                       
                        swap(&flagSensor[0], &flagSensor[1]);
                        swap(&flagSensor[2], &flagSensor[3]);
                        swap(&flagSensor[4], &flagSensor[5]);
                        swap(&flagSensor[6], &flagSensor[7]);


                        sum = 0;
                        for(i=0; i<8; i++) {
                                if(flagSensor) sum ++;
                        }

                        if(sum > 4) {                                // 已经到了终点
                                break;
                        }
                       
                        for(i=0; i<8; i++) {
                                if(flagSensor) temp[0] = i + 1;
                        }
                        for(i=7; i>=0; i--) {
                                if(flagSensor) temp[1] = i + 1;
                        }
                        biasValue = temp[0] + temp[1];
                        printf("Sensor = %d\n", biasValue);
                        temp[0] = 0;
                        temp[1] = 0;
                       
                        // 传感器数据滤波
                       
                       
                        // 根据模型得出两轮速度值
                        calc_motor(pMotor_L, (int)biasValue);
                        calc_motor(pMotor_R, (int)biasValue);
                       
                        if(pMotor_L->speed >= 0) {
                                wr_buf[4] = 1;
                                wr_buf[2] = (unsigned char)pMotor_L->speed;
                        } else {
                                wr_buf[4] = 0;
                                wr_buf[2] = (unsigned char)((-1)*pMotor_L->speed);
                        }
                        if(pMotor_R->speed >= 0) {
                                wr_buf[5] = 1;
                                wr_buf[3] = (unsigned char)pMotor_R->speed;
                        } else {
                                wr_buf[5] = 0;
                                wr_buf[3] = (unsigned char)((-1)*pMotor_R->speed);
                        }
                       
                }
               
               
                for(i=0; i                            printf("%x ", wr_buf);
                printf("\n ");
               
                ret = write(fd_com1, wr_buf, CMD_BYTES);                // 将数据从串口发出去
                if(ret > 0)        {                                                                        // 发送成功,并回显已发送的信息       
                        //*(wr_buf+ret) = '\0';       
                        //printf("SEND : %s\n",wr_buf);
                        ret = 0;
                }
                else
                        perror("error to write fd_com1");
               
                usleep(5000);
                ret = read(fd_com1, rcv_buf, CMD_BYTES);                // 试图从串口接收数 据       
                printf("RECV:\n");
                if(ret > 0)                                                                        // 确实接收到了数据,并打印出来
                {
                        for(i=0; i                                 printf("%h ",rcv_buf);
                        ret = 0;
                }
                else                                                                                        // 没有接收到数据,打印相关信息,并提示输入字符
                        printf("Havn't received data from uart !\n");
               
        }
       
        wr_buf[2] = 0;
        wr_buf[3] = 0;
        wr_buf[4] = 1;
        wr_buf[5] = 1;
        wr_buf[6] = 0;
        wr_buf[7] = 0;
        write(fd_com1, wr_buf, CMD_BYTES);
        printf("exit\n");
               
        close(fd_com1);                                                // 关闭设备COM1
        close(fd_Sensor);                                                // 关闭设备Sensor
        return 0;                                                        // 正常返回

最新回复

看不了回复  详情 回复 发表于 2010-5-1 10:20
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
for(i=0; i<8; i++) {
flagSensor = sensorData & 0x80;
sensorData <<= 1;
}
这是个循环移位操作,sensorData每位的值分别送给 flagSensor的最高位。
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
请问为什么要sensorData与0x80相与呢?
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
与0x80相与使flagSensor的最高位为0或者1,其它位都是0,后边有代码判断flagSensor是否为0,你详细看下后边代码的意图或者是其它地方的一些应用吧,具体我也没分析。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
奥,谢谢啊!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
看不了回复
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表