je dois analyser un signal que je reçois sur un port numérique. Ce signal biaire est envoyé tout les 200 ms et il fait 14 Octets.
J'utilise alors une interruption sur un front descendant pour déclencher l'enregistrement reçu cependant les valeurs sont fausses, je reçois seulement des '0'.
pouvez m'aider merci
voici le programme :
void ajout(void);
void affiche(void);
int tab[111];
void setup() {
Serial.begin(38400);
pinMode (7,INPUT);
attachInterrupt(7,ajout,FALLING);
affiche();
}
void loop() {
}
void ajout()
{
for (int i=0;i<111;i++)
{
char val = digitalRead(7);
tab [ i ] =val;
}
}
void affiche()
{
for (int i=0;i<111;i++)
{
Serial.print(tab [ i ], BIN);
}
}
bonjour
mets ton code entre balise code = </> en haut à gauche
ensuite c'est normal à priori que tu ne recupere que 0 en sortie
tu rentre (par falling) et sort de ton interruption avant que ton signal ne change et en plus tu n'indice pas le poste de tab
iprogamer:
Je ne comprends pas mon signal varie pendant la boucle for
si tu es capable de faire des modifs dans ton code, tu dois aussi etre capable de le mettre entre balise code, non ? 8)
tu es sur quel arduino
comment a tu choisi ton pin d'interrruption ?
comment peut tu etre sur que ton entrée va changer dans la boucle sous interruption
pour info sur interrupt 0 avec un UNO , il faut ~ 500 µs pour sortir de la boucle for
j'utilise un Arduino UNO.
J'ai choisi le pin 2 (Int 1) correspondant à l'un des deux ports d'interruption.
Je sais que l'entrée change car a l'affichage les valeurs varient
iprogamer:
<j'utilise un Arduino UNO.
J'ai choisi le pin 2 (Int 1) correspondant à l'un des deux ports d'interruption.
Je sais que l'entrée change car a l'affichage les valeurs varient.
pin2 c'est l'interrupt 0 pas 1
donc dans ton code déjà remplace 7 par 0
J'ai modifié le programme et arrêter la transmission du signal.
Le TTL envoie donc un '1' logique de base (vérifier à l'oscilloscope) mais le programme varie encore sur ses valeurs
void ajout(void);
void affiche(void);
int tab[111];
int input = 2;
void setup() {
Serial.begin(38400);
pinMode (input,INPUT);
attachInterrupt(1,ajout,FALLING);
affiche();
}
void loop(){}
void ajout()
{
for (int i=0;i<200;i++)
{
int val = digitalRead(input);
tab[i]=val;
}
}
void affiche()
{
for (int i=0;i<200;i++)
{
Serial.print(tab[i], BIN);
}
}
iprogamer:
J'ai modifié le programme et arrêter la transmission du signal.
Le TTL envoie donc un '1' logique de base (vérifier à l'oscilloscope) mais le programme varie encore sur ses valeurs
void ajout(void);
void affiche(void);
int tab[111];
int input = 2;
void setup() {
Serial.begin(38400);
pinMode (input,INPUT);
attachInterrupt(1,ajout,FALLING);
affiche();
}
void loop(){}
void ajout()
{
for (int i=0;i<200;i++)
{
int val = digitalRead(input);
tab[i]=val;
}
}
void affiche()
{
for (int i=0;i<200;i++)
{
Serial.print(tab[i], BIN);
}
}
je ne comprend pas ce qu tu cherche à faire
1-tu explique plus bas que tu utilise pin2 d'un UNO et tu attache l'interrupt 1 au lieu de 0
2- tu a un tableau dimensionné à 111 et ta boucle for elle va jusqu'à <200
tes fronts d'info ont une longueur fixes ?
parce que là tu ne tient aucun compte de la temporalité, c'est la boucle qui cadence à son propre rythme
iprogamer:
excuse moi pour les 2 erreurs, c'est corrigé.
Je sais seulement que la transmission se fait à une vitesse de 38400 bauds
attend une seconde (ou moins) là , tu es en train de nous expliquer que tu veux "simplement" recevoir des infos series à 38400 , une trame de 14 bytes emise toutes les 200 ms ?
iprogamer:
J'avais déjà essayer mais ça imprime des symboles bizarre indechiffrable
software serial fonctionne tres bien
alors tu a plusieurs questions à te poser et a verifier
38400 c'est sur et certain ? verifié comment ?
ensuite la vitesse ne fait pas tout , il y a d'autres parametres à determiner
comme nb bits de data, parité, et nb bits de stop
par defaut en dehors de la vitesse c'est 8bits data,pas de parité, 1 bit de stop.