繁体   English   中英

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

[英]Arduino Uno - C Code to count from 1-9 and back with button control and 7-Segment display

我想要一个代码,让我在按下一个按钮时让我的数字从 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);   
}

...但是当我将其与上面的第一个代码块组合并将其上传到显示器上时,数字似乎重叠(即,我执行以下操作...)。

    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);   
    //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);       
        }

      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    
      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 == 0 && stateButton2 == 1) 
     {
        stateLED = HIGH;
        digitalWrite(LED, HIGH); 

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

上面的方法有一个特性,一旦你按下按钮,它就会从1-9或9-1循环,不会停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM