Bonjour à tous,
J'aimerais réutiliser un moteur de machine à laver en treuil pour aider à remonter les voiliers pour mon club.
Pour ce faire, j'aimerais :
- Une commande à trois boutons AV/STOP/AR
- Une incrémentation de la vitesse par appuie successif
Pour le moment les commendes fonctionnent mais pas la variation de vitesse,
Voici le programme :
#define RL1 PIN_A0
#define RL2 PIN_A1
#define TRIAC PIN_A2
#define BPAV PIN_A3
#define BPSTP PIN_A4
#define BPAR PIN_A5
#define version 0x0001
int tempo=300;
int EtatBPAV,EtatBPAR,EtatBPSTP;
int Vitesse;
void main()
{
setup_adc_ports(NO_ANALOGS|VSS _VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RT CC_DIV_2);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1) ;
setup_comparator(NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ);
//port_a_pullups(TRUE);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
set_tris_a(000111);
output_low(RL1);
output_low(RL2);
output_low(TRIAC);
EtatBPAV=0;
EtatBPAR=0;
EtatBPSTP=0;
Vitesse=0;
while (true) /* Boucle sans fin */
{
/* Procédure de marche avant */
while(input(BPAV)) /* Test l'appuie sur Bouton AV */
{
EtatBPAV=1;/* Passe l'état de la variable bouton à 1 */
delay_ms(300);/* Pause pour l'attente de relâchement du Bouton */
while(!input(BPAV))/* Test le relâchement du Bouton */
{
output_low(TRIAC);/* Éteint le triac*/
output_low(RL2);/* Éteint la LED de control AR*/
output_high(RL1);/* Allume la LED de control AV*/
output_high(TRIAC);/* Allume le triac AV*/
if(EtatBPAV=1)/* Vérifie si la variable d’état du bouton est à 1 et incrémente la vitesse*/
{
if (Vitesse = 0)
{
Vitesse = 1;
}
else
{
++Vitesse;
}
}
EtatBPAV=0;/* Passe l'état de la variable bouton à 0 */
EtatBPAR=0;/* Passe l'état de la variable bouton à 0 */
EtatBPSTP=0;/* Passe l'état de la variable bouton à 0 */
//delay_ms(300);/* Pause pour la visualisation du relâchement du Bouton */
break;
}
break;
}
/* Procédure de marche arriéré */
while(input(BPAR)) /* Test l'appuie sur Bouton AR */
{
EtatBPAR=1;/* Passe l'état de la variable bouton à 1 */
delay_ms(300);/* Pause pour l'attente de relâchement du Bouton */
while(!input(BPAR))/* Test le relâchement du Bouton */
{
output_low(TRIAC);/* Éteint le triac*/
output_low(RL1);/* Éteint la LED de control AV*/
output_high(RL2);/* Allume la LED de control AR*/
output_high(TRIAC);/* Allume le triac AV*/
if(EtatBPAR=1)/* Vérifie si la variable d’état du bouton est à 1 et incrémente la vitesse*/
{
if (Vitesse = 0)
{
Vitesse = 1;
}
else
{
++Vitesse;
}
}
EtatBPAV=0;/* Passe l'état de la variable bouton à 0 */
EtatBPAR=0;/* Passe l'état de la variable bouton à 0 */
EtatBPSTP=0;/* Passe l'état de la variable bouton à 0 */
//delay_ms(300);/* Pause pour la visualisation du relâchement du Bouton */
break;
}
break;
}
/* Procédure d'arret */
while(input(BPSTP)) /* Test l'appuie sur Bouton STP */
{
EtatBPSTP=1;/* Passe l'état de la variable bouton à 1 */
delay_ms(300);/* Pause pour l'attente de relâchement du Bouton */
while(!input(BPSTP))/* Test le relâchement du Bouton */
{
output_low(TRIAC);/* Eteint le triac*/
output_low(RL2);/* Eteint la LED de control AR*/
output_low(RL1);/* Eteint la LED de control AV*/
if(EtatBPSTP=1)Vitesse=0; /* Vérifie si la variable d'état du bouton est à 1 et passe la vitesse à 0*/
EtatBPAV=0;/* Passe l'état de la variable bouton à 0 */
EtatBPAR=0;/* Passe l'état de la variable bouton à 0 */
EtatBPSTP=0;/* Passe l'état de la variable bouton à 0 */
//delay_ms(300);/* Pause pour la visualisation du relâchement du Bouton AV */
break;
}
break;
}
if (Vitesse=0)
{
output_low(TRIAC);
}
else
{
output_toggle(TRIAC);
delay_ms(tempo/Vitesse);
}
}
}
Je suppose que le probléme ce situe au niveau de la variable Vitesse ??
Merci d'avance de votre aide et conseil
Cordialement,
-----