Salut à tous, j'aimerais lire un signal carré numérique venant d'un circuit imprimé connecté au Raspberry pi 4. Je me demande si c'est possible car la fonction digitalRead(pin) retourne soit 0 soit 1. S'il-vous-plaît J'ai besoin d'aide
Version imprimable
Salut à tous, j'aimerais lire un signal carré numérique venant d'un circuit imprimé connecté au Raspberry pi 4. Je me demande si c'est possible car la fonction digitalRead(pin) retourne soit 0 soit 1. S'il-vous-plaît J'ai besoin d'aide
Bonjour,
Sans expérience, je dirai qu'en lisant régulièrement le pin, vous allez voir les changements de valeur. Par contre, cela ne sera pas très précis, pour détecter quand le changement arrive.
Bonsoir,
S'il s'agit de mesurer la fréquence du signal, classiquement, soit on compte le nombre de fronts (montants ou descendants) du signal pendant une période donnée, soit on mesure la durée entre deux fronts du signal.
On choisit l'une ou l'autre selon la fréquence du signal à mesurer et la précision souhaitée.
Bonjour, merci pour vos réponses
J'ai essayé de calculer le temps entre deux changements d'états de manière classique comme dans le code ci-dessous, mais vu que le traitement sur Raspberry pi est multitache ce programme n'est pas optimal. S'il vous plaît comment transformer ce programme en utilisant les interruptions ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include <stdio.h> #include <wiringPi.h> #include <time.h> #define BTN_MRC2 7 #define BTN_MRC1 21 clock_t t1 = 0, t2 = 0; void setup() { pinMode(BTN_MRC1, INPUT); pinMode(BTN_MRC2, INPUT); t1 = clock(); } void calculeDureeEntre2Fronts() { int btn; //valeur du bouton btn = digitalRead(BTN_MRC1); // for(int i=0;i<100;i++) // { if (btn == 1) //si un etat haut est detecte { while (btn == 1) //tant qu'on detecte un etat haut { printf("Etat haut = %d ", btn); btn = digitalRead(BTN_MRC1); t2 = clock(); } } else if(btn == 0) { while (btn == 0) //tant qu'on detecte un etat bas { printf("Etat bas= %d ", btn); btn = digitalRead(BTN_MRC1); t2 = clock(); } } //} printf("nombre de secondes = %f ", (float)(t2 - t1) / CLOCKS_PER_SEC); } int main(int argc, char ** argv) { wiringPiSetup(); setup(); calculeDureeEntre2Fronts(); return 0; }
Comme tu utilises Wiring Pi :fleche: Priority, Interrupts and Threads
La fonction wiringPiISR() devrait répondre à ton besoin.
Merci f-leb, il suffit alors d'appeler ma fonction dans wiringPiISR(). J'aimerais vraiment savoir s'il n'est pas pas possible reproduire ce signal en utilisant par exemple un filtre