找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 12206|回复: 7

RobotC Motors

[复制链接]
发表于 2018-11-2 16:04:35 | 显示全部楼层 |阅读模式
本帖最后由 jiangzian 于 2018-11-2 16:03 编辑

刚开始先是以控制单个电机来开始。
take main 为主函数,所写的程序流程都要写在主函数里面,注意:要写在大括号{}之内。变量、常量、自定义的函数等可以写在外面。要设置电动机B的功率为100,要想直线运动,两个电机要一起转、功率要相等,所以电动机C也要是100,用RobotC表示为:

  setMotorSpeed(motorB,  100);
  setMotorSpeed(motorC,100);
1.png
setMotorSpeed(设置电机速度) 这个函数已经是封装好的函数,直接用就行。就像直接拖拽EV3编程界面的图形一样,小括号()里面的是参数,第一个是电机的名称(或者是你插得端口ABCD分为对应motorA、motorB、motorC、motorD),第二个参数是电机的功率。
注意C语言的函数名其实是几个英语单词拼接起来的,要区分这几个单词,第一个单词要小写,后面其他的单词首字母大写(但是没有强制规定要这么写,可以增加可读性),你要是自定义函数的时候,也可以不这么写。
函数名后面要加上小括号(),这样才能让函数起作用,参数写在小括号的里面,每个参数中间用逗号(,)隔开
每条命令后面要用分号(;)结尾,告诉计算机这条命令在这里结束
计算机执行命令的时候是按照顺序一条一条执行的,有了上面的两条命令执行后,电机并不会动,因为计算机的运算速度太快了,这两条命令瞬间就已经执行完毕,所以电机还没来得及动,程序就已经结束了。所以设置好电机的速度后,还要设置运行时间,在C语言中,时间的单位是毫秒(ms),这里用sleep();,这个函数。

sleep(1000);
2.png
这三个命令就是让BC电机以100的功率转动两秒钟,程序结束。除了让电机转动一定的时间,我们都知道ev3中的电机还可以以度数转动,RobotC对应的函数为:

setMotorTarget()
3.png

此命令告诉机器人移动绝对距离。 它将增加(或减去)电机编码器“0”位置的距离。 该命令需要三个参数。
nMotorIndex:要控制的电机的端口或名称。
nPosition:电机应移动的度数(绝对值)
nSpeed:电机的速度。
将目标或速度设置为负数将导致电机向后旋转。
在该命令结束时,电动机将自动停止。

和我们EV3编程软件不同的是,这么写是不会动的,还是之前的原因,这个程序告诉BC电机以50的功率转动500°,但是还没来得及动,程序就结束了所以与之配套使用的还有一个函数:
waitUntilMotorStop(motorB);
4.png
此命令将使程序“sleep”直到电机停止。
nMotorIndex:要控制的电机的端口或名称。
这里不用sleep()函数的原因是因为等待的时间你自己掌握不好,您可以使用此命令来避免提供等待时间。

由于计算机的运算速度很快,所以认为让BC电机动500°是同时进行的,所以这个还是让小车直行。
还有就是要看清楚这个是绝对位置,而不是相对位置。所以我们要知道电机的0°在哪里,所以我们一般刚开始就要重置电机。这就用到了另外一个函数:
resetMotorEncoder(电机的名字);
5.png
将插入nMotorIndex的电机的编码器值(角度)重置为0。
有个这三个函数我们就可以做定点停车的挑战了
6.png 7.png 8.png
是不是感觉写代码,还不如拖拽图形来得简单,这只是对于简单的程序来说,如果你用代码写一个PID巡线,你会发现,对于稍微复杂一点的程序还是写代码简单,更加简洁,更加通俗易懂。控制电机的命令很多,之后就是控制双电机的命令了
这是结果的演示



下载安装,没什么用,很简单,下载好按提示来就可以了



配置,录得太啰嗦,还不如看文字




如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2018-11-3 13:26:31 | 显示全部楼层
个人观点,玩robotc就用c的那一套玩法,不必在意跟ev3-g的对应。那些所谓“自然语言”的东东都是坑爹。
对电机而言,只需要setMotorSpeed函数就够了,这样反而更容易写出更复杂的功能
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-11-5 22:52:14 | 显示全部楼层
laoyaoguai 发表于 2018-11-3 13:26
个人观点,玩robotc就用c的那一套玩法,不必在意跟ev3-g的对应。那些所谓“自然语言”的东东都是坑爹。
对 ...

麻烦问问,robotc 可以完全支持EV3吗?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2018-11-9 10:01:36 | 显示全部楼层
laoyaoguai 发表于 2018-11-3 13:26
个人观点,玩robotc就用c的那一套玩法,不必在意跟ev3-g的对应。那些所谓“自然语言”的东东都是坑爹。
对 ...

差不多吧,孩子学习了那种图形化编程了之后,学起这个来会很快,只要知道了函数名就行了,这个主要是培养孩子的逻辑思维,用什么不太在意,因为现在软件更新速度太快了,没准过几年,比赛就不用这个软件编程了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2018-11-9 10:03:59 | 显示全部楼层
斯螽动股 发表于 2018-11-5 22:52
麻烦问问,robotc 可以完全支持EV3吗?

兼容的
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-11-14 16:17:50 | 显示全部楼层

谢谢解答。再问问,那兼容 NXC 吗?robotc 的代码资源太少了,而且正版软件太贵。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2018-11-19 22:13:57 | 显示全部楼层
斯螽动股 发表于 2018-11-14 16:17
谢谢解答。再问问,那兼容 NXC 吗?robotc 的代码资源太少了,而且正版软件太贵。

NXC倒是不清楚,如果不想购买的话,只能10天,10天的试用了,清除注册列表就行了,就会获得新一次试用10天的机会
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-11-29 21:13:19 | 显示全部楼层
jiangzian 发表于 2018-11-19 22:13
NXC倒是不清楚,如果不想购买的话,只能10天,10天的试用了,清除注册列表就行了,就会获得新一次试用10 ...

好麻烦,我习惯 NXC 了。最近都没有来坛子里逛,才看到,谢谢回复!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-6-3 20:14 , Processed in 0.090173 second(s), 21 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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