Arduino Uno-C代码,可从1-9开始计数,带按钮控制和7段显示

Arduino Uno-C代码,可从1-9开始计数,带按钮控制和7段显示,c,arduino,C,Arduino,我想要一个代码,当我按下一个按钮时,让我的数字从1变为9,然后当我按下另一个按钮时,让数字从9变为1 这是我目前掌握的代码: // set pin numbers: int pinButton = 2; int pinButton2 = 3; struct number { int pinA = 4; int pinB = 5; int pinC = 6; int pinD = 7; int pinE = 8;

我想要一个代码,当我按下一个按钮时,让我的数字从1变为9,然后当我按下另一个按钮时,让数字从9变为1

这是我目前掌握的代码:

    // set pin numbers:

    int pinButton = 2;
    int pinButton2 = 3;

    struct number {
     int pinA = 4;
     int pinB = 5;
     int pinC = 6;
     int pinD = 7;
     int pinE = 8;
     int pinF = 9;
     int pinG = 10; 
      };

    int LED = 13;
    int stateLED = LOW;
    int stateButton = 0;
    int stateButton2 = 0;

    number n;

    void setup() {
      pinMode(pinButton, INPUT);
      pinMode(pinButton2, INPUT);
      pinMode(LED, OUTPUT);

      pinMode(n.pinA, OUTPUT);     
      pinMode(n.pinB, OUTPUT);     
      pinMode(n.pinC, OUTPUT);     
      pinMode(n.pinD, OUTPUT);     
      pinMode(n.pinE, OUTPUT);     
      pinMode(n.pinF, OUTPUT);     
      pinMode(n.pinG, OUTPUT);     
    }


    void loop() {
      stateButton = digitalRead(pinButton);  
      stateButton2 = digitalRead(pinButton2);  

      if(stateButton == 0 && stateButton2 == 1) 
      {
          stateLED = HIGH;
          digitalWrite(LED, HIGH);  
   //1    
      digitalWrite(n.pinA, LOW);   
      digitalWrite(n.pinB, HIGH);   
      digitalWrite(n.pinC, HIGH);   
      digitalWrite(n.pinD, LOW);   
      digitalWrite(n.pinE, LOW);   
      digitalWrite(n.pinF, LOW);   
      digitalWrite(n.pinG, LOW);   

        }

      if(stateButton == 1 && stateButton2 == 0) {
          stateLED = LOW;  
         digitalWrite(LED, LOW);
    //2
      digitalWrite(n.pinA, HIGH);   
      digitalWrite(n.pinB, HIGH);   
      digitalWrite(n.pinC, LOW);   
      digitalWrite(n.pinD, HIGH);   
      digitalWrite(n.pinE, HIGH);   
      digitalWrite(n.pinF, LOW);   
      digitalWrite(n.pinG, HIGH);   

        }
    }
它从1到2工作,我这里有从3到9的其余代码:

{
//3
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, HIGH);   


  //4
  digitalWrite(pinA, LOW);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   


  //5
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   

  //6
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, LOW);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   

  //7
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, LOW);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, LOW);   
  digitalWrite(pinG, LOW);   

  //8
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, HIGH);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   


  //9
  digitalWrite(pinA, HIGH);   
  digitalWrite(pinB, HIGH);   
  digitalWrite(pinC, HIGH);   
  digitalWrite(pinD, HIGH);   
  digitalWrite(pinE, LOW);   
  digitalWrite(pinF, HIGH);   
  digitalWrite(pinG, HIGH);   
}
…但是当我将其与上面的第一个代码块合并并将其上传到显示器上时,数字似乎重叠(即,我执行以下操作…)


有谁有更好的方法吗?

您需要在两个数字之间引入延迟。这可以通过 两位数之间的简单软件延迟

     if(stateButton == 0 && stateButton2 == 1) 
     {
        stateLED = HIGH;
        digitalWrite(LED, HIGH); 

        // Write digit 1
        delay(50);
        // Write digit 2
        delay(50);
     }

上述方法的特点是,一旦按下按钮,它将从1-9或9-1循环,而不会停止。

“我知道Arduino不是C”-那么你错了,Arduino代码是C(有时是C++)代码。@ParamagneticCroissant如果我错了,那么Olaf也是,他在我引用的评论中粗鲁地说“Arduino不是C”“谢谢。很好的知道它也使用C++。你应该了解一些。看一看。顺便说一句,@rishikshraje回答您的是强制性的:您必须在数字之间设置延迟或更好的延迟,使用计时器增加变量和显示传递数字的函数。使用常量数组存储不同的7段显示序列。您确实需要实现去抖动。@Olaf“这很好,因为它添加了所需的功能。”–嗯……什么?它增加了什么样的核心语言功能?它只是增加了库…这绝对不是一种不同的语言。只需看看ArduinoIDE的编译器调用。它使用通用的C++编译器,G+,从AVR GCC工具链中,没有任何额外的杂波。已经尝试过这种方法。我更喜欢只按按钮而不是自动进行循环。在这种方法中,循环将按按钮进行。你必须像其他人提到的那样注意去抖动,这样它才能在物理环境中工作。
     if(stateButton == 0 && stateButton2 == 1) 
     {
        stateLED = HIGH;
        digitalWrite(LED, HIGH); 

        // Write digit 1
        delay(50);
        // Write digit 2
        delay(50);
     }