gpt4 book ai didi

c - 边缘避免程序的逻辑

转载 作者:行者123 更新时间:2023-11-30 17:57:57 24 4
gpt4 key购买 nike

微 Controller 是AVR,其中的处理器是ATMEGA8。我写了一篇遵循黑色的作品。就像:

#include<avr/io.h>
#include<util/delay.h>
int main()
{
int rs,ls; // denotes the right sensor and left sensor respectively
DDRC=0x00; // DENOTES THAT WE TAKE INPUT FROM THE SENSER
DDRB=0xFF; // DENOTES THAT PORT IS MEANT FOR THE OUTPUT FROM THE MOTOR
while(1) {
ls=PINC&0b0000001; // last bit on
rs=PINC&0b0001000; // 1st bit on

if((ls==0b0000001)&(rs==0b0001000))
PORTB=0b00010010; // forward
if((ls==0b0000001)&(rs==0b0000000))
PORTB=0b00000010; // right
if( (ls==0b0000000) & (rs==0b0001000))
PORTB=0b00010000; // left
if((ls==0b0000000)&(rs==0b0000000) )
PORTB=0b00010010; // stop
}
}

我正在尝试为避免边缘的人写作。它具有检测黑色的相同传感器。 但现在这些传感器在 table ​​上移动时必须避开坑。我无法决定如何做到这一点。

注意:如果凹坑下面没有任何东西,传感器能够检测到凹坑。但是我怎么在编写代码时遇到问题。

最佳答案

EdgeAvoider 可以有多种解决方案。我见过的一种实现是 -

说明 -

  • 如果(左右)都没有黑色(黑色 = 边缘,白色 = 桌面),您可以继续前进。
  • 如果其中一个/两个都是黑色,您需要稍微后退(注意:这很棘手,在后退时您也可能会摔倒),然后改变方向。

您需要尝试延迟,以获得适当的工作。

这些是下面需要的值(我之前省略了它们,因为它们依赖于配置)-

int move_backward = 0b00000110;
int right_turn = 0b00001010;
int move_forward = 0b00001001;
int left_turn = 0b00000101;

int left_sensor_on = 0b0010000;
int right_sensor_on = 0b0100000;
int left_sensor_off = 0b0000000;
int right_sensor_off = 0b0000000;

下面的代码应该放在while (1)

left_sensor = (PINC & 0b0000001); // This depends upon your configuration
right_sensor = (PINC & 0b0001000); // So I have used, the one from your code

if ((left_sensor==left_sensor_off) & (right_sensor==right_sensor_off))
{
PORTB = move_backward; //move backward
_delay_ms(50);
PORTB=right_turn; //take a right turn
_delay_ms(30);
left_sensor = 0;
right_sensor = 0;
}
if ((left_sensor==left_sensor_on) & (right_sensor==right_sensor_on))
{
PORTB = move_forward; //move forward
left_sensor = 0;
right_sensor = 0;
}
if ((left_sensor==left_sensor_off) & (right_sensor==right_sensor_on))
{
PORTB = move_backward;
_delay_ms(50);
PORTB = right_turn;
_delay_ms(30);
left_sensor = 0;
right_sensor = 0;
}

if ((left_sensor==left_sensor_on) & (right_sensor==right_sensor_off))
{
PORTB = move_backward;
_delay_ms(50);
PORTB = left_turn;
_delay_ms(30);
left_sensor = 0;
right_sensor = 0;
}

关于c - 边缘避免程序的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com