Zakres materiału:
- zapoznanie się z diodami RGB cyfrowymi – dokumentacja techniczna
- wykorzystanie kilku połączonych diod RGB do budowy efektów wizualnych – biblioteka FastLED
- zapoznanie się z wyświetlaczem graficznym opartym o sterownik SH1106 – dokumentacja techniczna
- wykorzystanie wyświetlacza graficznego do stworzenia ciekawego efektu
- zapoznanie z generowaniem dźwięków
Instalowanie bibliotek:
- W oprogramowaniu Arduino wybieramy “Narzędzia->Zarządzaj bibliotekami…” – wyszukujemy biblioteki do zainstalowania
- FastLED – biblioteka do diod RGB
- Adafruit_SH110x – biblioteka do wyświetlacza graficznego
Zadanie 1:
Podłączyć pierścień z diodami cyfrowymi RGB:
- pierścień DI – podłączyć do pinu D3 na płytce EduTar
- pierścień 5V – podłączyć do +5V na płytce EduTar
- pierścień GND – podłączyć do GND na płytce EduTar
Uruchomić bibliotekę FastLED – jeśli nie ma jej w arduino to należy ją doinstalować przez menadżer bibliotek (Narzędzia->Zarządzaj bibliotekami… – wyszukujemy bibliotekę FastLED i instalujemy)
Uruchomić przykładowy program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <FastLED.h> #define NUM_LEDS 5 #define DATA_PIN 3 CRGB leds[NUM_LEDS]; void setup() { FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); } void loop() { for(uint8_t i=0;i<5;i++) { leds[i] = CRGB::Green; FastLED.show(); delay(100); } for(uint8_t i=0;i<5;i++) { leds[i] = CRGB::Red; FastLED.show(); delay(100); } } |
Uruchomić wszystkie 24 diody RGB, wykonać biegający punkt w 3 kolorach.
Zadanie 2:
Zaprogramować jakiś ciekawy efekt świąteczny. Dodać do efektu zaprogramowaną melodyjkę przy wykorzystaniu funkcji tone.
Przykłady:
Zadanie 3:
Podłączyć wyświetlacz OLED do płytki EduTar:
- złącze wyświetlacza SDA – podłączyć do A4
- złącze wyświetlacza SCL – podłączyć do A5
- złącze wyświetlacza GND – podłączyć do GND
- złącze wyświetlacza VDD – podłączyć do +5V
Uruchomić bibliotekę Adafruit_SH110x – jeśli nie ma jej w arduino to należy ją doinstalować przez menadżer bibliotek (Narzędzia->Zarządzaj bibliotekami… – wyszukujemy bibliotekę Adafruit_SH110x i instalujemy)
Uruchomić przykładowy program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
#include <Wire.h> #include <Adafruit_SH110X.h> #define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // QT-PY / XIAO Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define NUMFLAKES 5 #define XPOS 0 #define YPOS 1 #define DELTAY 2 #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 static const unsigned char PROGMEM logo16_glcd_bmp[] = { B00000000, B11000000, B00000001, B11000000, B00000001, B11000000, B00000011, B11100000, B11110011, B11100000, B11111110, B11111000, B01111110, B11111111, B00110011, B10011111, B00011111, B11111100, B00001101, B01110000, B00011011, B10100000, B00111111, B11100000, B00111111, B11110000, B01111100, B11110000, B01110000, B01110000, B00000000, B00110000 }; void setup() { Serial.begin(9600); // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) display.begin(i2c_Address, true); // Address 0x3C default // init done // Clear the buffer. display.clearDisplay(); // text display tests display.setTextSize(2); display.setTextColor(SH110X_WHITE); display.setCursor(15, 5); display.println("WESOLYCH"); display.setTextColor(SH110X_BLACK, SH110X_WHITE); // 'inverted' text display.setCursor(30, 25); display.println("SWIAT"); display.display(); delay(5000); display.clearDisplay(); testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH); } void loop() { } void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) { uint8_t icons[NUMFLAKES][3]; // initialize for (uint8_t f = 0; f < NUMFLAKES; f++) { icons[f][XPOS] = random(display.width()); icons[f][YPOS] = 0; icons[f][DELTAY] = random(5) + 1; Serial.print("x: "); Serial.print(icons[f][XPOS], DEC); Serial.print(" y: "); Serial.print(icons[f][YPOS], DEC); Serial.print(" dy: "); Serial.println(icons[f][DELTAY], DEC); } while (1) { // draw each icon for (uint8_t f = 0; f < NUMFLAKES; f++) { display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SH110X_WHITE); } display.display(); delay(200); // then erase it + move it for (uint8_t f = 0; f < NUMFLAKES; f++) { display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SH110X_BLACK); // move it icons[f][YPOS] += icons[f][DELTAY]; // if its gone, reinit if (icons[f][YPOS] > display.height()) { icons[f][XPOS] = random(display.width()); icons[f][YPOS] = 0; icons[f][DELTAY] = random(5) + 1; } } } } |
Zadanie 4:
Narysować choinkę w świątecznej scenerii na wyświetlaczu OLED. Zrobić animację z płatkami śniegu.
Zadanie 5:
Połączyć wyświetlacz OLED z diodami RGB i świąteczną melodyjką.