Spis treści

Wprowadzenie

Przeczytaj

Prezentacja multimedialna

Sprawdź się

Dla nauczyciela

Arduino – wyświetlacz ośmiosegmentowy

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Przy budowie układów elektronicznych często zachodzi potrzeba wyświetlenia jakiejś informacji zwrotnej. Zazwyczaj stosujemy do tego celu wyświetlacze LCD, na przykład 2x16 (dwa wiersze po szesnaście znaków). Nie zawsze jednak musimy wyświetlać dużą ilość informacji – czasem wystarczą dosłownie jedna czy dwie cyfry. Albo cztery – jak choćby w prostym zegarku elektronicznym. Do tego celu znakomicie nadają się wyświetlacze 8-segmentowe.

Twoje cele

- Poznasz budowę 8-segmentowego wyświetlacza LED.

- Dowiesz się, jak podłączyć wyświetlacz 8-segmentowy do płytki Arduino.

- Zapoznasz się z możliwościami generowania liczb prawdziwie losowych.

Przeczytaj

Wyświetlacz 8-segmentowy

Wyświetlacz 8-segmentowy (czy też 7-segmentowy, bez znaku kropki) to tak naprawdę ułożone w specyficzny sposób diody LED. Do wyświetlania danej cyfry służą odpowiednio włączane segmenty (czyli właśnie diody) wyświetlacza. Na zdjęciach poniżej przedstawione są dwa przykładowe wyświetlacze 8-segmentowe – jednocyfrowy oraz czterocyfrowy.

Wyświetlacz jednocyfrowy

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Wyświetlacz czterocyfrowy

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Budowa wyświetlacza

Aby można było łatwo zidentyfikować poszczególne segmenty tworzące cyfrę, są one opisane literami: a, b, c, d, e, f, g, natomiast kropka – p lub dp.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Przykładowo, jeżeli chcemy wyświetlić cyfrę 1, włączamy segmenty b i c. Dla cyfry 5 włączamy segmenty a, c, d, f, g.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

W przypadku wyświetlaczy jednocyfrowych mamy do czynienia z dziesięcioma wyprowadzeniami (spodnia część wyświetlacza). Zazwyczaj pin numer 1 znajduje się z lewej strony u dołu (patrząc od przodu wyświetlacza), a ostatni pin numer 10 umieszczony jest u góry, również po lewej stronie.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Aby ograniczyć liczbę pinów, wyświetlacze 8-segmentowe zbudowane są podobnie jak diody RGB. Mówimy zatem o wyświetlaczu ze wspólną anodą lub wspólną katodą. W zależności od tego, z jakiego typu wyświetlaczem mamy do czynienia, zastosujemy odpowiednie podłączenia.

Przedstawiony tutaj wyświetlacz 8-segmentowy to wyświetlacz ze wspólną anodą. Jeżeli nie mamy dostępu do karty katalogowej danego wyświetlacza, możemy przyjąć, że większość wyświetlaczy jednocyfrowych ze wspólną anodą będzie miała taki oto schemat wyprowadzeń:

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Ze schematu możemy odczytać, że aby włączyć na przykład segment a, podłączamy plus zasilania do pinu numer 3 (anoda), zaś minus do pinu numer 7 (katoda).

Podłączenie wyświetlacza do Arduino

Wiedząc, z którego typu wyświetlaczem mamy do czynienia (wspólna anoda lub katoda), możemy narysować schemat połączeń.

Ważne!

Pamiętaj, że diody LED w wyświetlaczu muszą być podłączone do Arduino poprzez rezystory ograniczające prąd. W przeciwnym przypadku dioda (segment) ulegnie zniszczeniu. Zastosowany tutaj rezystor ma wartość 220 Ωomega, ale można też użyć większych, na przykład 1 kΩomega.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

W celu podłączenia wyświetlacza do Arduino musimy wykonać następujące kroki:

1. Najpierw wpinamy wyświetlacz w płytkę stykową tak, aby piny górne i piny dolne były wpięte w oddzielne połówki płytki.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

2. Teraz, zgodnie ze schematem, do pinu numer 7 wyświetlacza (segment a) podpinamy poprzez rezystor pin numer 1 w Arduino.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

3. Analogicznie postępujemy z kolejnymi wyprowadzeniami:

- segment b (pin 6) – rezystor – pin 2 Arduino,

- segment c (pin 4) – rezystor – pin 3 Arduino,

- segment d (pin 2) – rezystor – pin 4 Arduino,

