这个程序该怎么改动-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 865|回复: 9

[未解决] 这个程序该怎么改动

[复制链接]
发表于 2022-8-5 15:25 | 显示全部楼层 |阅读模式
int inpin1 = 13; //定义数字13接口
int val;//定义变量val
int buttonState1 = 0; //按键初始值为0
int beforeState1 = 0; //检测上一次按下是否松开
int k = 0;  //光标位置
int j = 0;  //光标位置
short i = 1;
void setup() {
  Serial.begin(9600);
     pinMode(inpin1, INPUT); //定义按键接口为输入接口
  for (int yinjiao = 2; yinjiao < 13; yinjiao++)
  {
    pinMode(yinjiao, OUTPUT);
    digitalWrite(yinjiao, HIGH);
  }
}
void loop() {
  val = digitalRead(inpin1); //读取数字13口电平值赋给val
    buttonState1 = digitalRead(inpin1); //读取按键状态
  if (buttonState1 == 1 and beforeState1 == 0) //如果按键按下并且上一次按下松开
  {
    switch (k)
    {
      case 1:
        k = 0;
        break;
      case 0:
        i++;
        break;
    }
  }
  if (buttonState1 != beforeState1) //消抖
  {
    delay(20);
  }
  beforeState1 = buttonState1;
  Serial.println(i);
  if (i >= 2 < 13)
  {
    digitalWrite(i, LOW);
  }
  else
  {
    i = 1;
  }
}
-----------------------------------------------------------------------------------
上面是一个按键依次让(2-12)12个口低电平模式的程序。只能一直开下去,我想按键按到12下后
(2-12)口开始反转变为高电平。请问大神们,我该怎么改呢?谢谢啦

发表于 2022-8-25 21:30 | 显示全部楼层
我觉得不用这么麻烦。先设置:输入引脚 pinMode(inpin1,INPUT_PULLUP);
然后主程序:
void loop()
{
  if(digitalRead(KEY1) == LOW)
    {
      delay(30);
      if(digitalRead(KEY1) == LOW)
        {
          i++;
         }
        while(digitalRead(KEY1) == LOW);
      }
  Serial.println(i);
  if (i >= 2 < 13)
  {
    digitalWrite(i, LOW);
  }
  else
  {
    i = 1;
      for (int yinjiao = 2; yinjiao < 13; yinjiao++)
  {
    pinMode(yinjiao, OUTPUT);
    digitalWrite(yinjiao, HIGH);
  }
  }
}

点评

大神就是大神,画龙点睛之笔  发表于 2022-8-26 10:44
发表于 2022-8-9 11:49 | 显示全部楼层

回帖奖励 +10 金币

说实话没太看懂你的代码,但按照你说的意思,你应该用个计数就行了呀?类似:
最开始 i = 1;
  1. if(按钮被按下)
  2. {
  3. i++;
  4. digitalWrite(i, LOW);
  5. }
  6. if (i == 12)
  7. {
  8. i = 1;
  9. 全部恢复高电平(用你setup里面的那个就行)
  10. }
复制代码

点评

蟹蟹  发表于 2022-8-11 11:12
 楼主| 发表于 2022-8-11 11:09 | 显示全部楼层
dyn002000 发表于 2022-8-9 11:49
说实话没太看懂你的代码,但按照你说的意思,你应该用个计数就行了呀?类似:
最开始 i = 1;
...

谢谢指导,我会一步一步改进程序的
 楼主| 发表于 2022-8-11 11:19 | 显示全部楼层
dyn002000 发表于 2022-8-9 11:49
说实话没太看懂你的代码,但按照你说的意思,你应该用个计数就行了呀?类似:
最开始 i = 1;
...

我最后找了个偷懒的方法,在每继电器处装了两个指示灯(电源灯和开启灯)接好电后电源指示灯亮,继电器开启灯只有在按钮按到时继电器打开,灯亮。就是arduino板上有个reset口,我做了个res按键直接接地。继电器全部打开后按res键复位。
我会按你的思路重新写程序,再做一次
谢谢唻
发表于 2022-8-27 10:37 | 显示全部楼层
基于你当前的代码逻辑(如果运行正常的话(这个 if (i >= 2 < 13)是什么鬼??))
实际上修改起来很简单,当前i的取值范围是1-13,你可以再加一个判断,让其取值范围变成1-24,在13-24的区间内处理引脚由低到高的逻辑
  if (i >= 2 && i < 13)
  {
    digitalWrite(i, LOW);
  }
   else if (i >= 13 && i < 24)
  {
    digitalWrite(i-11, HIGH);
  }
  else
  {
    i = 1;
  }

你可以试试

点评

因为我用的是UNO,没那么多JPIO口,所以选2-12  发表于 2022-8-30 12:21
好的,谢谢指点  发表于 2022-8-30 12:19
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:56 , Processed in 0.227745 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表