Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Franzis Adventskalender für Arduino – Tag 19

Posted on 19. Dezember 202214. Dezember 2022 by Stefan Draeger

In diesem Beitrag möchte ich mit dir das neunzehnte Türchen des Franzis Adventskalender für Arduino öffnen.

Franzis Adventskalender für Arduino – Tag 19
Franzis Adventskalender für Arduino – Tag 19

Wenn wir nun das Türchen öffnen, finden wir einen 20 MOhm Widerstand.

Diesen Widerstand benötigen wir heute nicht und können uns ebenso wie gestern einem anderen kleinen Projekt widmen, mit den bereits vorhandenen Bauteilen.

Steuern der Helligkeit von einzelnen LEDs per Taster & Drehpotentiometer

Wollen wir heute unseren Taster in die Schaltung einbauen und mit diesem die Helligkeit jeder einzelnen LED steuern. Der Taster dient dabei durch die LEDs zu skippen und über den Drehpotentiometer wird die Helligkeit gesteuert.

Schaltung – LEDs, Taster und Drehpotentiometer am Arduino Nano

Hier nun die Schaltung zu dem neuen Projekt:

Schaltung - Arduino Nano mit LEDs, Taster & Drehpotentiometer
Schaltung – Arduino Nano mit LEDs, Taster & Drehpotentiometer

Für diesen Aufbau benötigst du:

  • vier LEDs inkl. Vorwiderstand,
  • einen Taster inkl. 10 kOhm PullDown Widerstand,
  • ein 16 kOhm Drehpotentiometer

Der Taster ist in unserem Fall am digitalen Pin D2 angeschlossen, das ist im nachfolgenden sehr wichtig, denn wir möchten wieder den Taster über ein Interrupt verwenden.

Programmieren

In dem Programm werden wir ein neues Konstrukt verwenden, ein Mehrdimensionales-Array. Zuvor hatten wir einfache Arrays welche eine Liste repräsentieren, wo wir mit einem Index (beginnend mit 0) Elemente entnehmen können.

Ein Mehrdimensionales-Array funktioniert gleich, nur dass halt jedes Element wiederum ein Array ist. Beim Initialisieren eines solchen Arrays müssen wir jedoch einen Wert übergeben, wie groß dieses ist.

Wir sehen, dass für jeden Pin ein Wert im Array existiert, dieser Wert ist unser PWM Signal bzw. wird dafür verwendet.

// ein Mehrdimensionales-Array mit den LED Pins sowie den Werten für die Helligkeit
int leds[][2] = { { ledRot, 0 }, { ledOrange, 0 }, { ledGelb, 0 }, { ledGruen, 0 } };

Damit wir jeder LED einen anderen Wert zuordnen können, nutzen wir den Taster, um durch die LEDs zu steppen. Zunächst legen wir uns eine globale Variable an, damit wir diese aus Zugriff aus der Loop haben.

// aktueller gewählter Index, wird benötigt um eine LED aus dem Array zu wählen
int currentLEDindex = -1;

// Funktion welche ausgeführt werden soll wenn der Taster betätigt wird.
void changeLED() {
  //Wenn der Index gleich 3 ist, dann...
  if (currentLEDindex == 3) {
    //den Index auf -1 setzen
    currentLEDindex = -1;
  }
  //den Index um eins erhöhen
  currentLEDindex++;
}

void setup() {
  // hinzufuegen eines Interrupts an den digitalen Pin D2
  // die Funktion "changeLED" soll ausgeführt werden wenn
  // der Taster betätigt wird.
  attachInterrupt(digitalPinToInterrupt(taster), changeLED, RISING);
}

In der Funktion loop schreiben wir nun fortlaufend die Werte an die LEDs und lesen den Drehpotentiometer aus.

//Schleife über das Mehrdimensionale-Array
for (int i = 0; i < 4; i++) {
  //an der Position 0 befindet sich die Pinnummer,
  //an Position 1 der Wert für die Helligkeit (PWM Wert)
  analogWrite(leds[i][0], leds[i][1]);
}

Diesen gelesenen Wert schreiben wir dann an die Stelle im Mehrdimensionalen-Array mit dem aktuellen Index.

//lesen des aktuellen Wertes des Drehpotentiometers
int potiValue = analogRead(poti);
//mappen des analogen Wertes auf ein PWM Signal
int pwmValue = map(potiValue, 0, 1023, 0, 255);
//speichern des PWM Signals im Mehrdimensionalen-Arrays
//an dem aktuellen Index
leds[currentLEDindex][1] = pwmValue;

Hier nun der komplette Code zum Programm:

// rote LED am digitalen Pin D3 angeschlossen
#define ledRot 3

// orange LED am digitalen Pin D5 angeschlossen
#define ledOrange 5

// gelbe LED am digitalen Pin D6 angeschlossen
#define ledGelb 6

// gruene LED am digitalen Pin D9 angeschlossen
#define ledGruen 9

// Drehpotentiometer am analogen Pin A0 angeschlossen
#define poti A0

//Taster am digitalen Pin D2 angeschlossen
#define taster 2

// ein Mehrdimensionales-Array mit den LED Pins sowie den Werten für die Helligkeit
int leds[][2] = { { ledRot, 0 }, { ledOrange, 0 }, { ledGelb, 0 }, { ledGruen, 0 } };

// aktueller gewählter Index, wird benötigt um eine LED aus dem Array zu wählen
int currentLEDindex = -1;

// Funktion welche ausgeführt werden soll wenn der Taster betätigt wird.
void changeLED() {
  //Wenn der Index gleich 3 ist, dann...
  if (currentLEDindex == 3) {
    //den Index auf -1 setzen
    currentLEDindex = -1;
  }
  //den Index um eins erhöhen
  currentLEDindex++;
}


void setup() {
  // definieren das die Pins der LEDs als Ausgang dienen
  pinMode(ledRot, OUTPUT);
  pinMode(ledOrange, OUTPUT);
  pinMode(ledGelb, OUTPUT);
  pinMode(ledGruen, OUTPUT);

  // hinzufuegen eines Interrupts an den digitalen Pin D2
  // die Funktion "changeLED" soll ausgeführt werden wenn
  // der Taster betätigt wird.
  attachInterrupt(digitalPinToInterrupt(taster), changeLED, RISING);

  //initialisieren des Index
  changeLED();
}

void loop() {
  //Schleife über das Mehrdimensionale-Array
  for (int i = 0; i < 4; i++) {
    //an der Position 0 befindet sich die Pinnummer,
    //an Position 1 der Wert für die Helligkeit (PWM Wert)
    analogWrite(leds[i][0], leds[i][1]);
  }

  //lesen des aktuellen Wertes des Drehpotentiometers
  int potiValue = analogRead(poti);
  //mappen des analogen Wertes auf ein PWM Signal
  int pwmValue = map(potiValue, 0, 1023, 0, 255);
  //speichern des PWM Signals im Mehrdimensionalen-Arrays
  //an dem aktuellen Index
  leds[currentLEDindex][1] = pwmValue;
}

Wenn wir den Code auf dem Mikrocontroller überspielen, dann können wir wie erwähnt mit dem Taster durch die LEDs steppen und über den Drehpotentiometer die Helligkeit ändern.

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}