|
楼主 |
发表于 2014-3-21 23:46:20
|
显示全部楼层
本帖最后由 ntwuhui 于 2014-4-1 15:01 编辑
实验一: EV3G到C++
1、传递文本
Step1:EV3G端的文件读写
项目文件名:test1.ev3p
包括两个程序:WriteFile、ReadFile
WriteFile内容如下:
ReadFile内容如下:
程序下载到EV3内,执行前显示效果:
选中WriteFile并运行,效果如下:
执行完毕,会增加文件Hello(这里区分大小写)
执行ReadFile检验一下:
读取成功!
打开Bricxcc, 依次单击菜单Tool、Explorer
双击打开test1文件夹:
这里可以很清晰的看到由EV3G生成的文件会自动加上扩展名rtf,Hello的完整名称为Hello.rtf;右击该文件,选择View,会显示内容如下:
- 00000 48 65 6C 6C 6F 0D 45 56 33 0D Hello.EV3.
复制代码 这里不难发现,EV3G程序在发送多个文本时会在文本末尾加上换行符0D,对应字符'\r',在编写C++程序时需要特别注意这一点。
Step2:编写C++程序并编译下载到EV3
在bricxcc中编写程序如下:- #include<unistd.h>
- #include<sys/types.h>
- #include<sys/stat.h>
- #include<fcntl.h>
- int main()
- {
- int i=0,fd,size;
- char buffer[10];
- fd=open("Hello.rtf",O_RDONLY);
- size=read(fd,buffer,sizeof(buffer));
- close(fd);
-
- if (size){
- printf("Open file success!\nRead %d bytes data\n\n",size);
- for (i=0;i<size;i++)
- if (buffer[i]=='\r') buffer[i] = '\n';
- printf("%s",buffer);
- }
- else
- printf("open file error!\n");
-
- return 0;
- }
复制代码 程序不多解释,其中为了正常显示,将换行符'\r'替换为回车符'\n'。保存后单击菜单Compile下面的Compile及Download;bricxcc会自动将程序下载到EV3,用上面类似的方法可以了解到readfile程序位于prjs文件夹下.
Step3 : 登陆EV3,运行C++程序
打开Putty,填入EV3正确的IP地址后,选择连接方式为Telnet
单击Open打开,输入账号root(密码为空)即可登陆EV3
这里用到几个常见命令:
cd 改变当前位置 ls 查看文件(夹)列表 cp 复制文件 执行程序为 ./readfile
操作说明:
1、转到文件夹prjs(bricxcc默认编译下载位置):cd lms2012/prjs
2、显示文件夹prjs内容:ls
3、复制文件readfile到文件夹test1内:cp readfile test1/readfile
4、执行readfile: ./readfile
至此实验成功!
若在代码中加入头文件:
- #include "D:\BricxCC\API\ev3_lcd.h"
- #include "D:\BricxCC\API\ev3_command.h"
复制代码 以及在代码 printf("%s",buffer); 之后增加
- LcdInit();
- LcdText(1,0,0,buffer);
- Wait(SEC_1);
- LcdExit();
复制代码 运行上述命令(./readfile),EV3屏幕上会同时显示如下
2、传递数字
Step1:EV3G端的文件读写
项目文件名:test2.ev3p
包括两个程序:WriteFile、ReadFile
WriteFile内容如下:
ReadFile内容如下:
程序下载到EV3,选中WriteFile并运行,效果如下:
这里“Write Num ”这一行后面的数字会从1依次递增到10。
执行完毕,此程序会将1-10写入文件文件Number.rtf, 执行ReadFile检验一下:
读取成功!文件Number.rtf内容如下:
- 00000 31 0D 32 0D 33 0D 34 0D 35 0D 36 0D 37 0D 38 0D 1.2.3.4.5.6.7.8.
- 00010 39 0D 31 30 0D 9.10.
复制代码 可见数字与文本存储格式相同,数与数用换行符'\r'隔开
Step2:编写C++程序并编译下载到EV3
在bricxcc中编写程序如下:
- #include<unistd.h>
- #include<sys/types.h>
- #include<sys/stat.h>
- #include<fcntl.h>
- #include "D:\BricxCC\API\ev3_lcd.h"
- #include "D:\BricxCC\API\ev3_command.h"
- int main()
- {
- int i,j,t,fd,size;
- char buffer[21];
- int num[10];
- fd=open("Number.rtf",O_RDONLY);
- size=read(fd,buffer,sizeof(buffer));
- close(fd);
-
- if (size){
- printf("Open file success!\nRead %d bytes data\n\n",size);
- j=0; t=0;
- for (i=0;i<size;i++){
- if (buffer[i]=='\r'){
- num[j]=t;
- printf("%d ",num[j]);
- j++;
- t=0;
- } else
- t=t*10+(buffer[i]-'0');
- }
- printf("\n");
- LcdInit();
- LcdText(1,0,0,buffer);
- Wait(SEC_1);
- LcdExit();
- } else
- printf("open file error!\n");
- printf("\n");
- return 0;
- }
复制代码 程序说明:这里我仍然采用字符格式读取文件,读入成功后利用换行符逐一将字符转换为数字,(PS:应该有更简单的办法,暂时不清楚怎么弄)
编译下载到EV3。
Step3 : 登陆EV3,运行C++程序
用Putty登陆到EV3执行如下:
EV3屏幕上会同时显示如下
小结:由EV3G生成的文件会自动在文件名后增加扩展名rtf,不管是写入文本还是数字,一次写入后均会使用换行符'\r'(16进制:0D)结束;C++程序可以利用这一字符进行数据的分析与读取。
|
|