Um ein PWM Signal mit einem Arduino-Board auszulesen benötigen wir ein Empfänger der das Signal bereit stellt, ein Arduino Board das mit dem Empfänger verbunden wird und etwas Software die wir
selbst schreiben werden.
Wichtig ist, das dass Arduino Board und der Empfänger sich die Erdung (-) teilen. Ansonsten wird das Signal nicht korrekt verarbeitet.
Zusätzlich benötigen wir die Library RCReceive.
#include "makros.h" #include "RCReceive.h" RCReceive rcReceiver; byte RC_IN = 11; //PB3
Hier legen wir fest, das die Signalleitung mit dem Pin 11 des Arduino verbunden wird.
Im Setup wird die RCReceive Library initialisiert mit dem Pin der Signalleitung.
void setup() { rcReceiver.attach(RC_IN); }
Im Anschluß wird dann im Loop das Signal gelesen und ggfl. weiterverarbeitet.
In dem Folgenden Beispiel wird ein 3-Stufiger Schalter abgeprüft.
void loop() { rcReceiver.poll(); if (rcReceiver.hasNP() && !rcReceiver.hasError()) { int pwm_time = rcReceiver.getMsValue(); /* Schalter steht auf oberer Stellung +100% */ if ( pwm_time < 2000 && pwm_time > 1800 ) { // Etwas tun } else /* Schalter steht auf Mittelstellung */ if ( pwm_time >= 1400 && pwm_time < 1600) { // Etwas tun } else /* Schalter steht auf unterer Stellung. -100% */ if ( pwm_time >= 1000 && pwm_time < 1200 ) { //Etwas tun } } else if (rcReceiver.hasError()) { // Fehlerbehandlung failsafe oder sowas... } }
Das ganze kann man natürlich auch mit dynamischen Gebern programmieren.
Ich hoffe damit etwas Licht ins Dunkle der PWM-Signalverarbeitung mit Arduino gebracht zu haben.