Arduino Polska Forum

Pełna wersja: Elektroniczna kostka do gier.
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Kod:
#define SEG_C 3
#define SEG_E 6
#define SEG_D 5
#define SEG_B 7
#define SEG_G 2
#define SEG_A 11
#define SEG_F 10
#define PRZYCISK 12
int ostatniStan = HIGH; //BO PULLUP
int losowaLiczba;

void setup() {

     Serial.begin(9600);

   pinMode(PRZYCISK, INPUT_PULLUP);
  
  //Konfiguracja pinow jako wyjscia
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);

}

void loop() {
 
pinMode(12, INPUT_PULLUP); //Przycisk jako wejście

if (digitalRead(PRZYCISK) == HIGH) { // Przycisk nie naciśnięty
        digitalWrite(wyswietlacz,HIGH); //Wyświetlacz zgaszony
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH); 
    }  
if (digitalRead(PRZYCISK) == LOW) { // Przycisk naciśnięty
   losowaLiczba = random(1, 7);
   Serial.println(losowaLiczba);
   digitalWrite(wyswietlacz, LOW); // Jeśli tak, zapala wyświetlscz
   wyswietlacz(losowaLiczba);
       
  }
}

void wyswietlacz(int cyfra) {
  //Instrukcja switch ustawia odpowiednie stany na wyjsciach
  //w zaleznosci od podanej cyfry
  switch (cyfra) {
    
    case 0:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
   
    case 1:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 2:
        digitalWrite(SEG_A,  LOW);
        digitalWrite(SEG_B,  LOW);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D,  LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 3:
        digitalWrite(SEG_A,  LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 4:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
   
    case 5:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
   
    case 6:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
       
  }
}
Napisałem tyle. Nie wiem jak zrobić aby przyciskiem uruchomić wyświetlenie losowej liczby i wygaszanie po 2 sek. I znowu przycisk. Dajcie przynajmniej przykład jak to zrobić.       Żeby wyświetlacz wygaszony po naciśnięciu przicisku zapalił się. I po dwóch sek. zgasł i czekał na naciśnięcie przycisku. Na jednej cyfsze 8 np. Plisss. Nie mam innych części aby popróbować . Tylko 4 wyświetlacze  1 cyfrowe, 1 dwu cyfrowy i 4 cyfrowy oraz 8 cyfrowy. A oporników  siedem szt 1 k i z 20 szt 10 k. Zmieniłem kod i uzyskałem wyłączony wyświetlacz. Nie potrafię zrobić aby po naciśnięcu przycisku na 2 sek. wyświetlił losową liczbę. NP.3.  Buuuu
#define SEG_C 3
#define SEG_E 6
#define SEG_D 5
#define SEG_B 7
#define SEG_G 2
#define SEG_A 11
#define SEG_F 10
#define PRZYCISK 12
int ostatniStan = HIGH; //BO PULLUP
int losowaLiczba;

void setup() {

    Serial.begin(9600);

  pinMode(PRZYCISK, INPUT_PULLUP);
 
  //Konfiguracja pinow jako wyjscia
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);

}

void loop() {
 
pinMode(12, INPUT_PULLUP); //Przycisk jako wejście

if (digitalRead(PRZYCISK) == HIGH) { // Przycisk nie naciśnięty
        digitalWrite(wyswietlacz,HIGH); //Wyświetlacz zgaszony
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH); 
    } 
if (digitalRead(PRZYCISK) == LOW) { // Przycisk naciśnięty
  losowaLiczba = random(1, 7);
  Serial.println(losowaLiczba);
  digitalWrite(wyswietlacz, LOW); // Jeśli tak, zapala wyświetlscz
  wyswietlacz(losowaLiczba);
       
  }
}

void wyswietlacz(int cyfra) {
  //Instrukcja switch ustawia odpowiednie stany na wyjsciach
  //w zaleznosci od podanej cyfry
  switch (cyfra) {
   
    case 0:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
   
    case 1:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 2:
        digitalWrite(SEG_A,  LOW);
        digitalWrite(SEG_B,  LOW);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D,  LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 3:
        digitalWrite(SEG_A,  LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 4:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
   
    case 5:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
   
    case 6:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
       
  }
}