黑乌鸦的Arduino兵器库-----分享一段自用的万能按键扫描代码
本帖最后由 w466909383 于 2019-11-5 11:29 编辑#define BUTTONCOUNT 5
#define HIGHMODE
int Mode=0;
const int ButtonPin = { 2,3,4,5,6 };
int ButtonStat = { 0 };
void setup()
{
Serial.begin(9600);
IintButton();
//IintButton(LOWMODE);
}
void IintButton()
{
#if define HIGHMODE
Mode=1;
#else
Mode=0;
#endif
for (int i = 0; i < BUTTONCOUNT; ++i)
{
if (Mode)
pinMode(ButtonPin, INPUT);
else
pinMode(ButtonPin, INPUT_PULLUP);
ButtonStat = 0;
}
}
int ScanButton()
{
for (int i = 0; i < BUTTONCOUNT; ++i)
{
if (digitalRead(ButtonPin)==Mode)
{
if (ButtonStat != 1)
{
if (!ButtonStat)
{
ButtonStat = -1;
delay(10);
}
else if (ButtonStat == -1)
{
ButtonStat = 1;
return i + 1;
}
}
}
else
{
if (ButtonStat == -1)
{
ButtonStat = 0;
}
else if (ButtonStat == 1)
{
ButtonStat = 0;
return -1 * (i + 1);
}
}
}
return 0;
}
void loop()
{
int button = ScanButton();
if (button)
{
Serial.println(button);
}
}
#define BUTTONCOUNT 5 这里设置你的按键个数
#define HIGHMODE 这里设置按键触发模式 (低电平触发还是高电平触发)
const int ButtonPin = { 2,3,4,5,6 }; 设置引脚号
扫描采用了非阻塞的方式
进行了简单的防抖处理
能有效的扫描按键的 按下状态和弹起状态
想要学习更多内容加QQ群吧
乌鸦的Arduino交流群:46127581
----------------------------------------------------------------------
写在后面:
时隔多日再次更新兵器库系列 ,回帖不多让我很难受
想找个扫描PC键盘的程序,,,自己做键盘。。。 本帖最后由 完完全全 于 2019-11-6 17:29 编辑
兄弟,我最近也在研究按键!下面怎样,实现长按
#define buttonPin7
int jianzhi=0;
int sw_state =0;
unsigned long start_hold=0;
unsigned long hold_time=0;
void setup() {
Serial.begin(9600);
Serial.print("jianzhi:");
Serial.print(jianzhi);
pinMode(buttonPin,INPUT_PULLUP);
}
void loop() {
sw_state = digitalRead(buttonPin);
if (sw_state==LOW)
start_hold = millis();
while (sw_state == LOW) {//应该这条语句造成阻塞
sw_state = digitalRead(buttonPin);
hold_time=millis()-start_hold;
if (hold_time>5){//防抖
switch (hold_time>1500){//判断按下的时间
case 1:jianzhi=2;
hold_time=0;//这句其实没什么用!
break;
case 0:jianzhi=1;
hold_time=0;
break;
}
}
}
Serial.println("jianzhi:");
Serial.println(jianzhi);
}
int ButtonStat = { 0 };
这是神马??? 完完全全 发表于 2019-11-6 17:28
兄弟,我最近也在研究按键!下面怎样,实现长按
#define buttonPin7
int jianzhi=0;
我这段也想把长按短按的操作加上 不难 楼主的程序有问题,下标没有
页:
[1]