- segment e (pin 1) – rezystor – pin 5 Arduino,

- segment f (pin 9) – rezystor – pin 6 Arduino,

- segment g (pin 10) – rezystor – pin 7 Arduino,

- segment dp (pin 5) – rezystor – pin 8 Arduino.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

4. Na koniec podpinamy anodę wyświetlacza do pinu 5 V w Arduino. Warto tutaj zaznaczyć, że zamiast podpinać na stałe zasilanie 5 V, możemy użyć dowolnego pinu cyfrowego do zasilenia wyświetlacza. Takie rozwiązanie ułatwi na przykład miganie daną cyfrą, gdyż będziemy sterować jednym pinem zasilającym, a nie każdym segmentem z osobna. Należy tutaj pamiętać o wydajności prądowej pinu cyfrowego i użyć na przykład rezystorów 1 kΩomega, aby ograniczyć prąd w przypadku cyfr, które będą wyświetlane przy użyciu dużej ilości zapalonych segmentów. Jednak najlepszym rozwiązaniem będzie podłączenie anody poprzez tranzystor i zasilanie wyświetlacza z innego źródła napięcia.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Obsługa wyświetlacza w Arduino IDE

Teraz możemy przejść do zbudowania układu, który będzie bazą działania naszego wyświetlacza. W pierwszej kolejności otwieramy nowy szkic i przed funkcją setup() definiujemy nazwy pinów. Dzięki temu łatwiej nam będzie odnaleźć się w programie i sterować wyświetlaczem.

1

#define segment_A 1

2

#define segment_B 2

3

#define segment_C 3

4

#define segment_D 4

5

#define segment_E 5

6

#define segment_F 6

7

#define segment_G 7

8

#define segment_DP 8

Pin numer 1 to pin o nazwie segment_A, pin numer 2 to pin o nazwie segment_B itd.

Następnie w funkcji setup() należy określić typ pinów, czyli zdecydować, czy będą to piny wejściowe, czy piny wyjściowe. Oczywiście ustawiamy je na piny wyjściowe.

1

#define segment_A 1

2

#define segment_B 2

3

#define segment_C 3

4

#define segment_D 4

5

#define segment_E 5

6

#define segment_F 6

7

#define segment_G 7

8

#define segment_DP 8

9

10

void setup() {

11

pinMode(segment_A, OUTPUT);

12

pinMode(segment_B, OUTPUT);

13

pinMode(segment_C, OUTPUT);

14

pinMode(segment_D, OUTPUT);

15

pinMode(segment_E, OUTPUT);

16

pinMode(segment_F, OUTPUT);

17

pinMode(segment_G, OUTPUT);

18

pinMode(segment_DP, OUTPUT);

19

}

Teraz, wiedząc, że segmenty wyświetlacza są po prostu diodami LED, możemy włączyć każdy z nich za pomocą funkcji digitalWrite(). Pamiętajmy, że korzystamy z wyświetlacza ze wspólną anodą, dlatego aby załączyć dany segment, musimy ustawić stan niski na pinie. Spróbujmy wyświetlić cyfrę 1. W pętli loop ustawiamy odpowiednie stany dla każdego segmentu. Aby wyświetlić cyfrę 1 musimy włączyć segmenty b i c, a resztę segmentów wyłączyć.

1

#define segment_A 1

2

#define segment_B 2

3

#define segment_C 3

4

#define segment_D 4

5

#define segment_E 5

6

#define segment_F 6

7

#define segment_G 7

8

#define segment_DP 8

9

10

void setup() {

11

pinMode(segment_A, OUTPUT);

12

pinMode(segment_B, OUTPUT);

13

pinMode(segment_C, OUTPUT);

14

pinMode(segment_D, OUTPUT);

15

pinMode(segment_E, OUTPUT);

16

pinMode(segment_F, OUTPUT);

17

pinMode(segment_G, OUTPUT);

18

pinMode(segment_DP, OUTPUT);

19

}

20

21

void loop() {

22

digitalWrite(segment_A, HIGH);

23

digitalWrite(segment_B, LOW);

24

digitalWrite(segment_C, LOW);

25

digitalWrite(segment_D, HIGH);

26

digitalWrite(segment_E, HIGH);

27

digitalWrite(segment_F, HIGH);

28

digitalWrite(segment_G, HIGH);

29

digitalWrite(segment_DP, HIGH);

30

}

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Analogicznie, chcąc wyświetlić na przykład cyfrę 5, włączamy odpowiednie segmenty:

