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 - Fatal编程技术网

Arduino纳米和模拟操纵杆

Arduino纳米和模拟操纵杆,arduino,Arduino,我有一个由4个运动方向组成的游戏(上下左右) 使用Arduino Nano和模拟操纵杆,看起来代码和其他帖子之前的检查一样正确 这是Arduino代码: 字节x_轴=A3; 字节y_轴=A1; 字节btn1=8; 字节btn2=9; 字节btn3=10; 字节btn4=11; 字节btn5=12; 字节led=13; 无效设置(){ pinMode(x_轴,输入); pinMode(y_轴,输入); pinMode(btn1,输入); 引脚模式(btn2,输入); 引脚模式(btn3,输入);

我有一个由4个运动方向组成的游戏(上下左右) 使用Arduino Nano和模拟操纵杆,看起来代码和其他帖子之前的检查一样正确

这是Arduino代码:

字节x_轴=A3;
字节y_轴=A1;
字节btn1=8;
字节btn2=9;
字节btn3=10;
字节btn4=11;
字节btn5=12;
字节led=13;
无效设置(){
pinMode(x_轴,输入);
pinMode(y_轴,输入);
pinMode(btn1,输入);
引脚模式(btn2,输入);
引脚模式(btn3,输入);
引脚模式(btn4,输入);
引脚模式(btn5,输入);
数字写入(btn1,高);
数字写入(btn2,高);
数字写入(btn3,高);
数字写入(btn4,高);
数字写入(btn5,高);
引脚模式(led,输出);
数字写入(led,低电平);
Serial.begin(9600);
}
void循环(){
Int read_x=模拟读取(x_轴);
int read_y=模拟读取(y_轴);
如果(读取>600){
序列号。打印号(“R”);
数字写入(led,高电平);
}
如果(读取x<400){
序列号。打印号(“L”);
数字写入(led,高电平);
}
如果(读数大于600){
序列号。打印号(“D”);
数字写入(led,高电平);
}
如果(读y<400){
序列号。打印号(“U”);
数字写入(led,高电平);
}
如果(数字读取(btn1)=低){
序列号。打印号(“1”);
数字写入(led,高电平);
}
如果(数字读取(btn2)=低){
序列号。打印号(“2”);
数字写入(led,高电平);
}
如果(数字读取(btn3)=低){
序列号。打印号(“3”);
数字写入(led,高电平);
}
如果(数字读取(btn4)=低){
序列号。打印号(“4”);
数字写入(led,高电平);
}
如果(数字读取(btn5)=低){
序列号。打印号(“5”);
数字写入(led,高电平);
}
延迟(10);
数字写入(led,低电平);
}
但是当我使用串行监视器检查它时,它会不停地显示
U
L
,即使不触摸操纵杆


如何解决此问题?

我感觉很慷慨,因此代码中存在一些抖动问题,您确实需要进行一些清理。这段代码可以编译。现在,当操纵杆在x/y中为0,0时,它会在代码中抖动。你可以做的一件事是重新映射抖动,以获得更宽的中心。将原始模拟值打印到串行监视器上,然后用少量填充将其映射到0点。参考:

字节x_轴=A3;
字节y_轴=A1;
字节btn[]={8,9,10,11,12};//2,3,4,5,6
字节stat[]={1,2,3,4,5};
字节led=13;
int-dval=50;
无效设置(){
pinMode(x_轴,输入);
pinMode(y_轴,输入);
对于(int i=0;i<5;i++){
pinMode(btn[i],输入);
数字写入(btn[i],高);
}
引脚模式(led,输出);
数字写入(led,低电平);
Serial.begin(9600);
}
void循环(){
int read_x=模拟读取(x_轴);
延迟(dval);
int read_y=模拟读取(y_轴);
延迟(dval);
如果(读取>600){
序列号。打印号(“R”);
数字写入(led,高电平);
}
如果(读取x<400){
序列号。打印号(“L”);
数字写入(led,高电平);
}
如果(读数大于600){
序列号。打印号(“D”);
数字写入(led,高电平);
}
如果(读y<400){
序列号。打印号(“U”);
数字写入(led,高电平);
}
对于(int i=0;i<5;i++){
if(数字读取(btn[i])==低){
Serial.println(stat[i]);
数字写入(led,高电平);
}
}
延迟(10);
数字写入(led,低电平);
}
Emad joon: 1-检查操纵杆和Vdd的接地是否连接到arduino

2-将操纵杆的x和y连接至arduino模拟输入

将此代码用作启动器:

#define X_AXIS A1
#define Y_AXIS A3


void setup() {
 Serial.begin(9600);

}

void loop() {
  Serial.print("X = ");
  Serial.println(analogRead(X_AXIS);
  Serial.print("Y = ");
  Serial.println(analogRead(Y_AXIS);
  delay(150);

}
查看当操纵杆处于初始位置时得到的值。您可以在此代码的基础上构建按钮。 此外,不要忘记对按钮读数使用去抖动:

if(digitalRead(Button1)==0){
  delay(40);
  if(digitalRead(Button1==0){
    buttonPressed=true;
  }
}

修复电路。要修复电路,请直接打印两个轴上读取的值。从那里,你可以判断你的电路是否错误,或者你选择的值是否关闭。我尝试了没有任何电路的Arduino,但它仍然显示随机values@Emadmohseny这是意料之中的。如果没有任何连接,模拟输入的值将由存在的任何噪声和随机波动引起。如果不连接输入,您将无法获得任何有意义的内容。
if(digitalRead(Button1)==0){
  delay(40);
  if(digitalRead(Button1==0){
    buttonPressed=true;
  }
}