A voir également:
- Petit probleme sur un petit programme en C
- Excel trier du plus grand au plus petit - Guide
- Petit 1 comme ² ✓ - Forum Bureautique
- Ecrire les chiffres en petits caractères ✓ - Forum Windows
- Petit colis distribution - Forum Consommation & Internet
6 réponses
Salut
Ce que tu veux c'est pas detecter si le bouton est appuyé, mais detecter le passage du niveau bas au niveau haut sur le BP. Je fais pas d'electronique, bon je suis pas sur mais ca devrait ressembler à ca:
TRISAbits.TRISA4 = 1 ; ---------> initialisation des lignes
TRISAbits.TRISAB0 = 0 ; ---------> initialisation des lignes
loop1:
if ( PORTAbits.RA4 == 0 ) { ----------> Verifie que le BP n'est pas pressé
PORTbits.RB0 = 0 ; ----------> eteint la diode
While (PORTAbits.RA4 == 1) ; ----------> attendre appui sur Bouton Poussoir
PORTBbits.RB = 1; ----------> allume la diode
}
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
goto loop1 ;
Ce que tu veux c'est pas detecter si le bouton est appuyé, mais detecter le passage du niveau bas au niveau haut sur le BP. Je fais pas d'electronique, bon je suis pas sur mais ca devrait ressembler à ca:
TRISAbits.TRISA4 = 1 ; ---------> initialisation des lignes
TRISAbits.TRISAB0 = 0 ; ---------> initialisation des lignes
loop1:
if ( PORTAbits.RA4 == 0 ) { ----------> Verifie que le BP n'est pas pressé
PORTbits.RB0 = 0 ; ----------> eteint la diode
While (PORTAbits.RA4 == 1) ; ----------> attendre appui sur Bouton Poussoir
PORTBbits.RB = 1; ----------> allume la diode
}
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
goto loop1 ;
en fait non plutot
if ( PORTAbits.RA4 == 0 ) { ----------> Verifie que le BP n'est pas pressé
PORTbits.RB0 = 0 ; ----------> eteint la diode
While (PORTAbits.RA4 == 1) ; ----------> attendre appui sur Bouton Poussoir
PORTBbits.RB = 1; ----------> allume la diode
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
}
@+
if ( PORTAbits.RA4 == 0 ) { ----------> Verifie que le BP n'est pas pressé
PORTbits.RB0 = 0 ; ----------> eteint la diode
While (PORTAbits.RA4 == 1) ; ----------> attendre appui sur Bouton Poussoir
PORTBbits.RB = 1; ----------> allume la diode
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
}
@+
ben non en fait il me semble bien que l'instruction
While (PORTAbits.RA4==1) ;
cela veut dire : tant que l'on appui pas sur le BP ne rien faire (car RA4==1 veut dire que le BP est ouvert et non fermé)
merci de m'aider svp
While (PORTAbits.RA4==1) ;
cela veut dire : tant que l'on appui pas sur le BP ne rien faire (car RA4==1 veut dire que le BP est ouvert et non fermé)
merci de m'aider svp
T'es sympa mais je suis pas censé savoir que ton BP est ouvert a 1 ! Je suis en ecole d'info, donc moi jme base sur 0 pas de courant 1 ya du jus :)
Donc du coup ca marcherait ca :
TRISAbits.TRISA4 = 1 ;
TRISAbits.TRISAB0 = 0 ;
loop1:
PORTbits.RB0 = 0 ;
if ( PORTAbits.RA4 == 1 ) {
While (PORTAbits.RA4 == 1) ;
PORTBbits.RB = 1;
Delay 10KTCYx(200) ;
Delay 10KTCYx(200) ;
}
goto loop1 ;
Pour la loop1, on met la diode a 0, le test n'est validé que si ton bouton poussoir est ouvert, donc ca elimine le moment ou tu reste appuyé...
Apres c'est tout pareil, on attend que le bouton poussoir passe a 0, puis on passe la diode a 1, et on attend 4 sec pour repartir sur loop1 qui eteint ta diode avant de tester si tées resté appuyé sur le bouton ou pas, etc.
Au passage pourquoi t'ecris
Delay 10KTCYx(200) ;
Delay 10KTCYx(200) ;
plutot que
Delay 10KTCYx(400) ;
?
@+
Donc du coup ca marcherait ca :
TRISAbits.TRISA4 = 1 ;
TRISAbits.TRISAB0 = 0 ;
loop1:
PORTbits.RB0 = 0 ;
if ( PORTAbits.RA4 == 1 ) {
While (PORTAbits.RA4 == 1) ;
PORTBbits.RB = 1;
Delay 10KTCYx(200) ;
Delay 10KTCYx(200) ;
}
goto loop1 ;
Pour la loop1, on met la diode a 0, le test n'est validé que si ton bouton poussoir est ouvert, donc ca elimine le moment ou tu reste appuyé...
Apres c'est tout pareil, on attend que le bouton poussoir passe a 0, puis on passe la diode a 1, et on attend 4 sec pour repartir sur loop1 qui eteint ta diode avant de tester si tées resté appuyé sur le bouton ou pas, etc.
Au passage pourquoi t'ecris
Delay 10KTCYx(200) ;
Delay 10KTCYx(200) ;
plutot que
Delay 10KTCYx(400) ;
?
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oui mais dans ton prog dans tous les cas si tu retourne au loop1 tu eteint la diode
je vien de penser a un prog si tu pouré me confirmé ça serais bien...
TRISAbits.TRISA4=1 ; ---------> initialisation des lignes
TRISAbits.TRISAB0=0 ; ---------> initialisation des lignes
loop1:
PORTbits.RB0=0 ; ----------> eteindre la diode
While (PORTAbits.RA4==1) ; ----------> attendre appui sur Bouton Poussoir
PORTBbits.RB=1 ; ----------> allume la diode
loop2 :
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
if (PORTAbits.RA4==0) { ------------> si j'appui toujours je recommence la temporisation
goto loop2
}
goto loop1 ; --------------> sinon je retourne eteindre la diode
esque sa puré marcher comme cela.
PS: j'ai 2 tempo de 200 car je suis en format char (8bits) et ça s'arette a 256 donc je ne peut pas mettre 400
je vien de penser a un prog si tu pouré me confirmé ça serais bien...
TRISAbits.TRISA4=1 ; ---------> initialisation des lignes
TRISAbits.TRISAB0=0 ; ---------> initialisation des lignes
loop1:
PORTbits.RB0=0 ; ----------> eteindre la diode
While (PORTAbits.RA4==1) ; ----------> attendre appui sur Bouton Poussoir
PORTBbits.RB=1 ; ----------> allume la diode
loop2 :
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
Delay 10KTCYx(200) ; ----------> temporisation 2 sec
if (PORTAbits.RA4==0) { ------------> si j'appui toujours je recommence la temporisation
goto loop2
}
goto loop1 ; --------------> sinon je retourne eteindre la diode
esque sa puré marcher comme cela.
PS: j'ai 2 tempo de 200 car je suis en format char (8bits) et ça s'arette a 256 donc je ne peut pas mettre 400