Arduino Nano - Button Count - OLED

Deze tutorial legt uit hoe u de Arduino Nano samen met een knop gebruikt om het aantal keer dat de knop wordt ingedrukt te tellen en deze waarde vervolgens op een OLED-display weer te geven. In detail:

In deze tutorial zullen we het effect van het ‘debouncen’ van de knop behandelen zonder gebruik te maken van de delay() functie. Voor meer informatie, zie Waarom is debouncing nodig?

U kunt dit aanpassen om te werken met verschillende sensoren in plaats van de knop.

Over OLED en Knop

Als u niet vertrouwd bent met OLED en knop (pinout, functionaliteit, programmering, enz.), kunnen onderstaande tutorials u helpen:

Aansluitschema

Arduino Nano Knop OLED aansluitdiagram

This image is created using Fritzing. Click to enlarge image

Arduino Nano Code - knopentelling weergeven op OLED

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-button-count-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ezButton.h> #define OLED_WIDTH 128 // OLED display width, in pixels #define OLED_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C ezButton button(2); // create ezButton object for pin D2 unsigned long prev_count = 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 (prev_count != count) { Serial.println(count); // print count to Serial Monitor oled.clearDisplay(); // clear display oled.println(count); // display count oled.display(); // show on OLED prev_count != count; } }

Snelle stappen

  • Klik op het Libraries icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek naar “ezButton” en vind de button bibliotheek van ArduinoGetStarted.
  • Druk op de Install knop om de ezButton bibliotheek te installeren.
Arduino Nano knop bibliotheek
  • Zoek naar “SSD1306” en vind de SSD1306 bibliotheek van Adafruit.
  • Druk vervolgens op de Install knop om de installatie te voltooien.
Arduino Nano OLED bibliotheek
  • U krijgt een melding om aanvullende bibliotheek-afhankelijkheden te installeren.
  • Om ze allemaal te installeren, klikt u op de Install All knop.
Arduino Nano Adafruit GFX bibliotheek
  • Kopieer de code en open deze in de Arduino IDE.
  • Druk dan op de Upload knop om de code naar de Arduino Nano te laden.
  • Druk daarna meerdere keren op de knop.
  • Kijk vervolgens naar het veranderende aantal op het OLED-display.

De bovenstaande code toont het aantal knopdrukken linksboven op het scherm. Laten we dit veranderen zodat het in het midden verschijnt!

Arduino Nano Code - Verticaal en Horizontaal Centreren op OLED

/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-button-count-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ezButton.h> #define OLED_WIDTH 128 // OLED display width, in pixels #define OLED_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C ezButton button(2); // create ezButton object for pin D2 unsigned long prev_count = 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 (prev_count != count) { Serial.println(count); // print count to Serial Monitor String text = String(count); oled_display_center(text); prev_count != count; } } void oled_display_center(String text) { int16_t x1; int16_t y1; uint16_t width; uint16_t height; oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // center the display both horizontally and vertically oled.clearDisplay(); // clear display oled.setCursor((OLED_WIDTH - width) / 2, (OLED_HEIGHT - height) / 2); oled.println(text); // text to display oled.display(); }

※ Notiz:

De code hieronder centreert de tekst zowel horizontaal als verticaal op een OLED-display. Voor meer informatie, zie Hoe verticaal/horizontaal centreren op OLED.

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.

※ 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!