Lösung: LED PWM IV

Sketch: Quelltext

// Variablen
int Helligkeit=0;   // Helligkeit in 10 Stufen
int pwm_wert=0;     // PWM-Wert für analogWrite()
float strom = 0;    // Mittlere Stromstärke

void setup() {
  pinMode(8, INPUT_PULLUP);   // + Taster
  pinMode(7, INPUT_PULLUP);   // - Taster
  pinMode(9, OUTPUT);         // interne LED
  digitalWrite(9, LOW);       // interne LED aus

  // ***** serielle Schnittstelle initialisieren *****
  Serial.begin(9600);
  while(!Serial) {}
}

void loop() {
  // ***** Tastaturabfrage *****
  if (digitalRead(8)==LOW){
    if (Helligkeit < 10) {
      Helligkeit = Helligkeit + 1;

      // ***** PWM Berechnung *****
      pwm_wert = (255*Helligkeit)/10;
      analogWrite(9, pwm_wert);
      // ***** PWM Ende *****
      
      delay(200);                 // Tasten entprellen
                                  //  Auf Messergebnis warten
      strom = analogRead(0);
      strom = strom*5/1024;
      strom = strom*1000/150;        // Berechnung Stromstärke in mA
      
      // ***** serielle Ausgabe
      Serial.println("Tastverhältnis " + String(Helligkeit*10) + " %");
      Serial.println("Mittlere Stromstärke " + String(strom) + " mA");
      
    }
  }
  if (digitalRead(7)==LOW){
    if (Helligkeit > 0) {
      Helligkeit = Helligkeit - 1;

      // ***** PWM Berechnung *****
      pwm_wert = (255*Helligkeit)/10;
      analogWrite(9, pwm_wert);
      // ***** PWM Ende *****
      
      delay(200);                 // Tasten entprellen
                                  //  Auf Messergebnis warten
      strom = analogRead(0);
      strom = strom*5/1024;
      strom = strom*1000/150;        // Berechnung Stromstärke in mA
      
      // ***** serielle Ausgabe
      Serial.println("Tastverhältnis " + String(Helligkeit*10) + " %");
      Serial.println("Mittlere Stromstärke " + String(strom) + " mA");
    }
  }
}

Quelltext a: Serielle Ausgabe nach jeder Änderung von Helligkeit.

Sketch: Erklärung

Die Berechnung der PWM-Ausgabe und der Stromstärke erfolgt nach jeder Änderung der Variablen Helligkeit.

Variablen

Die globale Variable Helligkeit wird als int (Integer) definiert und mit 0 initialisiert.

Die globale Variable pwm_wert wird als int (Integer) definiert und mit 0 initialisiert.

Die globale Variable strom wird als float (Fließkommazahl) definiert und mit 0 initialisiert.

Setup

Pin 8 und Pin 7 werden als INPUT_PULLUP definiert.

Pin 9 (externe LED mit Vorwiderstand) als OUTPUT.
Die interne LED wird ausgeschaltet.

Die Serielle Schnittstelle wird initialisiert mit 9600 Baud.

Loop

Der Loop-Teil wurde basierend auf dem Sketch LED PWM III modifiziert.

Zunächst wird pwm-wert berechnet und an Pin 9 ausgegeben.

Die Wartezeit von 200 ms dient dazu, dass sich der Messwert einschwingen und stabilisieren kann.

Nachdem sich der Messwert stabilisiert hat, wird er über den A/D-Wandler mit dem Befehl analogRead() am Pin A0 eingelesen.

Die Stromstärke wird in zwei Schritten berechnet und über die serielle Schnittstelle ausgegeben.

Schaltplan / Layout

Schaltplan

Elektronik / Hardware

Man muss darauf achten, den Taster richtig anzuschließen, ggf. muss man vorher mit einem Durchgangsprüfer die Pinbelegung des Tasters prüfen.

Da Pin 8 und Pin 9 low-active sind, müssen die Taster mit GND verbunden werden.

Die LED muss mit einem passenden Vorwiderstand in Reihe geschaltet werden.
Andernfalls können die LED oder das Arduino-Board beschädigt oder zerstört werden.

Wichtig ist auch die Glättung des PWM-Signals mit einem RC-Tiefpass, damit die Messwerte stabil bleiben.