Arduino 7段代码运行不正确

时间:2015-01-23 00:05:50

标签: arduino

我正在尝试用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);
}

1 个答案:

答案 0 :(得分:0)

您可能应该按下按钮边缘的逻辑而不是仅仅读取当前状态。问题是按钮将是LOW整个时间,而不是你正在积极按下它的几个毫秒。 Here是实现一些边缘检测的一个例子。