Skocz do zawartości

Kurs Arduino II - #6 - wyświetlacze 7-segmentowe


Pomocna odpowiedź

@Santiago Tak to zadanie 6.3 jedyne co chciałem zrobić to zabiegi "kosmetyczne" które mi nie wyszły. Chciałem tylko zrobić żeby cyferki wolniej leciały ale tak jak pisałem zmienna która to miała kontrolować u mnie całkowicie nie działa.  Fajne rozwiązanie zarzucił @jand 

Cytat

Żeby całkiem nie burzyć Twojej koncepcji - dodaj jeszcze jeden stopień zliczania (jakby następną cyfrę}. Potraktuj nowe dziesiątki jako jednostki, a nowych jednostek nie wyświetlaj. Twój licznik będzie chodził 10 razy wolniej.

niestety tego jeszcze nie sprawdziłem bo zdążyłem rozebrać układ i musze go na nowo złożyć. 

Link do komentarza
Share on other sites

(edytowany)
11 godzin temu, PanMajster napisał:

Niestety ale to nie działa zmieniałem na 2 i na 500 nie ma dosłownie żadnej różnicy. 

Wkleiłem kod, który u mnie działał.

#define segF 2
#define segA 3
#define segG 4
#define segB 5
#define segD 6
#define segC 7
#define segE 8

#define wys1 11 //wyjścia wyświetlaczy
#define wys2 10

int i = 0; //jedynki
int j = 0; //dziesiatki

void setup() {
  pinMode (segA, OUTPUT);
  pinMode (segB, OUTPUT);
  pinMode (segC, OUTPUT);
  pinMode (segD, OUTPUT);
  pinMode (segE, OUTPUT);
  pinMode (segF, OUTPUT);
  pinMode (segG, OUTPUT);

  pinMode(wys1, OUTPUT);
  pinMode(wys2, OUTPUT);
}

void loop() {
  for (j = 0; j < 10; j++) { //pętla dodająca dziesiątki
    for (i = 0; i < 10; i++) { //pętla dodająca cyfry 
      projekcja(); //funkcja odpowiadająca za multipleksowanie
    }
  }
}

void wyswietlacz(int cyfra) {
  switch (cyfra) {
    case 0:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, HIGH);
      digitalWrite(segF, HIGH);
      digitalWrite(segG, LOW);
    break;     
    case 1:
      digitalWrite(segA, LOW);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, LOW);
      digitalWrite(segE, LOW);
      digitalWrite(segF, LOW);
      digitalWrite(segG, LOW);
    break;   
    case 2:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, LOW);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, HIGH);
      digitalWrite(segF, LOW);
      digitalWrite(segG, HIGH);
    break;    
    case 3:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, LOW);
      digitalWrite(segF, LOW);
      digitalWrite(segG, HIGH);
    break;  
    case 4:
      digitalWrite(segA, LOW);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, LOW);
      digitalWrite(segE, LOW);
      digitalWrite(segF, HIGH);
      digitalWrite(segG, HIGH);
    break;  
    case 5:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, LOW);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, LOW);
      digitalWrite(segF, HIGH);
      digitalWrite(segG, HIGH);
    break;  
    case 6:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, LOW);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, HIGH);
      digitalWrite(segF, HIGH);
      digitalWrite(segG, HIGH);
    break;  
    case 7:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, LOW);
      digitalWrite(segE, LOW);
      digitalWrite(segF, LOW);
      digitalWrite(segG, LOW);
    break;  
    case 8:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, HIGH);
      digitalWrite(segF, HIGH);
      digitalWrite(segG, HIGH);
    break;  
    case 9:
      digitalWrite(segA, HIGH);
      digitalWrite(segB, HIGH);
      digitalWrite(segC, HIGH);
      digitalWrite(segD, HIGH);
      digitalWrite(segE, LOW);
      digitalWrite(segF, HIGH);
      digitalWrite(segG, HIGH);
    break;  
  
  }
}

void projekcja() { //funkcja multipleksowania i regulacji czasu
  for (int k = 0; k < 10; k++) {
    digitalWrite(wys1, HIGH);
    digitalWrite(wys2, LOW);
    wyswietlacz(j);
    delay(10);
    digitalWrite(wys1, LOW);
    digitalWrite(wys2, HIGH);
    wyswietlacz(i);
    delay(10); 
  }  
}

 

Edytowano przez Sylba
  • Lubię! 1
Link do komentarza
Share on other sites

@Sylba najszybciej w sobotę podłączę i sprawdzę, ale jak działa to działa. Jednak z@PanMajster chcę zrobić zawody. Otóż multipleksowanie 4 segmentów , a nie 2 :). Mam nadzieje , że spotkamy się w niedzielę 'W samo południe' ! Kto pierwszy nie mrugnie wyświetlaczem ten przeżyje!

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.