gpt4 book ai didi

c - Arduino 上的左右红外运动传感器

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

我正在制作这个包含传感器的项目。我有两个传感器,一个在左,一个在右。我已经成功地检测到左右运动,但是当我只是“感知”传感器(假设是左传感器)时,它会在我向左滑动时读取。你能告诉我出了什么问题吗?

为了理解我的代码,我绘制了“必需”序列来表示我已经刷卡了。 (0 检测到,1 未检测到)

向左1.L=1,R=12.L=0,R=13.L=0,R=04.L=1,R=0

对于右边1.L=1,R=12.L=1,R=03.L=0,R=04.L=0,R=1

这是我的代码

int rs=7,ls=6,r,l,x,xx,xxx,z; //rs right sensor, ls left sensor
void setup() {
Serial.begin(9600);
pinMode(rs, INPUT);
pinMode(ls, INPUT);
pinMode(13,OUTPUT);
}

void loop() {
digitalWrite(12,LOW);
digitalWrite(13,LOW);
r= digitalRead(rs);
l= digitalRead(ls);

if(r==1&&l==1)
x=1;
else x=0;

//RIGHT MOTION
if(x==1){
for(z=1;z<10000;z++){
if(digitalRead(ls)<digitalRead(rs)){
z=10000;xx=1;}}
if(xx=1){
for(z=1;z<10000;z++){
if(digitalRead(ls)==0&&digitalRead(rs)==0){
z=10000;xxx=1;}}}
if(xxx==1){
for(z=1;z<10000;z++){
if(digitalRead(ls)>digitalRead(rs)){
z=10000;Serial.println("Right motion");digitalWrite(12,HIGH);}}}}
//LEFT MOTION
if(x==1){
for(z=1;z<10000;z++){
if(digitalRead(ls)>digitalRead(rs)){
z=10000;xx=1;}}
if(xx=1){
for(z=1;z<10000;z++){
if(digitalRead(ls)==0&&digitalRead(rs)==0){
z=10000;xxx=1;}}}
if(xxx==1){
for(z=1;z<10000;z++){
if(digitalRead(ls)<digitalRead(rs)){
z=10000;Serial.println("Left motion");digitalWrite(13,HIGH);}}}}


}

我将循环设置为 10000 次,因为整个循环检测运动的速度非常快。

提前致谢。

最佳答案

简而言之:您永远不会将变量 x、xx、xxx 重置回 0。此外,您还对两种运动使用两个变量“集”。所以 digitalRead(ls) < digitalRead(rs)设置 xx = 1 且 digitalRead(ls) > digitalRead(rs)还设置 xx = 1。

首先要做的就是将“第一个”(//RIGHT MOTION 到//LEFT MOTION 之后的所有内容)x, xx, xxx 命名为:rightMotionStep1 rightMotionStep2 和 rightMotionStep3 以及后面的 x, xx, xxx到:leftMotionStep1 leftMotionStep2 和 leftMotionStep3。

当然你还必须声明这些变量。

接下来的事情是你必须重置所有的变量,所以在你的

Serial.println("Right motion");

应该有

rightMotionStep1 = 0;
rightMotionStep2 = 0;
rightMotionStep3 = 0;

向左运动也是如此。

关于c - Arduino 上的左右红外运动传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33667851/

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