Warning: file_get_contents(https://graph.facebook.com/?ids=http%3A%2F%2Fwww.stsystem.pl%2Findex.php%3Foption%3Dcom_content%26view%3Darticle%26id%3D62) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /domains/stsystem.pl/public_html/plugins/content/fbar/fbar.php on line 210

Warning: file_get_contents(https://graph.facebook.com/?ids=http%3A%2F%2Fwww.stsystem.pl%2Findex.php%3Foption%3Dcom_content%26view%3Darticle%26id%3D62) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /domains/stsystem.pl/public_html/plugins/content/fbar/fbar.php on line 210

Często zachodzi potrzeba reakcji nie tyle na stan jakiejść zmiennej co na jej zmianę. Taki sposób podejścia do tematu nosi nazwę reakcji na zbocze sygnału. Wyróżniamy tutaj:

- zbocze narastające 

- zbocze opadające

Aby za każdym razem, gdy potrzebuję takiej funkcjonalności, nie pisać nowego fragmentu kodu, stworzyłem prostą funkcję realizującą to zadanie:

- zawartość pliku Triggery.h

#ifndef TRIGGERY_H_
#define TRIGGERY_H_
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void TRIG(bool input,void (*f)(void),uint8_t no,uint8_t rise);
enum Trig_zbocze {Falling,Rising};
enum Trig_zbocze Trise;
enum Trig_numer {Trig0,Trig1,Trig2,Trig3,Trig4,Trig5,Trig6,Trig7};
enum Trig_numer Tno;
#endif /* TRIGGERY_H_ */

- zawartość pliku Triggery.c

#include "Triggery.h"
uint8_t stan;
void TRIG(bool input,void (*f)(void),uint8_t no,uint8_t rise)
{
 if (input && !(stan & (1<<no)))
 {
 stan|=(1<<no);
 if (rise)
 f();
 }
 if (!input && (stan & (1<<no)))
 {
 stan&=~(1<<no);
 if(!rise)
 f();
 }
return;
}

Funkcja ta działa na zasadzie przerzutnika:

- jeżeli na wejściu pojawi się "true" to zapisuje to do zmiennej pomocniczej a zmienna ta jednocześnie uniemożliwia kolejne wejście do jej zapisu (trochę zakręciłem:) )

- teraz funkcja przy każdym wywołaniu sprawdza sobie czy jej warunek wejściowy nadal jest spełniony

- jeżeli nie jest spełniony to zdejmuje swój "zatrzask" z poprzedniej części kodu

- moment zdjęcia "zatrzasku" równoznaczny jest z wykryciem zbocza opadającego

Zrozumienie kodu może utrudniać Ci to, że jest on zrealizowany dla 8iu niezależnych triggerów. Jednak wystarczy, że zamiast zmiennej 8io bitowej użyjemy boolowskiej:

if (sygnalWE && !zatrzask)
 {
 zatrzask=true;
 //wpisz tu twoj kod dla zbocza narastajacego
 }
 if (!sygnalWE && zatrzask)
 {
 zatrzask=false;
 //wpisz tu twoj kod dla zbocza opadajacego
 }

Użycie kodu w programie jest następujące:

TRIG(jakaszmienna==17,*zrobcos,Trig0,Rising)

 

Do pobrania:

Użyj opcji uploadu plików, aby przekazać mi kod do sprawdzenia. Postaram się zajrzeć do niego tak szybko jak będzie to możliwe. Paczkę z poprawionym kodem umieszczę w tym samym miejscu.

 

 

Jeżeli wystąpi sytuacja, w której zostanie wyświetlona zawartość folderu z innego działu - należy wyczyścić cache przeglądarki! Następnie przeładować stronę.


Komentarze  

 
# DavidDavid 2016-11-24 08:45
I appreciate, cause I found just what I was looking for. You have ended my 4 day long hunt! God Bless you man. Have a great day. Bye
Odpowiedz | Odpowiedz z cytatem | Cytować
 

Licznik odwiedzin

Mapa odwiedzin



 

Copyright © ST WebSite 2017

Stronę hostuje FutureHost. []

Strona korzysta z plików cookie. Dane przechowywane na Twoim komputerze służą wyłą…cznie do poprawienia funkcjonalnoś›ci witryny. Jeżeli tego nie akceptujesz - powinieneś› ją… opuś›cić‡.

Akceptujesz ciasteczka z tej witryny?