Arduino - Knop Tellen - OLED

In deze handleiding gaan we met Arduino het volgende doen:

In deze tutorial wordt de knop ook gedebounced zonder gebruik te maken van de delay() functie. Zie Waarom hebben we debouncing nodig?

Over OLED en Knop

Als u nog niet bekend bent met OLED en knoppen (pinout, werking, programmeren ...), leer er meer over in de volgende tutorials:

Bedradingsschema

Arduino Knop OLED Bedradingsschema

This image is created using Fritzing. Click to enlarge image

Arduino Code - knop telling weergeven op OLED

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-button-count-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ezButton.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C ezButton button(7); // create ezButton object that attach to pin 7; unsigned long lastCount = 0; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(2); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display button.setDebounceTime(50); // set debounce time to 50 milliseconds button.setCountMode(COUNT_FALLING); } void loop() { button.loop(); // MUST call the loop() function first unsigned long count = button.getCount(); if (lastCount != count) { Serial.println(count); // print count to Serial Monitor oled.clearDisplay(); // clear display oled.println(count); // display count oled.display(); // show on OLED lastCount != count; } }

Snelle Stappen

  • Navigeer naar het Bibliotheken-icoon in de linker zijbalk van de Arduino IDE.
  • Zoek op “ezButton”, en vind de button library door ArduinoGetStarted
  • Klik op de Installeren-knop om de ezButton bibliotheek te installeren.
Arduino knopbibliotheek
  • Zoek op “SSD1306”, en vind de SSD1306 bibliotheek van Adafruit
  • Klik op de Installeren-knop om deze bibliotheek te installeren.
Arduino OLED bibliotheek
  • Er wordt gevraagd enkele afhankelijkheden (andere bibliotheken) te installeren
  • Klik op Alles Installeren om alle afhankelijkheden te installeren.
Arduino Adafruit GFX sensor bibliotheek
  • Kopieer bovenstaande code en open deze met de Arduino IDE
  • Klik op de Uploaden-knop in Arduino IDE om de code naar de Arduino te uploaden
  • Druk meerdere keren op de knop
  • Zie het aantal keer drukken veranderen op het OLED-display

De bovenstaande code toont het aantal drukken linksboven op het scherm. Laten we de code aanpassen om het gecentreerd weer te geven!

Arduino Code - Verticaal en Horizontaal Centreren op OLED

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-button-count-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ezButton.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C ezButton button(7); // create ezButton object that attach to pin 7; unsigned long lastCount = 0; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(2); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display button.setDebounceTime(50); // set debounce time to 50 milliseconds button.setCountMode(COUNT_FALLING); } void loop() { button.loop(); // MUST call the loop() function first unsigned long count = button.getCount(); if (lastCount != count) { Serial.println(count); // print count to Serial Monitor String text = String(count); oledDisplayCenter(text); lastCount != count; } } void oledDisplayCenter(String text) { int16_t x1; int16_t y1; uint16_t width; uint16_t height; oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // display on horizontal and vertical center oled.clearDisplay(); // clear display oled.setCursor((SCREEN_WIDTH - width) / 2, (SCREEN_HEIGHT - height) / 2); oled.println(text); // text to display oled.display(); }

※ Notiz:

De bovenstaande code centreert automatisch de tekst horizontaal en verticaal op het OLED-display. Zie Hoe centreer ik verticaal/horizontaal op OLED voor meer details.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap voor stap door het proces.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!