Lampu merah, Lampu hijau

 avatar
unknown
c_cpp
10 months ago
4.2 kB
1
Indexable
// Tetapkan pin di mana butang disambungkan
#include <TM1637Display.h>
const int buttonPin1 = 7; // tetapkan pin butang untuk Pemain 1 sebagai 7
const int buttonPin2 = 2; // tetapkan pin butang untuk Pemain 2 sebagai 2
const int Led = 12; // tetapkan pin LED sebagai 12

long interval = random(2000, 10000); // selang masa di mana LED akan berkelip (dalam milisaat)
long previousMillis = 0; // akan menyimpan masa terakhir LED dikemas kini

// Pin sambungan modul (Pin Digital)
#define CLK1 6
#define DIO1 5

#define CLK2 9
#define DIO2 8

TM1637Display display1(CLK1, DIO1); // untuk paparan skor Pemain 1
TM1637Display display2(CLK2, DIO2); // untuk paparan skor Pemain 2

// Pembolehubah untuk menyimpan keadaan butang
int buttonState1 = 0;
int buttonState2 = 0;

// Pembolehubah untuk mengira bilangan tekan butang
int buttonCount1 = 0;
int buttonCount2 = 0;

int ledstate = 1; // untuk menyatakan sama ada LED menyala atau tidak
int x = 0; // untuk menetapkan semula penggunaan millis

void setup() {
  // Tetapkan pin butang sebagai input
  pinMode(buttonPin1, INPUT_PULLUP); // input butang Pemain 1
  display1.setBrightness(0x0f); // tetapkan kecerahan paparan 1
  pinMode(buttonPin2, INPUT_PULLUP); // input butang Pemain 2
  display2.setBrightness(0x0f); // tetapkan kecerahan paparan 2

  pinMode(Led, OUTPUT); // tetapkan LED sebagai output

  display1.showNumberDec(0, true, 4); // Papar "0000" pada paparan 1
  display2.showNumberDec(0, true, 4); // Papar "0000" pada paparan 2

  // Mulakan Serial
  digitalWrite(Led, 1); // nyalakan LED
  Serial.begin(9600); // mulakan komunikasi serial pada 9600 baud
}

void loop() {
  // Baca keadaan butang
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);

  // Tetapkan pemasa untuk LED
  unsigned long currentMillis = millis(); // millis digunakan untuk membaca pemasa tanpa mengganggu proses pengekodan
  int x = currentMillis - previousMillis; // tetapkan semula x kepada 0 setiap kali LED dimatikan
  if (x > interval) {
    previousMillis = currentMillis; // menetapkan semula millis kepada 0;

    // Jika LED dimatikan, nyalakan dan sebaliknya:
    if (digitalRead(Led) == LOW) {
      digitalWrite(Led, HIGH); // nyalakan LED
      ledstate = 1; // tetapkan keadaan LED sebagai 1
    } else {
      digitalWrite(Led, LOW); // matikan LED
      ledstate = 0; // tetapkan keadaan LED sebagai 0
    }
  }
  Serial.println(digitalRead(Led)); // cetak keadaan LED untuk debugging (boleh diabaikan)

  // Semak jika butang ditekan
  // Jika ya, keadaan butang adalah LOW
  if (buttonState1 == LOW && ledstate == 1) {
    // Tingkatkan kiraan butang
    buttonCount1++;

    // Cetak bilangan tekan butang
    Serial.print("Button 1 was pressed ");
    Serial.print(buttonCount1);
    Serial.println(" times");
    display1.showNumberDec(buttonCount1, true); // paparkan pada TM1637
  } else if (buttonState1 == LOW && ledstate == 0) { // jika butang ditekan semasa LED dimatikan, kiraan akan negatif
    // Kurangkan kiraan butang
    buttonCount1--;

    // Cetak bilangan tekan butang
    Serial.print("Button 1 was pressed ");
    Serial.print(buttonCount1);
    Serial.println(" loss");
    display1.showNumberDec(buttonCount1, true); // paparkan pada TM1637
  }

  if (buttonState2 == HIGH && ledstate == 1) {
    // Tingkatkan kiraan butang
    buttonCount2++;

    // Cetak bilangan tekan butang
    Serial.print("Button 2 was pressed ");
    Serial.print(buttonCount2);
    Serial.println(" times");
    display2.showNumberDec(buttonCount2, true); // paparkan pada TM1637
  } else if (buttonState2 == HIGH && ledstate == 0) { // jika butang ditekan semasa LED dimatikan, kiraan akan negatif
    // Kurangkan kiraan butang
    buttonCount2--;

    // Cetak bilangan tekan butang
    Serial.print("Button 2 was pressed ");
    Serial.print(buttonCount2);
    Serial.println(" loss");
    display2.showNumberDec(buttonCount2, true); // paparkan pada TM1637
  }

  if(buttonCount1 == 100){
    buttonCount2 = 0;
    delay(10000);
  }
  else if(buttonCount2 == 100){
    buttonCount1 = 0;
    delay(10000);
  }

}
Editor is loading...
Leave a Comment