1

#define segment_A 1

2

#define segment_B 2

3

#define segment_C 3

4

#define segment_D 4

5

#define segment_E 5

6

#define segment_F 6

7

#define segment_G 7

8

#define segment_DP 8

9

10

void setup() {

11

pinMode(segment_A, OUTPUT);

12

pinMode(segment_B, OUTPUT);

13

pinMode(segment_C, OUTPUT);

14

pinMode(segment_D, OUTPUT);

15

pinMode(segment_E, OUTPUT);

16

pinMode(segment_F, OUTPUT);

17

pinMode(segment_G, OUTPUT);

18

pinMode(segment_DP, OUTPUT);

19

}

20

21

void loop() {

22

digitalWrite(segment_A, LOW);

23

digitalWrite(segment_B, HIGH);

24

digitalWrite(segment_C, LOW);

25

digitalWrite(segment_D, LOW);

26

digitalWrite(segment_E, HIGH);

27

digitalWrite(segment_F, LOW);

28

digitalWrite(segment_G, LOW);

29

digitalWrite(segment_DP, HIGH);

30

}

Prosty licznik

Wykorzystując zbudowany układ, stwórzmy prosty licznik odliczający cyfry od 0 do 9.

Początek szkicu będzie identyczny z powyższym:

1

#define segment_A 1

2

#define segment_B 2

3

#define segment_C 3

4

#define segment_D 4

5

#define segment_E 5

6

#define segment_F 6

7

#define segment_G 7

8

#define segment_DP 8

9

10

void setup() {

11

pinMode(segment_A, OUTPUT);

12

pinMode(segment_B, OUTPUT);

13

pinMode(segment_C, OUTPUT);

14

pinMode(segment_D, OUTPUT);

15

pinMode(segment_E, OUTPUT);

16

pinMode(segment_F, OUTPUT);

17

pinMode(segment_G, OUTPUT);

18

pinMode(segment_DP, OUTPUT);

19

}

Następnie użyjemy pętli for w formie licznika odliczającego liczby od 0 do 9 oraz funkcji switch-case, która wyświetli nam odpowiednie cyfry.

1

#define segment_A 1

2

#define segment_B 2

3

#define segment_C 3

4

#define segment_D 4

5

#define segment_E 5

6

#define segment_F 6

7

#define segment_G 7

8

#define segment_DP 8

9

10

void setup() {

11

pinMode(segment_A, OUTPUT);

12

pinMode(segment_B, OUTPUT);

13

pinMode(segment_C, OUTPUT);

14

pinMode(segment_D, OUTPUT);

15

pinMode(segment_E, OUTPUT);

16

pinMode(segment_F, OUTPUT);

17

pinMode(segment_G, OUTPUT);

18

pinMode(segment_DP, OUTPUT);

19

}

20

21

