PWM Signal generieren und auslesen

Nach dem wir zu Anfang des Projektes schon eine Software entwickelt haben die ein PWM Signal erzeugen kann, bauen wir uns nun einen Arduino der PWM Signale auswerten kann.
Ich benutze hierzu die Arduino IDE 1.8.2 und hab mir dazu folgendes Programm überlegt.

/*
 Name:		2 Channel FrequencyReader
 Created:	14.06.2017 23:21:12
 Author:	Ralf Bohnen - www.Arduinoclub.de
 This example code is in the public domain.
*/
#define pin1 11
#define pin2 13

unsigned long freqInPin1High, 
              freqInPin2High, 
              freqHighOldPin1,
              freqInPin1Low, 
              freqInPin2Low, 
              freqHighOldPin2;
bool skipFirst = true;

void setup() {
    Serial.begin(115200);
    delay(500);
    Serial.println(F("\nSimple Frequency Reader max 25000Hz"));
    Serial.println(F("-------------------------------------------"));

    pinMode(pin1, INPUT_PULLUP);
    pinMode(pin2, INPUT_PULLUP);
}

void loop() {
    if (!skipFirst) {
        freqInPin1High = pulseInLong(pin1, HIGH);
        freqInPin1Low = pulseInLong(pin1, LOW);
        if (freqInPin1High != freqHighOldPin1 && freqInPin1High != 0) {
            Serial.print("Pin1 HIGH:"); Serial.print(freqInPin1High);
            Serial.print("us LOW:"); Serial.print(freqInPin1Low);
            Serial.print("us");
            unsigned long frequency = 1000000 / (freqInPin1High + freqInPin1Low);
            Serial.print(" FRQ:"); Serial.print(frequency); Serial.println("Hz");
            freqHighOldPin1 = freqInPin1High;
        }

        freqInPin2High = pulseInLong(pin2, HIGH);
        freqInPin2Low = pulseInLong(pin2, LOW);
        if (freqInPin2High != freqHighOldPin2 && freqInPin2High != 0) {
            Serial.print("Pin2 HIGH:"); Serial.print(freqInPin2High);
            Serial.print("us LOW:"); Serial.print(freqInPin2Low);
            Serial.print("us");
            unsigned long frequency = 1000000 / (freqInPin2High + freqInPin2Low);
            Serial.print(" FRQ:"); Serial.print(frequency); Serial.println("Hz");
            freqHighOldPin2 = freqInPin2High;
        }
    }
    yield();
    skipFirst = false;
}

Leider ist es nicht sehr genau, auf einem ESP8266 ist das wesentlich genauer. Aber wenn ihr das macht schließt nicht einfach die 5V Leitung an die Pins des ESP an, schaut euch den Artikel an : Pegelwandler

Ja das war es schon wieder für heute.

Das könnte dich auch interessieren …

Eine Antwort

  1. klaus sagt:

    Moin.

    Komme mit dieser Zeile aus Frequenzgenerator nicht klar:

    pwmWrite(frequencyOutputPin, width * 2.55f);

    2.55f?? Was bedeutet das‘ f ‚??

    Vielen Dank

Schreibe einen Kommentar

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