[英]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.