void loop() {

22

int i = 0;

23

24

for (i = 0; i < 10; i++) {

25

switch (i) {

26

case 0:

27

digitalWrite(segment_A, LOW);

28

digitalWrite(segment_B, LOW);

29

digitalWrite(segment_C, LOW);

30

digitalWrite(segment_D, LOW);

31

digitalWrite(segment_E, LOW);

32

digitalWrite(segment_F, LOW);

33

digitalWrite(segment_G, HIGH);

34

digitalWrite(segment_DP, HIGH);

35

break;

36

case 1:

37

digitalWrite(segment_A, HIGH);

38

digitalWrite(segment_B, LOW);

39

digitalWrite(segment_C, LOW);

40

digitalWrite(segment_D, HIGH);

41

digitalWrite(segment_E, HIGH);

42

digitalWrite(segment_F, HIGH);

43

digitalWrite(segment_G, HIGH);

44

digitalWrite(segment_DP, HIGH);

45

break;

46

case 2:

47

digitalWrite(segment_A, LOW);

48

digitalWrite(segment_B, LOW);

49

digitalWrite(segment_C, HIGH);

50

digitalWrite(segment_D, LOW);

51

digitalWrite(segment_E, LOW);

52

digitalWrite(segment_F, HIGH);

53

digitalWrite(segment_G, LOW);

54

digitalWrite(segment_DP, HIGH);

55

break;

56

case 3:

57

digitalWrite(segment_A, LOW);

58

digitalWrite(segment_B, LOW);

59

digitalWrite(segment_C, LOW);

60

digitalWrite(segment_D, LOW);

61

digitalWrite(segment_E, HIGH);

62

digitalWrite(segment_F, HIGH);

63

digitalWrite(segment_G, LOW);

64

digitalWrite(segment_DP, HIGH);

65

break;

66

case 4:

67

digitalWrite(segment_A, HIGH);

68

digitalWrite(segment_B, LOW);

69

digitalWrite(segment_C, LOW);

70

digitalWrite(segment_D, HIGH);

71

digitalWrite(segment_E, HIGH);

72

digitalWrite(segment_F, LOW);

73

digitalWrite(segment_G, LOW);

74

digitalWrite(segment_DP, HIGH);

75

break;

76

case 5:

77

digitalWrite(segment_A, LOW);

78

digitalWrite(segment_B, HIGH);

79

digitalWrite(segment_C, LOW);

80

digitalWrite(segment_D, LOW);

81

digitalWrite(segment_E, HIGH);

82

digitalWrite(segment_F, LOW);

83

digitalWrite(segment_G, LOW);

84

digitalWrite(segment_DP, HIGH);

85

break;

86

case 6:

87

digitalWrite(segment_A, LOW);

88

digitalWrite(segment_B, HIGH);

89

digitalWrite(segment_C, LOW);

90

digitalWrite(segment_D, LOW);

91

digitalWrite(segment_E, LOW);

92

digitalWrite(segment_F, LOW);

93

digitalWrite(segment_G, LOW);

94

digitalWrite(segment_DP, HIGH);

95

break;

96

case 7:

97

digitalWrite(segment_A, LOW);

98

digitalWrite(segment_B, LOW);

99

digitalWrite(segment_C, LOW);

100

digitalWrite(segment_D, HIGH);

101

digitalWrite(segment_E, HIGH);

102

digitalWrite(segment_F, HIGH);

103

digitalWrite(segment_G, HIGH);

104

digitalWrite(segment_DP, HIGH);

105

break;

106

case 8:

107

digitalWrite(segment_A, LOW);

108

digitalWrite(segment_B, LOW);

109

digitalWrite(segment_C, LOW);

110

digitalWrite(segment_D, LOW);

111

digitalWrite(segment_E, LOW);

112

digitalWrite(segment_F, LOW);

113

digitalWrite(segment_G, LOW);

114

digitalWrite(segment_DP, HIGH);

115

break;

116

case 9:

117

digitalWrite(segment_A, LOW);

118

digitalWrite(segment_B, LOW);

119

digitalWrite(segment_C, LOW);

120

digitalWrite(segment_D, LOW);

121

digitalWrite(segment_E, HIGH);

122

digitalWrite(segment_F, LOW);

123

digitalWrite(segment_G, LOW);

124

digitalWrite(segment_DP, HIGH);

125

break;

126

}

127

128

delay(1000); // Poczekaj sekundę

129

}

130

}

Po włączeniu układu zmienna i będzie miała wartość 0, a za sprawą instrukcji switch-case zostaną włączone odpowiednie segmenty, które utworzą na wyświetlaczu cyfrę 0. Następnie program odczeka sekundę, po czym zmienna i przyjmie wartość 1, a instrukcja switch-case zadba o włączenie odpowiednich segmentów, aby wyświetlić cyfrę 1.

Po wgraniu szkicu do płytki Arduino efekt działania licznika powinien wyglądać następująco:

Film przedstawiający licznik wyświetlający wartości od 0 do 9

Film dostępny pod adresem /preview/resource/R1SOPIrzoJcS2Otwiera się w nowym oknie

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Film przedstawiający licznik wyświetlający wartości od 0 do 9

Tinkercad

Zróbmy symulację układu z wyświetlaczem ośmiosegmentowym, za pomocą środowiska Tinkercad.

Dodaj do głównego okna symulatora płytkę stykową.

Z listy rozwijanej Komponenty wybierz Wszystko.

Znajdź wyświetlacz ośmiosegmentowy i wstaw go na płytkę stykową.

Do każdej katody diody znajdującej się w wyświetlaczu dodaj rezystory o wartości 220 Ωomega.

Dodaj moduł Arduino Uno do okna symulacji.

Pod dodatnią szynę płytki podepnij piny 3 oraz 8 wyświetlacza oraz pin 5V Arduino. Nie zapomnij o tym by obie szyny połączyć razem.

Teraz musimy podpiąć segmenty wyświetlacza do Arduino. Jeśli nie wiesz jaki pin wyświetlacza odpowiada jakiemu segmentowi, najedź kursorem na pin a informacja z nazwą pinu pojawi się poniżej kursora.

