作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带编码器反馈的机器人,我想使用将机器人移动一定距离并转动一定角度的功能,例如:
void loop(){
if (Obstacle==false){ // if no obstacles
forward(1000); // move forward 1000 mm
backward(1000); // move backward 1000 mm
//...
}
}
正向函数:
void forward(int distance){ // distance in mm
int desiredRotationNumber= round(distance/circumference) ;
int desiredTicks = encoderResolution * desiredRotationNumber;
if (counter < desiredTicks) // variable counter counts the pulses from the encoder
{
analogWrite(motor,255);
}
else
{
analogWrite (motor,0);
}
}
问题是,如果我使用条件“if”,我的前向函数将只执行一次,然后程序跳转到下一个函数,但如果我使用“while 循环”,我的移动函数将正确执行,但我赢了'能够管理传感器或任何东西。
最佳答案
您可能想要的是逐步减少您的移动,并检查每个增量之间的传感器:
while (distance > 0 && !Obstacle){
forward(step);
distance-=step;
check_sensors();
}
使用多线程,您可以使这些操作(移动和感应)异步工作,并使用某种事件发布来警告每个线程发生变化。在这里,我们通过交织任务来模拟该功能(您也可以研究协程以获得类似但更有效的想法)。
关于c++ - 如何将机器人移动一定距离并仍然管理传感器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412408/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!