Elektroniczna kostka do gier. - Himura Kenshin - 03-12-2020
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
RE: Elektroniczna kostka do gier. - Himura Kenshin - 04-12-2020
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;
}
}
RE: Elektroniczna kostka do gier. - Jarewa0606 - 04-12-2020
Zdecydowanie polecam kurs https://forbot.pl/blog/kurs-arduino-podstawy-programowania-porty-io-id3648
RE: Elektroniczna kostka do gier. - Himura Kenshin - 06-12-2020
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?
RE: Elektroniczna kostka do gier. - kaczakat - 08-12-2020
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.
|