Podepnij segmenty wyświetlacza do Arduino Uno:

- pin DP (5) wyświetlacza z pinem D8 Arduino,

- pin G (10) wyświetlacza z pinem D7 Arduino,

- pin F (9) wyświetlacza z pinem D6 Arduino,

- pin E (1) wyświetlacza z pinem D5 Arduino,

- pin D (2) wyświetlacza z pinem D4 Arduino,

- pin C (4) wyświetlacza z pinem D3 Arduino,

- pin B (6) wyświetlacza z pinem D2 Arduino,

- pin A (7) wyświetlacza z pinem D1 Arduino.

Przejdźmy teraz do pisania kodu. W tym celu klikamy na przycisk Kod, z listy rozwijanej wybieramy Tekst, potwierdzamy chęć zmiany widoku i czyścimy zawartość.

Przepisz kod licznika, dopasuj widok okna i uruchom symulację.

Film z działania programu.

Film przestawiający działanie programu.

Film dostępny pod adresem /preview/resource/RhMBmz9Lqxp0DOtwiera się w nowym oknie

Film przestawiający działanie programu.

Słownik

wyświetlacz 8-segmentowy

wyświetlacz, który składa się z ośmiu segmentów w postaci diod LED  wyświetlających cyfry dziesiętne

Prezentacja multimedialna

Polecenie 1

Zapoznaj się ze sposobem generowania liczb prawdziwie losowych, a następnie wykonaj ćwiczenie.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:15

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Do generowania liczb pseudolosowych w środowisku Arduino użyjemy funkcji random.

Linia 1. random otwórz nawias okrągły zamknij nawias okrągły średnik

1

random();

Funkcja ta może przyjąć dwa argumenty odpowiadające za przedział, z którego będzie generowana liczba.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:12

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

W zależności od potrzeb możemy użyć zapisu z jednym argumentem, np:

Linia 1. random otwórz nawias okrągły 100 zamknij nawias okrągły średnik

1

random(100);

W tym momencie funkcja zwróci wartość z zakresu 0-99.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:14

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Czasami zachodzi potrzeba ograniczenia zakresu – w takiej sytuacji dodajemy drugi argument:

Linia 1. random otwórz nawias okrągły 50 przecinek 100 zamknij nawias okrągły średnik

1

random(50, 100);

Teraz funkcja zwróci wartość z zakresu 50-99.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:17

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Sprawdźmy, jak funkcja działa w praktyce. W środowisku Arduino IDE utwórzmy nowy szkic.

Linia 1. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy Linia 2. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik Linia 3. zamknij nawias klamrowy Linia 5. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy Linia 6. Serial kropka println otwórz nawias okrągły random otwórz nawias okrągły 100 zamknij nawias okrągły zamknij nawias okrągły średnik Linia 7. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik Linia 8. zamknij nawias klamrowy

1

void setup() {

2

Serial.begin(9600);

3

}

4

5

void loop() {

6

Serial.println(random(100));

7

delay(1000);

8

}

Jest to prosty kod, którego zadaniem jest wyświetlanie w monitorze portu szeregowego losowej liczby z zakresu 0-99.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:07

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Efektem działania kodu jest ciąg losowych liczb z zakresu 0-99.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:15

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Niestety, losowość tych liczb jest pseudolosowa, ponieważ mikrokontroler działa bardzo precyzyjnie i tak naprawdę nie losuje tych liczb, tylko wykonuje określone operacje na poprzednio wylosowanych liczbach.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:14

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Uruchommy program kilka razy i sprawdźmy, co się wydarzy. Tak jak mogliśmy się spodziewać, kilkukrotne uruchamianie tego samego kodu daje nam dokładnie ten sam ciąg liczb pseudolosowych.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:18

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Dzieje się tak, ponieważ „losowanie” zaczyna się zawsze od tej samej liczby. Na szczęście jest na to sposób – musimy zastosować funkcję randomSeed(), która będzie odpowiedzialna za pierwszą liczbę, czyli za tzw. ziarno/zarodek.

- Zróbmy symulację za pomocą środowiska Tinkercad.

Dodaj do głównego okna moduł Arduino Uno.

- Przejdźmy teraz do pisania kodu. W tym celu klikamy na przycisk Kod, z listy rozwijanej wybieramy Tekst, potwierdzamy chęć zmiany widoku i czyścimy zawartość.

