Forum Électro-Bidouilleur

Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session
Recherche avancée  

Nouvelles:

Bienvenue au nouveau Forum Électro-Bidouilleur! Inscrivez-vous pour participer aux discussions! L'inscription est automatisée.

Auteur Sujet: programmation pic  (Lu 69 fois)

modeste

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
programmation pic
« le: septembre 04, 2018, 06:48:55 pm »

bonjour et merci à tout les bidouilleurs.
 je suis un peu nouveau en programmation et j'ai commencer par les pic et j'ai monter un petit projet mais je n'arrive pas a trouver la structure de programmation ou la fonction de programmation qui pourrait le faire ,voici le projet:
interrupteur1 =1   alors LED1= 1
interrupteur2 =1   alors LED2= 1
              voici ou je suis bloqué
si interrupteur1  et interrupteur 2 sont enfoncés alors LED3= 1
si interrupteur2  et interrupteur 1 sont enfoncés alors LED4= 1

en passant j'utilise micro.c
 aidez moi car c'est très important pour moi
merci d'avance
IP archivée

Électro-Bidouilleur

  • Administrator
  • Hero Member
  • *****
  • Messages: 543
  • C'est moi le boss!
    • Voir le profil
    • Site Web Électro-Bidouilleur
Re : programmation pic
« Réponse #1 le: septembre 04, 2018, 09:12:53 pm »

Vraiment rien de complexe, vous verrez. Mais montrez-nous votre code existant pour qu'on puisse l'augmenter...
IP archivée

modeste

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : programmation pic
« Réponse #2 le: septembre 05, 2018, 10:44:53 am »

voici un extrait du programme:
       //les entrées
sbit interrupteur1 at RA0_bit;
sbit interrupteur2 at RA1_bit;
   
//LES SORTIES
sbit LED1 at RB0_bit;
sbit LED2 at RB1_bit;
sbit LED3 at RB2_bit;
sbit LED4 at RB3_bit;

//programme principale
void main ()
{
TRISA=0xff;
TRISB=0x00;

  while(1)
  {
    switch(PORTA)
    {
       case 1:          //action sur interrupteur1
             LED1 =1;   //led1 active
            delay_ms(500);
             LED1= 0;
             break;
                case 2:  //action sur interrupteur2
             LED2 =1;  //led2 active
            delay_ms(500);
             LED2= 0;
             break;
}}
maintenant,jevoudrait activer d'autres LED (LED3 et LED4 ) en actionnant sur les 2 interrupteurs comme suite:

if(interrupteur1 && interrupteur2) LED3=1;  //la led3 est active lorsque l'interrupteur1 en PREMIER est actionner puis l'interrupteur2
if(interrupteur2 && interrupteur1) LED4=1;  //la led4 est active lorsque l'interrupteur2 en PREMIER est actionner puis l'interrupteur1
}
 aidez moi pardon car le programme ci haut fonctionne parfaitement pour
                  _  action sur l'interrupteur1
                  _ action sur l'interrupteur2
 mais il ne fonctionne pas pour
_action sur (interrupteur1 et l'interrupteur2)
_action sur (interrupteur2 et l'interrupteur1)

comment pourrai je bien l'écrire
IP archivée

Électro-Bidouilleur

  • Administrator
  • Hero Member
  • *****
  • Messages: 543
  • C'est moi le boss!
    • Voir le profil
    • Site Web Électro-Bidouilleur
Re : programmation pic
« Réponse #3 le: septembre 06, 2018, 09:36:11 pm »

MikroC, Micro C (AVR), Micro-C.... Pas clair du tout. Pouvez-vous être plus clair sur l'environnement et le language utilisé?

Votre séquence d'interrupteurs combinés va d'abord causer le clignotement de la LED1 ou de la LED2, suivi de la LED3 ou de la LED4. Pas le choix de la façon que les LED1 et LED2 sont activées.

Pour faire un bon travail de validation des interrupteurs, vous ne devriez pas figer le micro-contrôleur avec un delay_ms(500), sinon comment allez-vous valider l'activation en séquence des deux boutons? En présumant que vous ne voulez pas utiliser des fonctions d'interruption, vous devriez plutôt sortir le comptage du délai de cette zone, faire plutôt 500 fois un délai de 1ms (ou 50 fois 10ms), et valider en boucle l'état des interrupteurs à chaque passage de 1ms. Si une condition nécessitant un délai de 500ms est rencontrée, vous allumez une LED, et réinitialisez le compteur à 500, Plus bas, verifiez si une des LEDs est allumée. Si oui, décrémentez le compteur de 1 chaque passage, et eteignez tous les LED lorque le compteur atteint 0. Je présume ici que le 500ms total n'est pas absolument critique.

Ce qui suit n'est qu'une idée de comment vous pourriez procéder. Ce n'est pas testé! Presque sûr qu'il manque quelque chose.... Mais c'est un bon point de départ.

initialiser le compteur à 500
(Boucle débute ici)
Si interrupteur1 pesé && interrupteur2 non pesé && flag-interrupteur1 pas activé
  allumer LED1
  marquer interrupteur1 comme étant déjà pesé (activer la variable flag-interrupteur1)
Si interrupteur2 pesé && interrupteur1 non pesé && flag-interrupteur2 pas activé
  allumer LED2
  marquer interrupteur2 comme étant déjà pesé (activer la variable flag-interrupteur2)
Si flag-interrupteur1 actif && interrupteur2 pesé
  allumer LED3
Si flag-interrupteur2 actif && interrupteur1 pesé
  allumer LED4

LED allumée?
  oui
    compteur--
    delai_ms(1)
    compteur = 0?
      oui
        éteindre tous les LEDs.
        réinitialiser le compteur à 500
        désactiver flag-interrupteur1
        désactiver flag-interrupteur2
(boucle termine ici)
IP archivée

modeste

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : programmation pic
« Réponse #4 le: septembre 09, 2018, 11:42:18 am »

merci beaucoup t'es génial :) :)   :)
IP archivée