• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
pulseIn przez cały czas zwraca wartość 0
#5
(12-01-2018, 20:14)adixpogo napisał(a): Witam,

Uważam, że zmienna Th wręcz powinna być typu float. Zależy mi na wartościach dziesiętnych. Udało mi się uzyskać odczyt sygnału. Mój błąd - nie doczytałem dość istotnej informacji, że timeout jest liczony w mikrosekundach, nie milisekundach. 

Przyznam szczerze, że funkcja pulseIn w miarę precyzyjnie wychwytuje sygnały o wyższej częstotliwości. Gdy przychodzi do pomiaru niskich częstotliwości (poniżej 1Hz), dane mają niewiele wspólnego z rzeczywistymi wartościami. Chyba pozostaje wspomniane przez Ciebie alternatywne rozwiązanie z wykorzystaniem przerwań.

witam, post bardzo stary, ale może ktoś tak jak ja przegląda stare archiwa w poszukiwaniu rozwiązania. Funkcja pulseln() zwraca wartość w mikrosekundach typu unsigned long.
Kod:
int pin = 7;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseIn(pin, HIGH);
  Serial.println(duration);
}

a tu przykład oparty na przerwaniach:
Kod:
/*
* Non-blocking pulseIn(): returns the pulse length in microseconds
* when the falling edge is detected. Otherwise returns 0.
*/
unsigned long read_pulse(int pin)
{
    static unsigned long rising_time;  // time of the rising edge
    static int last_state;             // previous pin state
    int state = digitalRead(pin);      // current pin state
    unsigned long pulse_length = 0;    // default return value

    // On rising edge: record current time.
    if (last_state == LOW && state == HIGH) {
        rising_time = micros();
    }

    // On falling edge: report pulse length.
    if (last_state == HIGH && state == LOW) {
        unsigned long falling_time = micros();
        pulse_length = falling_time - rising_time;
    }

    last_state = state;
    return pulse_length;
}
 
Odpowiedź
  


Wiadomości w tym wątku
RE: pulseIn przez cały czas zwraca wartość 0 - przez przoch - 16-02-2024, 16:28

Skocz do:


Przeglądający: 3 gości