Przepisz kod, uruchom Konsolę szeregową oraz symulację.

- Nagranie filmowe

Film z działania programu.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:19

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Funkcja randomSeed() przyjmuje jeden parametr, czyli właśnie tę naszą liczbę początkową. Przy czym, jeżeli wpiszemy jako argument tej funkcji stałą liczbę, np: 10, to przy kolejnych uruchomieniach programu znów otrzymamy te same ciągi liczb.

Linia 1. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy Linia 2. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik Linia 3. randomSeed otwórz nawias okrągły 10 zamknij nawias okrągły średnik Linia 4. zamknij nawias klamrowy Linia 6. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy Linia 7. Serial kropka println otwórz nawias okrągły random otwórz nawias okrągły 100 zamknij nawias okrągły zamknij nawias okrągły średnik Linia 8. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik Linia 9. zamknij nawias klamrowy

1

void setup() {

2

Serial.begin(9600);

3

randomSeed(10);

4

}

5

6

void loop() {

7

Serial.println(random(100));

8

delay(1000);

9

}

- Nagranie filmowe

Nie musimy robić nowego podłączenia.

Wystarczy zmodyfikować kod i uruchomić symulację.

Film z działania programu.

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:41

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

I tutaj powstaje problem, ponieważ żeby wylosować liczby prawdziwie losowe, musimy podać na wstępie liczbę prawdziwie losową. Na szczęście w Arduino możemy w łatwy sposób pozyskać taką losową liczbę, której możemy użyć jako zarodka. Wykorzystamy do tego jeden z nieużywanych pinów analogowych. Wystarczy, że argumentem funkcji randomSeed() będzie wartość przechwycona z pinu analogowego. Dzieje się tak, ponieważ nieużywany pin analogowy zbiera „śmieci” z otoczenia i odczytana wartość praktycznie nigdy nie będzie równa 0, tylko ta liczba będzie się losowo zmieniać.

Linia 1. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy Linia 2. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik Linia 3. randomSeed otwórz nawias okrągły analogRead otwórz nawias okrągły 0 zamknij nawias okrągły zamknij nawias okrągły średnik Linia 4. zamknij nawias klamrowy Linia 6. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy Linia 7. Serial kropka println otwórz nawias okrągły random otwórz nawias okrągły 100 zamknij nawias okrągły zamknij nawias okrągły średnik Linia 8. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik Linia 9. zamknij nawias klamrowy

1

void setup() {

2

Serial.begin(9600);

3

randomSeed(analogRead(0));

4

}

5

6

void loop() {

7

Serial.println(random(100));

8

delay(1000);

9

}

- Nagranie głosowe

play_circle_outlineOdtwórz/Zatrzymaj  00:00

Szukaj

00:08

volume_upWycisz dźwięk

Głośność

Materiał audio dostępny pod adresem:

file:///tmp/puppeteeruYi5UM.html

Teraz po uruchomieniu programu za każdym razem będziemy otrzymywać inny ciąg liczb prawdziwie losowych.

- Nagranie filmowe

W tym przypadku również nie musimy modyfikować układu, wystarczy zmienić kod.

Film z działania programu.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Polecenie 2

Zbuduj cyfrową kostkę do gry.

Pokaż rozwiązanie

Sprawdź się

Pokaż ćwiczenia:

Ćwiczenie 1

Wskaż, ile segmentów trzeba włączyć w wyświetlaczu 8-segmentowym, aby wyświetlić cyfrę 2.

Zaznacz prawidłową odpowiedź.

- 6

- 5

- 4

Ćwiczenie 2

Dokończ zdanie:

Segmenty na wyświetlaczu 8–segmentowym są opisane za pomocą…

Zaznacz prawidłową odpowiedź.

- cyfr rzymskich

- liter

- cyfr arabskich

Ćwiczenie 3

Korzystając z zaproponowanych poniżej elementów, uzupełnij kod tak, aby pin segment_Asegment podkreślnik A był pinem wyjściowym.

pinMode(pinMode otwórz nawias okrągły    , przecinek    ); zamknij nawias okrągły średnik

LOWLOW     segment_Asegment podkreślnik A     HIGHHIGH     INPUTINPUT     OUTPUTOUTPUT

Ćwiczenie 4

Wskaż, co wspólnego mogą mieć różne wyświetlacze 8-segmentowe.

Zaznacz prawidłowe odpowiedzi.

