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.
Napisałem tyle.  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śn
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;
       
  }
}
ięcu przycisku na 2 sek. wyświetlił losową liczbę. NP.3.  Buuuu
Tyle zrobiłem. Mam kłopoty z przyciskiem. Nie wiem gdzie jak to wpisać. Jeżeli przycisk nie wciśnięty to wyświetlacz zgaszony a jeśli wciśnięty to wyświetl losową liczbę.
Kod:
//Definiowanie pinów wyświetlacza i Arduino
#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

//Definiowanie pinu przycisku  12 i przycisk
//Arduino UNO +5
//Arduino UNO przez rezystor 10 k GND

#define PRZYCISK 12
int delayTime(20);// Drgania przycisku
int ostatniStan = HIGH; //BO PULLUP
int losowaLiczba;
int cyfra;

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

        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); 


     
   losowaLiczba = random(1, 7);
   Serial.println(losowaLiczba);
// 
//   digitalWrite(wyswietlacz,LOW);
    wyswietlacz(losowaLiczba); //Wyswietl wartosc na wyswietlaczu
    delay(2000);
    } 
     
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;
       
  }
}
Kod:
//Definiowanie pinów wyświetlacza i Arduino
#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

//Definiowanie pinu przycisku  12 i przycisk
//Arduino UNO +5
//Arduino UNO przez rezystor 10 k GND

#define PRZYCISK 12

int ostatniStan = LOW; //BO PULLUP
int losowaLiczba;
int cyfra;

void setup() {
  
  //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() {
    
   losowaLiczba = random(1, 7);
   Serial.println(losowaLiczba);
if (digitalRead(PRZYCISK) == HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk

      wyswietlacz(-1); //jeśli chcesz wygasić wyświetlacz, to musisz dodać taką opcję - albo tak albo niezależna funkcja w stylu czysc()

  delay(PRZYCISK);//Czekaj na naciśnięcie przycisku
wyswietlacz(losowaLiczba); //Wyswietl wartosc na wyswietlaczu
}

      } 
    
void wyswietlacz(int cyfra) {

  //Instrukcja switch ustawia odpowiednie stany na wyjsciach
  //w zaleznosci od podanej cyfry
  switch (cyfra) {
    case -1:
        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);
     break;
    
    case 1:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
    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_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
   
    case 4:
     digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        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;
       
  }
}
Mam kłopot z elektroniczną kostką. Nie wiem jak zrobić aby na początku nic nie wyświetlało. Za każdym razem jak wczytam swieci się 8.Dalej jest dobrze. Co naciśnę przycisk to zapala się inna cyfra z zakresu od 1 do 6. Gdzie błąd lub błędy? Jak wyczyścić segmenty?
Wcześniej miałeś "pinMode(PRZYCISK, INPUT_PULLUP);", teraz nie widzę. Bez tego to nie ma sensu" if (digitalRead(PRZYCISK) == HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk".
Zrób kurs, poczytaj książkę o C/C++ i o AVR/Arduino.