如何使用瞬时操纵杆开关作为拨动开关(Arduino)
How to use momentary joystick switch as toggle switch (Arduino)
我有一个马达,我可以用操纵杆转动 CW/CCW。
我只想在按下操纵杆按钮(一个瞬时开关)后才能这样做。
我认为每次按下和释放按钮时将状态更改为 1(或 0),然后让电机仅在该状态为 1 时转动。
我尝试了 google 搜索中的不同代码,但到目前为止,它们仍然使我的开关像瞬时开关一样工作。 :-S
任何人都可以帮助我如何在我的代码中实现这样的功能吗?
#include <Wire.h>
// L9110 connections
#define L9110_B_IA 10 // Pin D10 --> Motor B Input A
#define L9110_B_IB 11 // Pin D11 --> Motor B Input B
// Motor Speed & Direction
#define MOTOR_B_PWM L9110_B_IA // Motor PWM Speed
#define MOTOR_B_DIR L9110_B_IB // Motor Direction
const int SW_pin = 2; //Joystick Switch
const int X_pin = 0; //Joystick X-axis
const int Y_pin = 1; //Joystick Y-axis
const int TresholdHigh = 520; //Deadband for joystick
const int TresholdLow = 480; //Deadband for joystick
void setup()
{
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
pinMode( MOTOR_B_DIR, OUTPUT );
pinMode( MOTOR_B_PWM, OUTPUT );
digitalWrite( MOTOR_B_DIR, LOW ); // Set motor to off
digitalWrite( MOTOR_B_PWM, LOW );
Serial.begin(9600);
Wire.begin();
}
void loop()
{
if(analogRead(Y_pin) > (TresholdHigh))
{
digitalWrite(13,HIGH);
digitalWrite( MOTOR_B_DIR, LOW );
analogWrite( MOTOR_B_PWM, 100 );
}
else if(analogRead(Y_pin) < (TresholdLow))
{
digitalWrite(13,HIGH);
digitalWrite( MOTOR_B_DIR, HIGH );
analogWrite( MOTOR_B_PWM, 100 );
}
else
{
digitalWrite(13,LOW);
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
}
}
编辑:我已经尝试实现它,但它似乎不起作用。 :P
const int SW_pin = 2; //Joystick Switch
boolean buttonState = true; // store for toggle state, false = off true = on
void setup()
{
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
}
void loop()
{
if(SW_pin == LOW && buttonState == false) // if button is pressed and toggled off
{
buttonState = true; // set button state to on
}
if(SW_pin == LOW && buttonState == true) // if button is pressed and toggled on
{
buttonState = false; // set button state to off
}
}
感谢 link Ignacio Vazquez-Abrams。我使用了 link 中的代码并更改了代码中的计数器函数,因此它在每次按下时都变为 on/off。现在它工作正常。 :-)
我有一个马达,我可以用操纵杆转动 CW/CCW。 我只想在按下操纵杆按钮(一个瞬时开关)后才能这样做。
我认为每次按下和释放按钮时将状态更改为 1(或 0),然后让电机仅在该状态为 1 时转动。
我尝试了 google 搜索中的不同代码,但到目前为止,它们仍然使我的开关像瞬时开关一样工作。 :-S
任何人都可以帮助我如何在我的代码中实现这样的功能吗?
#include <Wire.h>
// L9110 connections
#define L9110_B_IA 10 // Pin D10 --> Motor B Input A
#define L9110_B_IB 11 // Pin D11 --> Motor B Input B
// Motor Speed & Direction
#define MOTOR_B_PWM L9110_B_IA // Motor PWM Speed
#define MOTOR_B_DIR L9110_B_IB // Motor Direction
const int SW_pin = 2; //Joystick Switch
const int X_pin = 0; //Joystick X-axis
const int Y_pin = 1; //Joystick Y-axis
const int TresholdHigh = 520; //Deadband for joystick
const int TresholdLow = 480; //Deadband for joystick
void setup()
{
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
pinMode( MOTOR_B_DIR, OUTPUT );
pinMode( MOTOR_B_PWM, OUTPUT );
digitalWrite( MOTOR_B_DIR, LOW ); // Set motor to off
digitalWrite( MOTOR_B_PWM, LOW );
Serial.begin(9600);
Wire.begin();
}
void loop()
{
if(analogRead(Y_pin) > (TresholdHigh))
{
digitalWrite(13,HIGH);
digitalWrite( MOTOR_B_DIR, LOW );
analogWrite( MOTOR_B_PWM, 100 );
}
else if(analogRead(Y_pin) < (TresholdLow))
{
digitalWrite(13,HIGH);
digitalWrite( MOTOR_B_DIR, HIGH );
analogWrite( MOTOR_B_PWM, 100 );
}
else
{
digitalWrite(13,LOW);
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
}
}
编辑:我已经尝试实现它,但它似乎不起作用。 :P
const int SW_pin = 2; //Joystick Switch
boolean buttonState = true; // store for toggle state, false = off true = on
void setup()
{
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
}
void loop()
{
if(SW_pin == LOW && buttonState == false) // if button is pressed and toggled off
{
buttonState = true; // set button state to on
}
if(SW_pin == LOW && buttonState == true) // if button is pressed and toggled on
{
buttonState = false; // set button state to off
}
}
感谢 link Ignacio Vazquez-Abrams。我使用了 link 中的代码并更改了代码中的计数器函数,因此它在每次按下时都变为 on/off。现在它工作正常。 :-)