- nóżkę odpowiedzialną za wyświetlenie kropki i segmentu a

- katodę

- anodę

- nóżkę odpowiedzialną za wyświetlenie kropki i segmentu d

Ćwiczenie 5

Opisz budowę wyświetlacza 8 segmentowego.

Wskaż segment a na wyświetlaczu.

Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Ćwiczenie 6

Korzystając z zaproponowanych poniżej elementów, uzupełnij funkcję random()random otwórz nawias okrągły zamknij nawias okrągły tak, aby losowane liczby należały do przedziału 20-100.

(random( otwórz nawias okrągły random otwórz nawias okrągły    , przecinek    )); zamknij nawias okrągły zamknij nawias okrągły średnik

101101     102102     2121     9999     100100     2020

Ćwiczenie 7

Dokończ zdanie:

W przypadku dużej liczby warunków zamiast instrukcji warunkowej ifif możemy użyć…

Zaznacz prawidłową odpowiedź.

- funkcji random()random otwórz nawias okrągły zamknij nawias okrągły

- instrukcji switch-caseswitch minus case

- pętli forfor

Ćwiczenie 8

Wskaż, której funkcji należy użyć, aby ustawić tzw. ziarno w przypadku funkcji random()random otwórz nawias okrągły zamknij nawias okrągły .

Zaznacz prawidłową odpowiedź.

- Serial.println(random(100));Serial kropka println otwórz nawias okrągły random otwórz nawias okrągły 100 zamknij nawias okrągły zamknij nawias okrągły średnik

- Serial.begin(9600);Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik

- randomSeed();randomSeed otwórz nawias okrągły zamknij nawias okrągły średnik

- delay(1000);delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik

Dla nauczyciela

Autor: Dawid Mazur

Przedmiot: Informatyka

Temat: Arduino – wyświetlacz ośmiosegmentowy

Grupa docelowa:

Szkoła ponadpodstawowa, liceum ogólnokształcące, technikum

Podstawa programowa:

Treści nauczania – wymagania szczegółowe

I. Rozumienie, analizowanie i rozwiązywanie problemów.

Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

1) w zależności od problemu rozwiązuje go, stosując metodę wstępującą lub zstępującą;

2) do realizacji rozwiązania problemu dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych;

II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych.

Zakres podstawowy. Uczeń:

1) projektuje i programuje rozwiązania problemów z różnych dziedzin, stosuje przy tym: instrukcje wejścia/wyjścia, wyrażenia arytmetyczne i logiczne, instrukcje warunkowe, instrukcje iteracyjne, funkcje z parametrami i bez parametrów, testuje poprawność programów dla różnych danych; w szczególności programuje algorytmy z punktu I.2);

2) do realizacji rozwiązań problemów prawidłowo dobiera środowiska informatyczne, aplikacje oraz zasoby, wykorzystuje również elementy robotyki;

Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

1) projektuje i tworzy rozbudowane programy w procesie rozwiązywania problemów, wykorzystuje w programach dobrane do algorytmów struktury danych, w tym struktury dynamiczne i korzysta z dostępnych bibliotek dla tych struktur;

2) stosuje zasady programowania strukturalnego i obiektowego w rozwiązywaniu problemów;

3) sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów;

4) przygotowując opracowania rozwiązań złożonych problemów, posługuje się wybranymi aplikacjami w stopniu zaawansowanym:

a) tworzy i edytuje dwuwymiarowe oraz trójwymiarowe wizualizacje i animacje, stosuje właściwe formaty plików graficznych,

b) uczestniczy w opracowaniu dokumentacji projektu zespołowego, pracując przy tym w odpowiednim środowisku,

IV. Rozwijanie kompetencji społecznych.

Zakres podstawowy. Uczeń:

1) aktywnie uczestniczy w realizacji projektów informatycznych rozwiązujących problemy z różnych dziedzin, przyjmuje przy tym różne role w zespole realizującym projekt i prezentuje efekty wspólnej pracy;

6) poszerza i uzupełnia swoją wiedzę korzystając z zasobów udostępnionych na platformach do e-nauczania.

Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

1) przy realizacji zespołowego projektu programistycznego posługuje się środowiskiem przeznaczonym do współpracy i realizacji projektów zespołowych, w tym środowiskiem w chmurze; współtworzy zasoby udostępniane na platformach do e-nauczania;

V. Przestrzeganie prawa i zasad bezpieczeństwa.

Zakres podstawowy. Uczeń:

