我正在制作包含传感器的项目。我有两个传感器,一个在左边和右边。我已经成功检测到了左右运动,但是当我只是垃圾“感觉”一个传感器时,让我们说左传感器,就像我向左扫过一样。你能告诉我这是什么问题吗?
了解我的代码我已经绘制了“必需”序列来说我已经刷过了。 (0检测到,1没有检测到)
左边 1. L = 1,R = 1 2. L = 0,R = 1 3. L = 0,R = 0 4. L = 1,R = 0
对 1. L = 1,R = 1 2. L = 1,R = 0 3. L = 0,R = 0 4. 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次,因为1整个循环检测动作的速度非常快。
提前致谢。
答案 0 :(得分:0)
简而言之:您永远不会将vars x,xx,xxx重置为0.此外,您同时使用&#34; Set&#34;这两种Motion的变量。所以
digitalRead(ls) < digitalRead(rs)
设置xx = 1和
digitalRead(ls) > digitalRead(rs)
同时设置xx = 1。
要做的第一件事就是命名&#34;首先&#34; (//右移动后的所有内容//左移动)x,xx,xxx类似于:rightMotionStep1 rightMotionStep2和rightMotionStep3以及后来的x,xx,xxx到:leftMotionStep1 leftMotionStep2和leftMotionStep3。
当然你也必须申报这些Vars。
接下来就是你必须在
之后重置所有变量Serial.println("Right motion");
应该有
rightMotionStep1 = 0;
rightMotionStep2 = 0;
rightMotionStep3 = 0;
对于左运动也是一样。