Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 伺服无限旋转时,我希望它这样做只有一次_Arduino_Arduino Uno_Arduino Ide - Fatal编程技术网

Arduino 伺服无限旋转时,我希望它这样做只有一次

Arduino 伺服无限旋转时,我希望它这样做只有一次,arduino,arduino-uno,arduino-ide,Arduino,Arduino Uno,Arduino Ide,我对Arduino很陌生。我想做一个简单的设置,其中,按下遥控器上的按钮将使伺服旋转90度并返回到0 这是我的密码: #include <Servo.h> #include <IRremote.h> int receiver = 13; IRrecv irrecv(receiver); decode_results results; Servo myServo; int pos = 0; void setup() { // put your setup code he

我对Arduino很陌生。我想做一个简单的设置,其中,按下遥控器上的按钮将使伺服旋转90度并返回到0

这是我的密码:

#include <Servo.h>
#include <IRremote.h>
int receiver = 13;
IRrecv irrecv(receiver);
decode_results results;
Servo myServo;
int pos = 0;
void setup() {
  // put your setup code here, to run once:
  myServo.attach(9);
  Serial.begin(9600);
  irrecv.enableIRIn();
  myServo.write(0);
  delay(200);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (irrecv.decode(&results)){
    
  
    if (results.value== 0xC0000C){
      for (pos = 0; pos <= 90; pos += 1) { 
        // in steps of 1 degree
        myServo.write(pos);              
        delay(15);                       
      }
      for (pos = 90; pos >= 0; pos -= 1) { 
        myServo.write(pos);              
        delay(15);                       
      }
    }
  }
  delay(100);
}
#包括
#包括
int接收器=13;
IRECV IRECV(接收器);
解码_结果;
伺服myServo;
int pos=0;
无效设置(){
//将安装代码放在此处,以便运行一次:
附件(9);
Serial.begin(9600);
依那普利();
myServo.write(0);
延迟(200);
}
void循环(){
//将主代码放在此处,以便重复运行:
if(解码和结果)){
如果(结果值==0xC0000C){
对于(pos=0;pos=0;pos-=1){
myServo.write(pos);
延误(15);
}
}
}
延迟(100);
}

但是,当我按下指定的按钮时,伺服会从0到90度一直摆动,然后无限地返回,但每次按下按钮时,我只希望它这样做一次。怎么做?

您需要添加行

irrecv.resume();
在最后的延迟之前结束if循环,以便清除结果并开始寻找新信号

void loop() {
  // put your main code here, to run repeatedly:
  if (irrecv.decode(&results)){
    
  
    if (results.value== 0xC0000C){
      for (pos = 0; pos <= 90; pos += 1) { 
        // in steps of 1 degree
        myServo.write(pos);              
        delay(15);                       
      }
      for (pos = 90; pos >= 0; pos -= 1) { 
        myServo.write(pos);              
        delay(15);                       
      }
    }
  }
  irrecv.resume();
  delay(100);
}
void循环(){
//将主代码放在此处,以便重复运行:
if(解码和结果)){
如果(结果值==0xC0000C){
对于(pos=0;pos=0;pos-=1){
myServo.write(pos);
延误(15);
}
}
}
简历();
延迟(100);
}