我有一个马达我可以用操纵杆转动CW / CCW。 我想只有按下操纵杆按钮才能做到这一点,这是一个瞬时开关。
我相信它应该通过每次按下和释放按钮时将状态更改为1(或0),然后在该状态为1时使电机仅转动。
我尝试过谷歌搜索的不同代码,但到目前为止,它们仍然让我的开关像瞬间开关一样。 :-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
}
}
答案 0 :(得分:0)
感谢您提供Ignacio Vazquez-Abrams链接。我使用了链接中的代码并更改了代码中的反函数,因此它在每秒推送时打开/关闭。现在它工作正常。 : - )