Programme en C tout bête....
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Programme en C tout bête....



  1. #1
    invite3570b5f7

    Programme en C tout bête....


    ------

    Bonsoirs tout le monde,

    Je souhaite réaliser un interrupteur séquentiel :

    - j'appuie sur un bouton poussoir BP et ça lace une séquence d'allumage : tempo 2 sec et active relais 1, tempo 2 sec et active relais 2 etc...jusqu'au relais 8.

    - je rappuis sur le BP, les relais se désactivent dans le sens inverse.Toujours avec les tempos.

    Bien évidement, j'ai mis des inter mini dip MD qui, selon la configuration, m'activerons ou non les relais.

    Si le MD 1, 4 et 8 sont sur " 1 " alors la séquence concernera que les relais 1, 4, et 8.

    J'ai fait l'organigramme que je met en pièce jointe.

    Le problème que je rencontre est :

    - Je me perd un peu dans les tests " IF " car je ne sais pas du tout si on peu faire des " if " dans des " if " dans des " if " etc...

    Si quelqu'un pourrais me guider...Il y a peut être une meilleur solution aussi.

    Merci beaucoup

    -----
    Images attachées Images attachées  

  2. #2
    CM63

    Re : Programme en C tout bête....

    Ben si, si je me souviens bien c'est :

    if (a==0)
    {
    if (b==0)
    {
    traitement...
    }
    }

    Voilà , donc tu en mets autant que tu veux.

    Ah zut, ça a viré la tabulation enfin j'espère que c'est quand même lisible

  3. #3
    invitef86a6203

    Re : Programme en C tout bête....

    Citation Envoyé par CM63 Voir le message
    Ah zut, ça a viré la tabulation enfin j'espère que c'est quand même lisible
    Code:
     
    if (a==0)
       {
       if (b==0)
          {
           traitement...
          }
       }
    Mettre [/CODE] a la fin et [CODE] au début.
    Je les met volontairement à l'envers pour les voir , sinon on a l'encarté au dessus.

  4. #4
    invite5637435c

    Re : Programme en C tout bête....

    Bonsoir,

    tu peux aussi écrire:

    Code:
    if ((a==0) && (b==0)) 
       {
       traitement....
       }
    Il n'y a plus qu'un if.
    @+

  5. A voir en vidéo sur Futura
  6. #5
    invite3570b5f7

    Re : Programme en C tout bête....

    Ah wé effectivement ! Merci beaucoup les gars je teste ca dans la soirée.

    Hulk28 : Mon projet du voltmètre sur afficheur graphique n'est pas abandonné j'attends juste de recevoir d'une part le programmateur ATMEL, les µC, les composants CMS et d'avoir aussi le cahier des charge au complet avec l'aide des plusieurs pratiquants du SPL.

  7. #6
    invite3570b5f7

    Re : Programme en C tout bête....

    while (1)
    {
    if ((PINA.0==1) && (PINB.0==1))
    {
    delay_ms(2000);
    PORTD=0x01;
    }

    if(PINB.1==1)
    {
    delay_ms(2000);
    PORTD=0x02;
    }

    if ((PINA.0==1) && (PINB.1==1)
    {
    delay_ms(2000);


    Maintenant je suis bloqué, j'ai pas pensé à ca.

    En effet, quand je rappuis sur le BP, il faut que seulement les relais qui ont été activés, se désactivent.
    Je suis sur que c'est simple...juste un petit guide SVP ??

    je peu pas rentrer des valeurs du port D car elles changerons en focntions de ma configurations des mini dip...

  8. #7
    invite5637435c

    Re : Programme en C tout bête....

    Tu peux introduire une variable par exemple:

    Code:
    char var=0;
    
    if ((PINA.0==1) && (PINB.0==1))
    {
    var=~var;  // toggle
    delay_ms(2000);
    if(var==1) PORTD=0x01;
    if(var==0) PORTD=0;
    }

  9. #8
    invite3570b5f7

    Re : Programme en C tout bête....

    L'idée de la variable est bonne je vais chercher de ce coté.

    Par contre quand tu dis PORTD=0, ca va me désactiver les relais OK.
    Mais il ne faut pas que les relais se désactivent en même temps.

    Il faut que els relais se désactivent avec la même séquence..

    ex : Mini DIP 1 , 4 et 8

    Appuis sur BP : 2 sec , R1A , 2 sec , R4A , 2 sec , R8A
    Rappuis : 2 sec , R8D , 2 sec , R4D , 2 sec , R1D.

    ==> A pour relais activé et B pour relais désactivé.

    En fait c'est un chenillard qui va de gauche à droite et ensuite de droite à gauche mais programmable.

  10. #9
    invite5637435c

    Re : Programme en C tout bête....

    Citation Envoyé par joey57 Voir le message

    En fait c'est un chenillard qui va de gauche à droite et ensuite de droite à gauche mais programmable.
    Il aurait fallu le dire tout de suite, tu es sûr que cette fois tu nous as bien tout dit?
    Poste un schéma également pour les affectations des ports.
    @+

  11. #10
    invite3570b5f7

    Re : Programme en C tout bête....

    Désolé.

    Donc voici le schéma de base.

    J'ai mis à coté l'organigramme de base.On utilise pas les mini dip sur celui là.
    Donc celui là je l'ai fait il fonctionne.
    J'appuie sur le BP1, les relais s'enclenchent les uns après les autres, avec entre chaque relais une tempo de 2 secondes.
    Arrivé au 8eme relais, le tout s'arrête, mais les relais restent enclenchés bien sure.

    Je rappuie sur le BP1, les relais se désactivent les uns après les autres toujours avec entre temps une tempo de 2 secondes entre chaque relais jusqu'à arriver au relais 1.


    Maintenant, on insère les mini dip pour la simple et bonne raison que, si par exemple je n'utilise que 5 relais, ça évite d'activer les 3 autres relais.Pareil pour les désactiver.

    Donc, si j'utilise que les 5 premiers relais, je met les 5 premiers mini dip ( 1 à 5 ) sur ON, et le programme m'actionnera et me désactivera seulement les 5 premiers relais.

    Ça évite qu'il perde du temps sur les relais qui ne seront pas utilisés.Surtout avec les tempos de 2 secondes.

    Et la difficulté que j'ai, c'est à faire en sorte que le programme tienne compte des mini dips.
    J'avais pensé à faire en sorte que tout au début le programme lise le PORTA pour voir quels mini dips sont activés mais...je plante.


    J'espère que c'est bon cette fois ci ^^
    Images attachées Images attachées  

  12. #11
    invite5637435c

    Re : Programme en C tout bête....

    Oui le plus simple me semble-t-il est de lire les dip à l'init puis cycliquement au début du while(1) si tu décides de modifier le mode en cours d'utilisation.

    Tu n'as pas donné les affectations de tes ports pour les dip et les relais, ni indiqué le PIC que tu veux utiliser.

    PS: pour l'instant ta pièce jointe n'est pas présente dans l'espace réservé à la validation, et pourtant je la vois bien sur mon écran, donc je ne peux la valider pour le moment (au cas où d'autres m'en voudraient de faire de la rétention d'informations )

    @+

  13. #12
    invite3570b5f7

    Re : Programme en C tout bête....

    Par affectation des ports tu veux dire que tu me demande ce qui va etre branché sur ces portrs ? si oui j'ai tout mis sur le dessin.

    Le circuit que j'utilise c'est un ATMEL ATmega 8515.

    Quand tu dit que le µC doit lire cyclement les dips, en fait c'est que le programme se déroule,et qu'a chaque fois il retourne au début pour relir les dips ?

    Les dip seront positionnés quand l'apapreil est hors tension et non pandant qu'il est sous tension.Ca simplifira je pense le prog.

  14. #13
    invite5637435c

    Re : Programme en C tout bête....

    Ah oui je n'avais pas reconnu ton super schéma à gauche.

    On peut sans problème tester les dip en fonctionnement, je te prépare un truc via un PIC tu n'auras qu'à adapter vers un ATMEL, le C reste le C quand il est ANSI, c'est l'avantage.
    @+

  15. #14
    invite3570b5f7

    Re : Programme en C tout bête....

    OK je te remerci ^^

    Oui après j'adapte et je modifie 2 3 trucks car je vais encore rajouter des trucks mai sca je me débrouille tout seul ^^

    J'ai pensé à ton systeme que tu m'avait envoyé par mail car en interro sur les micros on a eu un systeme de commande de chauffage.
    En fonction de la température ça active 2 bruleurs plus ou moins fort.

  16. #15
    invite3570b5f7

    Re : Programme en C tout bête....

    Re

    Bon j'ai essayé un programme que j'ai mis quelques heures à faire mais j'apprends de plus en plus en faisant des erreurs.
    Maintenant mon programme fonctionne tout comme je le veux.

    Mais....là je suis vraiment bloqué.

    En effet, quand j'appuie sur le BP, il y a lecture des mini dips et ca lance la séquence.

    Mais il faut que quand je rappuie sur le BP, ca fasse dans le sens inverse.

    Et là où je suis bloqué, c'est quand il faut faire en sorte que le programme prenne en compte le 2eme appuie sur le BP pour ré éteindre les relais.
    Parce que le programme peut très bien se dire que d'appuis pour lancer la séquence d'allumage et non celle d'extinction...c'est pas facile à expliqué.

    Je te passe mon programme pour que tu jette un oeuil si tu veux bien.
    Sur ce bout de programme, j'ai mis que 4 relais et non les 8.

    Donc on voit bien où je me suis arrêté : le 2eme test d'appuis sur BP.

    je voulais mettre un " break " pour sortir de la boucle du premier appuie d'allumage mais ça ne convient pas.

    Merci ^^
    Fichiers attachés Fichiers attachés

  17. #16
    invitef86a6203

    Re : Programme en C tout bête....

    personnellement j'aurais bloqué tant que bouton n'est pas relaché

    Code:
          if(PINA.0==0) //appuis sur BP ?
            {
            while (PINA.0==0)  delay_ms(10); // tant que BP n'est pas relaché attendre

    pour la gestion un coup sur 2 il faut mettre un flag (un indicateur ) et le changer d'état à chaque passage
    ; au début
    char flag =0;


    ; dans la boucle après le relachement du bouton
    flag ^= 1; // XOR le bit 0

    après on test l'état , pour de l'une à l'autre fonction
    if (flag AND 1 )
    {
    //fonction 1
    }
    else
    {
    //fonction 2
    }

  18. #17
    invite3570b5f7

    Re : Programme en C tout bête....

    OK merci je vais essayer de mettre ça en œuvre.
    J'ai un peut près compris ce que ton bout de prog veut dire, mais j'aime bien chercher par moi même donc je vais tacher de faire fonctionner ça.

    En plus ça commence vraiment à me plaire la programmation et surtout ça m'évite de faire des usines à gaz de logiques...Parce que sans programmation, j'aurais fait 8 minuteries à base de NE555 ou alors un 4017 en chenillard et des impulsion à 0.5Hz...

Discussions similaires

  1. Création d'un petit programme tout bête
    Par invitee9313ef2 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 12/07/2008, 11h21
  2. Problème tout bête !
    Par invitee0d36548 dans le forum Mathématiques du collège et du lycée
    Réponses: 8
    Dernier message: 05/02/2008, 19h36
  3. problème tout bête
    Par invited78e0bbb dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 01/10/2007, 23h08
  4. pb tout bete de term S
    Par inviteb0dd0da9 dans le forum Physique
    Réponses: 3
    Dernier message: 22/03/2007, 14h24
  5. Programme agenda pense-bête
    Par JPL dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 01/10/2006, 20h34
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...