我正在尝试用Arduino控制一个4位数的SSEG显示器。当我按下按钮时,它应该显示一个不同的数字,但它当前只是闪烁else语句。我还希望数字显示在数字1而不是数字3上,我认为输入有问题但不确定是什么。
int digit1 = 11; //PWM Display pin 1
int digit2 = 10; //PWM Display pin 2
int digit3 = 9; //PWM Display pin 6
int digit4 = 6; //PWM Display pin 8
//Pin mapping from Arduino to the ATmega DIP28
//http://www.arduino.cc/en/Hacking/PinMapping
int segA = A1; //Display pin 14
int segB = 3; //Display pin 16
int segC = 4; //Display pin 13
int segD = 5; //Display pin 3
int segE = A0; //Display pin 5
int segF = 7; //Display pin 11
int segG = 8; //Display pin 15
int button1 = 13; //input
int val = 0;
void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(13, OUTPUT);
pinMode(button1, INPUT);
}
void loop() {
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGH
clearLEDs();
button();
}
void clearLEDs(){
digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
digitalWrite(segA, SEGMENT_OFF); // A
digitalWrite(segB, SEGMENT_OFF); // B
digitalWrite(segC, SEGMENT_OFF); // C
digitalWrite(segD, SEGMENT_OFF); // D
digitalWrite(segE, SEGMENT_OFF); // E
digitalWrite(segF, SEGMENT_OFF); // F
digitalWrite(segG, SEGMENT_OFF); // G
delay(100);
}
void button(){
val = digitalRead(button1);
if(button1 == HIGH){
digitalWrite(digit1, DIGIT_ON);
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
delay(400);
}
else{
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
}
delay(100);
}