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
Memory Arduino项目伺服故障(记忆游戏)_Memory_Arduino_Arduino Uno_Servo - Fatal编程技术网

Memory Arduino项目伺服故障(记忆游戏)

Memory Arduino项目伺服故障(记忆游戏),memory,arduino,arduino-uno,servo,Memory,Arduino,Arduino Uno,Servo,我最近加入了Arduino,参加了Rex Qualis Arduino Uno R3,我正在尝试建立一个项目,该项目将击败Simon记忆游戏(或重复这一节拍) 它通过四个按钮之一等待用户响应,然后将其添加到列表中,执行列表,然后在下一步等待用户输入 每件事都是按预期的方式进行的,但最奇怪的事情发生在执行时: 在完全执行后的第一个循环中,伺服1将未经授权执行其移动功能 在完全执行后的第二个循环上,伺服2将执行其移动功能,依此类推 在第四个循环、执行和伺服4执行其移动功能后,不会再发生这种情况。我

我最近加入了Arduino,参加了Rex Qualis Arduino Uno R3,我正在尝试建立一个项目,该项目将击败Simon记忆游戏(或重复这一节拍)

它通过四个按钮之一等待用户响应,然后将其添加到列表中,执行列表,然后在下一步等待用户输入

每件事都是按预期的方式进行的,但最奇怪的事情发生在执行时:

  • 在完全执行后的第一个循环中,伺服1将未经授权执行其移动功能
  • 在完全执行后的第二个循环上,伺服2将执行其移动功能,依此类推
  • 在第四个循环、执行和伺服4执行其移动功能后,不会再发生这种情况。我不知道为什么它在前四个循环中一个接一个地通过所有伺服系统,然后就可以了,但它有点破坏了我的项目
我的代码中是否存在重定向到移动函数或其他内容的问题?感谢所有的帮助。以下是代码供参考:

//Simon killer
//Da Cube

#include <Servo.h>

//Declare buttons
int button1 = 4;
int button2 = 5;
int button3 = 6;
int button4 = 7;

//Declare servos
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

int moves[100]; //Memory up to 100
int x = 0;
int y = 1;

void setup() {
  pinMode(button1, INPUT_PULLUP); //Button setup
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);
  pinMode(button4, INPUT_PULLUP);

  servo1.attach(8); //Servo setup
  servo2.attach(9);
  servo3.attach(10);
  servo4.attach(11);

  moveServo1();//System check
  moveServo2();
  moveServo3();
  moveServo4();
}

//move functions
void moveServo1() {
  servo1.write(5);
  delay(500);
  servo1.write(45);
  delay(500);
}

void moveServo2() {
  servo2.write(5);
  delay(500);
  servo2.write(45);
  delay(500);
}

void moveServo3() {
  servo3.write(175);
  delay(500);
  servo3.write(135);
  delay(500);
}

void moveServo4() {
  servo4.write(5);
  delay(500);
  servo4.write(45);
  delay(500);
}

void loop() {
  //Read Input by button
  while (x < y) {
    if (digitalRead(button1) == LOW) {
      moves[x] = 1;
      x++;
    } else if (digitalRead(button2) == LOW) {
      moves[x] = 2;
      x++;
    } else if (digitalRead(button3) == LOW) {
      moves[x] = 3;
      x++;
    } else if (digitalRead(button4) == LOW) {
      moves[x] = 4;
      x++;
    }
  }
  y++;

  //Decode Memory Array
  for (int i = 0; i < (sizeof(moves)); i++) {
    switch (moves[i]) {
      case 1:
       moveServo1();
       break;
      case 2:
       moveServo2();
       break;
      case 3:
       moveServo3();
       break;
      case 4:
       moveServo4();
       break;
    }
  } 
}
//西蒙杀手
//多维数据集
#包括
//声明按钮
int按钮1=4;
int按钮2=5;
int按钮3=6;
int按钮4=7;
//宣布伺服
伺服伺服1;
伺服2;
伺服3;
伺服4;
整数移动[100]//内存高达100
int x=0;
int y=1;
无效设置(){
pinMode(按钮1,输入\上拉);//按钮设置
pinMode(按钮2,输入\上拉);
pinMode(按钮3,输入\上拉);
pinMode(按钮4,输入\上拉);
伺服1.连接(8);//伺服设置
2.连接(9);
伺服3.连接(10);
伺服4.连接(11);
moveServo1();//系统检查
移动伺服2();
移动伺服3();
移动伺服4();
}
//移动函数
void moveServo1(){
伺服1.写入(5);
延迟(500);
1.写(45);
延迟(500);
}
void moveServo2(){
伺服2.写入(5);
延迟(500);
伺服2.写入(45);
延迟(500);
}
void moveServo3(){
伺服3.写入(175);
延迟(500);
伺服3.写入(135);
延迟(500);
}
void moveServo4(){
伺服4.写入(5);
延迟(500);
伺服4.写入(45);
延迟(500);
}
void循环(){
//通过按钮读取输入
while(x
首先,我要检查使伺服装置移动1-4的代码是否不是设置循环中的代码

  moveServo1();//System check
  moveServo2();
  moveServo3();
  moveServo4();

在这里,你要做一个伺服系统检查,这意味着每次你给arduino通电时,第一个伺服会移动,然后第二个,依此类推,直到无效循环开始…评论这些行,看看这是否有帮助

我希望这是答案,但我给它通电,它在设置中做了我告诉它的一切。循环就是有问题的循环。这是一个while循环,一个switch和case。Idk中的额外命令来自何处。不过谢谢你的意见。我不得不排除这种可能性,因为我不知道你对代码、Arduino和其他东西的理解有多好:)希望我没有冒犯你。代码在我看来很好,确实很奇怪。你能看到这个阵列吗?使用Serial.print查看阵列的外观。如果前4个值是1 2 3 4,那么问题可能在while循环中。不,根本不是!如果我做得不够,我向你道歉。可视化数组似乎是一个好主意,所以我会这样做,然后再与您联系。由于序列打印出大量数字,有些是负数,所以出现了严重错误…问题一定是在“while”循环中。请复制并粘贴数组的内容或Arduino返回的任何值…还有,我怀疑你处理按钮的方式有问题,我是说物理接线,你能提供更多的数据吗?