Skocz do zawartości

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


Pomocna odpowiedź

Witam, mam kolejne pytanie. Czy przy podłączeniu kilku wyświetlaczy 7-segmentowych przez ekspandery PCF8574, da się nimi sterować przy użyciu biblioteki SevSeg lub innej? Podłączyłem wyświetlacze 3-cyfrowe FJ5361BH w ten sposób, że diody są podłączone do wyprowadzeń ekspanderów, a anody są sterowane z pinów w Arduino. Nie wiem, czy takie podłączenie jest zgodne ze sztuką, ale nigdzie nie znalazłem przykładów pokazujących, jak to zrobić. Ręcznie sterować się tym da, ale są pewne dziwne zachowania takiego układu, których nie rozumiem. Kiedy pierwsza cyfra coś wyświetla, to pozostałe cyfry świecą dużo słabiej, kiedy pierwsza jest wyłączona pozostałe dwie świecą normalnie.

 

Link to post
Share on other sites

@szeryf w takim przypadku musisz wykorzystać bibliotekę do wyświetlaczy 7-segmentowych, która potrafi współpracować z wyświetlaczami podłączonymi przez ekspander. Nie każda biblioteka do wyświetlaczy będzie miała taką możliwość 🙂

  • Lubię! 1
Link to post
Share on other sites

Moje rozwiązanie zadania 6.3

#define SEG_C 2
#define SEG_E 3
#define SEG_D 4
#define SEG_B 5
#define SEG_G 6
#define SEG_A 7
#define SEG_F 8
#define W1 9
#define W2 10

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

  pinMode (W1, OUTPUT);
  pinMode (W2, OUTPUT);
}

void loop() {
  int i = 0;
  int j;
  int y = 0;
  for (i = 0; i < 100; i++) {
    y = 0;
    do {
      digitalWrite(W1, HIGH); //Włącz pierwszy wyświetlacz
      digitalWrite(W2, LOW); //Wyłącz drugi
      wyswietlacz(i / 10); //Wyswietl wartosc na wyswietlaczu
      delay(10);
      digitalWrite(W1, LOW); //Wyłącz pierwszy wyświetlacz
      digitalWrite(W2, HIGH); //Włącz drugi
      j = i - (i / 10) * 10;
      wyswietlacz(j); //Wyswietl wartosc na wyswietlaczu
      delay(10);
      y++;
    } while (y < 20);
  }
}

void wyswietlacz(int cyfra) {
  //Instrukcja switch ustawia odpowiednie stany na wyjsciach
  //w zaleznosci od podanej cyfry
  switch (cyfra) {
    case 0:
      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, LOW);
      break;

    case 1:
      digitalWrite(SEG_A, LOW);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, LOW);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, LOW);
      break;

    case 2:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, LOW);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, HIGH);
      break;

    case 3:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, HIGH);
      break;

    case 4:
      digitalWrite(SEG_A, LOW);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, LOW);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
      break;

    case 5:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, LOW);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
      break;

    case 6:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, LOW);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
      break;

    case 7:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, LOW);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, LOW);
      break;

    case 8:
      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 9:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
      break;

    default:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, LOW);
      digitalWrite(SEG_C, LOW);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, HIGH);

      break;
  }
}

 

Sugestie mile widziane.

  • Lubię! 1
Link to post
Share on other sites

@galism Ciekawy sposób rozwiązania zadania 🙂 a mógłbyś w ramach zadania z gwiazdką 🌟spróbować pozbyć się tego opóźnienia i pętli o 20 iteracjach ze zmienną y? Z tego co rozumiem służy ona zapewnieniu opóźnienia bez zacinania programu i tu zgodzę się dobra idea! 🙂 Ale jakby tak zrobić, że program odświeża wyświetlacz z zadaną częstotliwością? Coś jak FPS w grach. Spróbuj 😉 

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.