1) postępuje zgodnie z zasadami netykiety oraz regulacjami prawnymi dotyczącymi: ochrony danych osobowych, ochrony informacji oraz prawa autorskiego i ochrony własności intelektualnej w dostępie do informacji; jest świadomy konsekwencji łamania tych zasad;

2) respektuje obowiązujące prawo i normy etyczne dotyczące korzystania i rozpowszechniania oprogramowania komputerowego, aplikacji cudzych i własnych oraz dokumentów elektronicznych;

3) stosuje dobre praktyki w zakresie ochrony informacji wrażliwych (np. hasła, pin), danych i bezpieczeństwa systemu operacyjnego, objaśnia rolę szyfrowania informacji;

Kształtowane kompetencje kluczowe:

- kompetencje cyfrowe;

- kompetencje osobiste, społeczne i w zakresie umiejętności uczenia się;

- kompetencje matematyczne oraz kompetencje w zakresie nauk przyrodniczych, technologii i inżynierii.

Cele operacyjne (językiem ucznia):

- Poznasz budowę 8-segmentowego wyświetlacza LED.

- Dowiesz się, jak podłączyć wyświetlacz 8-segmentowy do płytki Arduino.

- Zapoznasz się z możliwościami generowania liczb prawdziwie losowych.

Strategie nauczania:

- konstruktywizm;

- konektywizm.

Metody i techniki nauczania:

- dyskusja;

- rozmowa nauczająca z wykorzystaniem multimedium i ćwiczeń interaktywnych;

- ćwiczenia praktyczne.

Formy pracy:

- praca indywidualna;

- praca w parach;

- praca w grupach;

- praca całego zespołu klasowego.

Środki dydaktyczne:

- komputery z głośnikami, słuchawkami i dostępem do internetu;

- zasoby multimedialne zawarte w e-materiale;

- tablica interaktywna/tablica, pisak/kreda.

Przebieg lekcji

Przed lekcją:

1. Przygotowanie do zajęć. Nauczyciel loguje się na platformie i udostępnia e-materiał: „Arduino – wyświetlacz ośmiosegmentowy”. Uczniowie zapoznają się z treściami w sekcji „Przeczytaj”.

Faza wstępna:

1. Prowadzący prosi uczniów, aby zgłaszali swoje propozycje pytań do tematu. Jedna osoba może zapisywać je na tablicy. Gdy uczniowie wyczerpią swoje pomysły, a pozostały jakieś ważne kwestie do poruszenia, nauczyciel je dopowiada.

Faza realizacyjna:

1. Uczniowie analizują przykład z sekcji „Przeczytaj” i powtarzają zaprezentowane rozwiązanie na swoim komputerze.

2. Praca z multimedium. Nauczyciel wyświetla zawartość sekcji „Prezentacja multimedialna”, czyta treść polecenia nr 1 „Zapoznaj się ze sposobem generowania liczb prawdziwie losowych, a następnie zbuduj cyfrową kostkę do gry.” i omawia kolejne kroki rozwiązania.

3. Ćwiczenie umiejętności. Uczniowie wykonują indywidualnie ćwiczenia nr 1-8. Po wykonaniu każdego z nich następuje omówienie rozwiązania przez nauczyciela.

Faza podsumowująca:

1. Nauczyciel ponownie wyświetla na tablicy temat i cele lekcji zawarte w sekcji „Wprowadzenie”. W kontekście ich realizacji następuje omówienie ewentualnych problemów z rozwiązaniem ćwiczeń z sekcji „Sprawdź się”.

2. Wybrany uczeń podsumowuje zajęcia, zwracając uwagę na nabyte umiejętności.

Praca domowa:

1. Uczniowie opracowują FAQ (minimum 3 pytania i odpowiedzi) do tematu lekcji („Arduino – wyświetlacz ośmiosegmentowy”).

Materiały pomocnicze:

- Oficjalna dokumentacja techniczna dla projektu Arduino.

Wskazówki metodyczne:

- Nauczyciel może wykorzystać multimedium w sekcji „Prezentacja multimedialna” do pracy przed lekcją. Uczniowie zapoznają się z jego treścią i przygotowują do pracy na zajęciach w ten sposób, żeby móc samodzielnie rozwiązać zadania dołączone do e-materiału „Arduino – wyświetlacz ośmiosegmentowy”.

Table of Contents

Wprowadzenie

Przeczytaj

Prezentacja multimedialna

Sprawdź się

Dla nauczyciela