IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Faire une action pendant x secondes [Non suivi]


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut Faire une action pendant x secondes
    Bonjour à tous j'ai un très gros problème pour mon programme en langage C, j'aimerais faire une action pendant 2.5 secondes, est-ce que c'est possible et comment faut-il que je fasse ? Certes ça ne me simplifierait pas mon programme mais ça me permettrait d'utiliser deux capteurs en moins dans mon projet donc un coup réduit. Merci d'avance

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Lolo7
    Bonjour à tous j'ai un très gros problème pour mon programme en langage C, j'aimerais faire une action pendant 2.5 secondes, est-ce que c'est possible et comment faut-il que je fasse ? Certes ça ne me simplifierait pas mon programme mais ça me permettrait d'utiliser deux capteurs en moins dans mon projet donc un coup réduit.
    Ce n'est pas très clair tout ça. Explique un peu mieux ton problème.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Donc en fait, j'ai appris les bases de la programmation en c au lycée, je suis actuellement en classes préparatoires aux grandes écoles et dans le cadre de mon tipe je commande l'ouverture d'une porte via un microcontroleur. J'ai donc conçu un programme en langage C à implanter dans le microcontroleur. J'ai pour l'instant deux capteurs qui me détectent la position ouverte ou fermée. Mais afin de réduire le coût de ce système, je souhaiterais tout simplement faire l'action OUVRIR PORTE pendant 2.5 secondes plutôt que d'avoir deux capteurs qui me détectent les fins de course. Par exemple lorsqu'on programme sur AUTOMGEN, on peut mettre des temporisations, etc, je souhaiterais savoir si on peut faire de même en langage c et comment ? Je tiens à préciser que ce système ne sera en aucun cas conçu, ce n'est que de la théorie.

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben un truc dans le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    OUVRIR PORTE
    SLEEP 2,5 sec
    FERMER PORTE
    Ca va pas ça ?

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    voilà le programme dans son état actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    /**definitions des capteurs**/
    #define  chat_int (0x01)
    #define  chat_ext (0x02)
    #define  battant_ferm (0x04)
    #define  battant_ouv_ext (0x08)
    #define  battant_ouv_int (0x10)
     
    /**Constantes de commandes moteur**/
    #define  ouv_int (0xFE)
    #define  ouv_ext (0xFD)
    #define  ferm_int (0xFB)
    #define  ferm_ext (0xF7)
    #define  arreter_moteur (0xFF)
     
    /**Inclusions des fichiers **/
    #include <io8535v.h>
    #include <macros.h>
     
    /**Déclarations des Fonctions**/
    void Initports ();
     
    /**Programme Principal**/
    void main()
    {
    Initports(); /*Initialisation des ports*/
     while(1)
     {
      if ((chat_ext & PINA)== chat_ext) /*chat détecté coté extérieur ?*/
    	{
    	 do PORTB = ouv_int; /*ouvrir le battant coté intérieur*/
    	 while ((battant_ouv_int & PINA)!= battant_ouv_int); /*battant ouvert coté intérieur ?*/
    	 do PORTB = arreter_moteur; /*arrêter moteur*/
    	 while (((chat_ext | chat_int) & PINA) != 0x00); /*chat détecté ?*/
    	 do
    	 PORTB = ferm_int; /*fermer le battant coté intérieur*/
    	 while ((battant_ferm & PINA)!= battant_ferm); /*battant fermé ?*/
    	 PORTB = arreter_moteur; /*arrêter moteur*/
    	}
      else if (( chat_int & PINA) == chat_int) /*chat détecté coté  intérieur ?*/
    	{
    	 do PORTB = ouv_ext; /*ouvrir le battant coté extérieur*/
    	 while ((battant_ouv_ext & PINA)!= battant_ouv_ext); /*battant ouvert coté extérieur ?*/
    	 do PORTB = arreter_moteur; /*arrêter moteur*/
    	 while (((chat_ext | chat_int) & PINA) != 0x00); /*chat détecté ?*/
    	 do PORTB = ferm_ext; /*fermer le battant coté intérieur*/
    	 while ((battant_ferm & PINA)!= battant_ferm); /*battant fermé*/
    	 PORTB = arreter_moteur; /*arrêter moteur*/
    	} 
      else PORTB = arreter_moteur; /*arrêter moteur*/
     }
    }
     
    /**Fonction initialiser ports**/
    void Initports ()
    {
     DDRA=0x00; /*PORT A en entrée*/
     DDRB=0xFF; /*port B en Sortie*/
     PORTB=arreter_moteur; /*arrêter moteur*/
    }

  6. #6
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Salut a toi !

    Pense a la balise code !!!

    Quelques petites remarques qui n'ont pas grand chose a voir mais :

    - indente mieux ton code ça sera bien plus lisible
    - main retourne int

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Voir mon post d'en haut.

    Je rajouterais autre chose au vue de ton code.

    Sur ton µc je suppose que tu as un moyen pour temporiser ou bien compter non ?
    Tu n'a qu'a configurer ton µc qui compter 2,5 sec et appeler un handler qui fermera la porte.

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Je sais pas, c'est pour ça que je demande conseil, on ne m'a pas appris à temporiser. Mais est-ce qu'avec ce que tu viens de me dire, la porte va bien s'ouvrir pendant 2,5 secondes ? Je veux qu'elle s'ouvre pendant 2.5 secondes, puis ensuite, elle se referme quand le chat n'est plus détecté.

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par GyZmoO
    - main retourne int
    Pas obligatoirement en programmation sur µc.

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Je comprends aps grand chose à ce que vous me dites, on m'a juste appris à faire des programmes simples, je ne suis pas encore en école d'ingénieur. Et à popos de la question sur le microcontroleur, c'est AT8535 mais je ne sais pas s'il y a un moyen de temporiser ou compter. il n'existe aps une fonction simple ?

  11. #11
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Lolo7
    Je comprends aps grand chose à ce que vous me dites, on m'a juste appris à faire des programmes simples, je ne suis pas encore en école d'ingénieur. Et à popos de la question sur le microcontroleur, c'est AT8535 mais je ne sais pas s'il y a un moyen de temporiser ou compter. il n'existe aps une fonction simple ?
    Tu n'as pas le datasheet ?

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    j'ai absolument pas besoin de tester le programme ou de l'implanter, je souhaite juste un programme qui soit correcte sur papier et que je puisse expliquer à l'oral. quant au datasheet, je ne sais pas ce que c'est. C'est juste qu'au lycée on m'a appris à programmer sur ce type de microcontroleur.

  13. #13
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Si j'ai tout bien compris, cela reviendrait à positionner une sortie de ton microcontroleur à un etat donné pendant 2,5 secondes.
    Pour cela tu peux utilser le timer de ton microcontroleur. Il suffit de le programmer pour qu'il te genère une interruption à intervalle régulier.
    Dans ta routine d'IT tu incrémentes un compteur.
    Donc en gros, il faut
    - Positionner la sortie dans l'étant qui va bien
    - Autoriser les IT timer
    - Dans ta routine d'IT, incrémenter un compteur.
    Lorque ce compteur est égale à une valeur representant 2,5 secondes,
    repositionner la sortie dans l'état inverse.

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Merci pour le conseil, mais existe-t-il une méthode plus simple ? une fonction ?

  15. #15
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par crocodilex
    Si j'ai tout bien compris, cela reviendrait à positionner une sortie de ton microcontroleur à un etat donné pendant 2,5 secondes.
    Pour cela tu peux utilser le timer de ton microcontroleur. Il suffit de le programmer pour qu'il te genère une interruption à intervalle régulier.
    Dans ta routine d'IT tu incrémentes un compteur.
    Donc en gros, il faut
    - Positionner la sortie dans l'étant qui va bien
    - Autoriser les IT timer
    - Dans ta routine d'IT, incrémenter un compteur.
    Lorque ce compteur est égale à une valeur representant 2,5 secondes,
    repositionner la sortie dans l'état inverse.
    C'est pour ça qu'il a besoin du datasheet.

    En fait le datasheet c'est un gros document qui t'explique ce que peux faire ton µc et comment le faire. C'est un document technique le plus souvent en anglais disponible sur le site du constructeur normalement.

    Il te sera surement expliqué dedans comment configurer ton µc en mode timer ou compteur.

  16. #16
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    voilà ce que j'ai trouvé, mon professeur de terminale m'avait donné ça mais je ne l'ai jamais utilisé et j'y comprends pas grand chose, je suis qu'un simple débutant.

    http://wtsworldfra.free.fr/atmel/Doc...0AT8535_V2.pdf

  17. #17
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Rohlala ça fait longtemps que j'ai pas fait de µc. Donc là il faut jouer avec les registres TCNT0, TCCR0 et TIFR pour faire ce que tu veux.

    Ensuite tout va se jouer sur la fréquence d'horloge et la source d'horloge que tu va choisir.

    Normalement il y a une formule qui dit quelle est la valeur à mettre dans TCNT0 pour avoir le temps que tu souhaites en fonction de la source d'horloge.

    Mais je ne m'en souviens plus. Je vais essayer de retrouver.

  18. #18
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    merci beaucoup pour votre aide

  19. #19
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Lolo7
    merci beaucoup pour votre aide
    A combien est cadencé ton µc ? En MHz

  20. #20
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    j'en ai aucune idée, j'ai pas de microcontroleur, c'est juste que j'ai appris à programmer sur celui-ci au lycée (le lycée en avait plusieurs) et c'est apparemment l'un des plus simples donc j'ai choisi de l'utiliser pour mon projet.

Discussions similaires

  1. Faire apparaître une fenêtre pendant 30 secondes
    Par vg-matrix dans le forum Débuter
    Réponses: 4
    Dernier message: 18/06/2008, 19h53
  2. Faire une pause de quelque secondes
    Par philkeeper dans le forum Flash
    Réponses: 6
    Dernier message: 13/06/2007, 18h14
  3. faire une action lors de frappes clavier
    Par wag71 dans le forum Access
    Réponses: 9
    Dernier message: 20/12/2006, 16h00
  4. Faire une action sur Control + C
    Par bluecurve dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2006, 00h19
  5. Comment faire une action, par rapport au temps
    Par Happy dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/11/2005, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo