Arduino NANO:    Taster-LED Pulsweitenmodulation PWM
 

 
Schaltungsdiagramm für den Anschluss eines Tasters und einer LED am NANO-Board
 
Die Anschlußpins für den Taster (Schalter) und die LED wurden willkürlich gewählt. Als LED wurde eine Low Power LED angenommen, die bei einem Strom von 2mA bereits hell leuchtet. Eine normale LED würde dies bei 20mA tun. In diesem Fall sollte der Vorwiderstand einen Wert von ca.220 Ohm besitzen.
Tore die pulsweitenmodulierte-Signale ausgeben können sind .. D3, D5, D6 und D9, D10, D11
 
Das vorliegende Programm bewirkt nach einem Druck auf den Taster zunächst ein heller werden der LED, dann folgt nach einer kurzen Pause wiederum deren Verdunkelung. Wann der Maximal- bzw der Minimalwert der Erleuchtung bzw. der Verdunkelung der LED erreicht wurde, kann im seriellen Ausgabefenster der Entwicklungsumgebung gesehen werden. Zwischen beiden Aktionen ist im Programm eine Wartezeit von (1s) eingefügt.
Bei der angegebenen Wirkdauer der 1-Signale von (16ms) dauern Erleuchtung und Verdunkelung etwa 4s.
 

Programm Pulsweitenmodulation PWM
/*
Test einer Pulsweiten-Modulation PWM am Eingangspin 11
------------------------------------------------------
Die Frequenz der Pulsweitenmodulation beim Arduino soll etwa 500Hz betragen. Innerhalb dieses Zeitraums
können 1-Siglale zwischen 0 und 100% der Pulslänge generiert werden. Dies geschieht durch Werte der Programmierung zwischen 0 und 255. Dem entsprechen wird bei dem Wert 128 die Hälfte der Gesamtzeit ein 0-Signal und die zweite Hälfe ein 1-Signal aus dem PWM-Pin heraustreten. Bei dem Wert 255 dauert das 1-Signal 100% der Pulszeit.

Das Programm lässt mit diesen 1-Signalen eine LED heller oder dunkler leuchten, wobei ein Taster die
Veränderung der Pulslänge bewirkt. Die Dauer die ein bestimmter Pulswert andauern kann, wird durch eine delay()-Funktion bestimmt.
*/

// Definition der benutzten Tore
int LED = 11;                               // Tor an dem die LED angeschlossen ist
int TASTER = 14;                            // Tor an dem der Taster angeschlossen ist.
 
// Startbedingungen des Programms einstellen
// -----------------------------------------
void setup(){
   Serial.begin (9600);
   Serial.println ("Programm wurde gestartet");
   pinMode (TASTER, INPUT);                          // Eingangstor des Tasters
}
 
 
// dauerhafte Schleife in welcher der Taster abgefragt wird
// --------------------------------------------------------
void loop (){
   if (digitalRead (TASTER) == HIGH) loopLED();      // Aufruf des Unterprogramms LED schalten
}
 
// Schleife in der die Helligkeit der LED gesetzt wird
// ---------------------------------------------------
void loopLED(){
   static byte up = 1;
   static byte  i = 0;
 
   if(up == 1){
      analogWrite (LED, i++);               // PWM Pulsdauer vergrößern
      if(i == 255){
         up = 0;                            // von nun an den Wert i verkleinern
         Serial.print (i);
         Serial.println (" = MAX Wert, warte 1s");
         delay (1000);                      // Wartezeit nach Erreichen des MAX-Wertes
      }
   }
   if(up == 0){
      analogWrite (LED, i--);               // PWM Pulsdauer vermindern
      if(i == 0){
         up = 1;                            // von nun an den Wert i vergrößern
         Serial.print (i);
         Serial.println (" = MIN Wert, warte 1s");
         delay (1000);                      // Wartezeit nach Erreichen des MIN-Wertes
      }
   }
   delay(16);                               // bestimmt die Zeitdauer, die ein PWM 1-Signal andauern kann
}