Arduino - 期中考

/* 期中考 :
 * 有B.C兩顆按鈕,兩顆沒有按下時,
 * 0~9循環(A迴圈),
 * 按下B時,亂數K,顯示K,直到按下C
 * 按下C時,如果K是0~5,向左三圈
 *          如果K是6~9,向右三圈
 * 然後繼續循換0~9
 */
int pins[7] = {D3,D2,D4,D5,D6,D0,D1};
const boolean data[11][7] = {
1,1,1,1,1,1,0,    // 0
0,1,1,0,0,0,0,    // 1
1,1,0,1,1,0,1,    // 2
1,1,1,1,0,0,1,    // 3
0,1,1,0,0,1,1,    // 4
1,0,1,1,0,1,1,    // 5
1,0,1,1,1,1,1,    // 6
1,1,1,0,0,1,0,    // 7
1,1,1,1,1,1,1,    // 8
1,1,1,1,0,1,1,    // 9
0,0,0,0,0,0,0, }; // 10 ( off_all_LED )
void writeNumber(int n){ //把七段顯示器顯示函式獨立
  for(int i = 0; i < 7; i++){
    digitalWrite(pins[i], data[n][i] == HIGH);
  } }

void setup(){
  Serial.begin(9600);
  pinMode(D0,OUTPUT);
  pinMode(D1,OUTPUT);
  pinMode(D2,OUTPUT);
  pinMode(D3,OUTPUT);
  pinMode(D4,OUTPUT);
  pinMode(D5,OUTPUT);
  pinMode(D6,OUTPUT);
  pinMode(D7, INPUT);
  pinMode(D8, INPUT);               
}

int k;
boolean X = false;
boolean Y = true;

void loop(){
  int b = digitalRead(D7);
  int c = digitalRead(D8);
  if(b == HIGH && c == LOW && Y == false) {
    Y = true;
    k = random(10);
    writeNumber(k); delay(250);
    Serial.println("B迴圈1");  //按下B
    Serial.print("亂數 =  "); Serial.println(k);
  }
  else if(b == LOW && c == LOW && Y == true) {
    writeNumber(k); delay(250);
    Serial.println("B迴圈2");  //放開B,等待C按下
    Serial.print("亂數 =  "); Serial.println(k);
  }
  else if(b == LOW && c == HIGH && Y == true) {
    X = !X;  Y = false; Serial.println("C迴圈");  //C按下,執行C
    if (k <= 5){
      writeNumber(10);
      for (int n = 0; n <= 2; n++) {
        Serial.println("向左,順");
         for (int thisPin = 6 - 1; thisPin >= 0; thisPin--) {
           digitalWrite(pins[thisPin], HIGH);
           delay(100);
           digitalWrite(pins[thisPin], LOW);
        }  //向左,逆
      }
    }
    else if (k >= 6){
      writeNumber(10);
      for (int n = 0; n <= 2; n++) {
        Serial.println("向右,順");
        for (int thisPin = 0; thisPin < 6; thisPin++) {
          digitalWrite(pins[thisPin], HIGH);
          delay(100);
          digitalWrite(pins[thisPin], LOW);
        }  //向右,順
      }
    }
  }
  else if(b == LOW && c == LOW && Y == false){
    for(int n = 0; n <= 9; n++){
      writeNumber(n); delay(250);
      Serial.println("A迴圈");  //C執行結束,進入A,等待B按下
    }
  } 
}

沒有留言:

張貼留言