• 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
#1
Przyznam szczerze, że siedzę nad kodem już dobrych parę dni, a nadal nie mogę znaleźć przyczyny błędnego działania. 

Na wstępie wspomnę w jakim celu ma służyć dany kod. Potrzebuję mierzyć czas wysokiego stanu sygnału. Przeglądając multum stron internetowych w poszukiwaniu rozwiązania, natknąłem się na funkcję pulseIn, która rzekomo powinna rozwiązać mój problem. Użyłem osobnego Arduino w celu symulowania sygnału - najprostszy możliwy schemat, oparty na funkcjach delay oraz digitalWrite - zapala i gasi diodę co sekundę. pulseIn powinien zwracać wartość 1000 ms za każdym razem, niestety tak nie jest. Poniżej załączam uproszczony kod, rejestrujący czas wysokiego stanu. 

Czego już próbowałem?

1. Wyczytałem, że funkcja pulseIn ma wbudowany tzw. "timeout", standardowo ustawiony na wartość 1000 ms. Jeżeli w ciągu jednej sekundy nie zarejestruje sekwencji stanów: low>high>low, zwraca wartość 0. Oczywiście wartość timeout'u można zmienić przykładowo na dwie sekundy wpisując: pulseIn(pin,HIGH,2000);


2. Zmieniałem wartość przerw pomiędzy stanem niskim i wysokim w symulowanym sygnale (korzystałem z różnych: 10ms, 100ms).

3. Symulowałem sygnał przy pomocy innych funkcji. Przykładowo standardowy PWM, "analogWrite" oraz "tone" - w tym przypadku pulseIn odczytuje jakieś wartości. W przypadku digitalWrite zwraca za każdym razem 0.

Kod:
float Th; // czas trwania stanu wysokiego (w tym czasie samochód spala 0,006 l)

void setup(){

 Serial.begin(9600);
 pinMode(7,INPUT); // wejście rejestrowania sygnału paliwomierza
}

void loop() {
 
/* Rejestracja i przetwarzanie sygnału z paliwomierza */
Th = pulseIn(7,HIGH); // pomiar czasu trwania pojedynczego stanu wysokiego na wejściu paliwomierza. W tym czasie samochód spala 0,006 l (jednostka [ms])
 Serial.println(Th, 4);

}
 
Odpowiedź
  


Wiadomości w tym wątku
pulseIn przez cały czas zwraca wartość 0 - przez adixpogo - 12-01-2018, 19:03

Skocz do:


Przeglądający: 1 gości