pb langage c, devpic
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

pb langage c, devpic



  1. #1
    inviteba5c14d8

    Exclamation pb langage c, devpic


    ------

    bonjour,
    je suis en train de réaliser la programmation de mon pic(16f84) pour gérer un distributeur de croquette pour chat... (sa va en faire sourir bcp je pense)

    bref, j'ai un problème...
    voici mon algorithme


    #include std84.h
    #include bit84.h

    #define led1 porta.0 //DEL absence croquette dans premier compartiment
    #define led2 porta.1 //DEL batterie faible
    #define moteur1 porta.3 //moteur sens normal
    #define moteur2 porta.4 //moteur inverse
    #define comp portb.0 //comparateur : pic courant
    #define batt portb.2 //batterie faible
    #define mrp portb.3 //minirupteur position roue
    #define int3 portb.4 //deux chats
    #define int2 portb.5 //un chat
    #define int1 portb.6 //un chatton
    #define acroc portb.7 // absence croquette dans roue

    char n


    // programme principal
    void main()
    {
    trisa = 0b00000000;
    trisb = 0b11111101;

    for(;
    {
    while(acroc); //pas de croquette dans le premlier compartiment
    {
    led1 = 1;
    prog();
    }
    led1 = 0;
    if (int1) //si un chatton
    prog(); //faire tourner la roue 1/5
    if (int2) //si un chat
    for(0;2;n++) //faire tourner la roue 2/5
    {
    prog();
    }
    if (int3) //si deux chats)
    for(0;4;n++) //faire tourner la roue 4/5
    {
    prog();
    }
    for(0;208;n++) //temporisation 12h
    {
    delays(0.208);
    }
    }
    }

    //sous programme faire tourner le moteur 1/5
    void prog()
    {
    while(!mrp) //si minirupteur roue = 0
    {
    moteur1 = 1; //faire tourner le moteur sens normal
    } //jusqu'à roue bien
    moteur1 = 0; //arrêt moteur
    }


    //programme d'interruption
    void interrupt intf: surintensite()
    {
    if (comp)
    do
    {
    moteur1 = 0;
    moteur2 = 1;
    }
    while (!comp);
    moteur2 = 0;
    }


    et lorsque je simule en pas à pas, et que je choisit "int2" il execute le sous programme en boucle infinie alors qu'il ne devrait le faire que 2 fois, je ne trouve pas de solution... alors si jamais qqun pouvais m'aider.. je susi toute seule et dans la galère!

    merci bien..

    -----

  2. #2
    invitefdfc258c

    Re : pb langage c, devpic

    Ouah, mets y l'indentation la prochaine fois =D

    while (!comp)

    Tu as vérifié que ta condition se termine bien à un moment ?

    for(0;4;n++) //faire tourner la roue 4/5
    {

    ça ne fonctionne pas ça.
    Il faut for ( n = 0; n <4; n++) ou for ( n = 1; n <=5; n++ )

    Tu as fait plusieurs fois cet oublie.

    Aller au boulot =p

  3. #3
    inviteba5c14d8

    Re : pb langage c, devpic

    oui je suis daccord avec toi mais j'ai déjà essayer de faire for(n=0;n<5;n++)
    et cela ne changeait rien, j'me suis donc di ke ct mieu de revenir au plus simple.. hi et j'ai pa très bien compri le
    "Ouah, mets y l'indentation la prochaine fois =D"

    en tout k merci bien d emaider!!

  4. #4
    inviteba5c14d8

    Re : pb langage c, devpic

    a aussi, oui j'ai bien verifier que mon while(!comp) se termine
    j'ai poser la kestion a ma prof delectro et elle a garder mon algorithme elle arrive pa a trouver le pb...
    pourtan j'ai essayer avec plusieur stimulus pour simuler et rien de différen

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

    Re : pb langage c, devpic

    je viens de refaire le test sur la version deval de devpic et mon test ne sort pas de ma boucle definie a la fin des deux cycles!
    grrrrrrr

  7. #6
    invitefdfc258c

    Re : pb langage c, devpic

    L'indentation c'est mettre des espaces en début de ligne pour que ce soit propre à lire.

    Exemple :

    Code:
    #include	<stdio.h>
    #include	<stdlib.h>
    
    
    int	main(void)
    {
    	int i = 0;
    	
    	for ( i = 0; i < 10; i++ )
    	{
    		if ( i == 5 )
    		{
    			
    		}
    		else
    			{
    			
    			}
    	}
    
    	return EXIT_SUCCESS;
    }
    Pour le for :

    en C pour tous tests, 0 est considéré comme la valeur "faux" et toutes les autres valeurs sont considérées comme "vrai".

    La synthaxe d'une boucle for est la suivante :

    for ( initialisation; condition de continuité; action )

    Or d'après ce que je t'ai mis plus haut, 5 est toujours vraie, donc ta condition est toujours vraie donc tu restes toujours dans ta boucle for !

  8. #7
    inviteba5c14d8

    Re : pb langage c, devpic

    okay, mais alors jpeu mettre supérieur?
    for(n=0;n>4;n++)

    et pour les indentations sa les a pa prise mais je les ai bien mise sur devic

  9. #8
    invitefdfc258c

    Re : pb langage c, devpic

    Pour les indentations tu peux utiliser la balise CODE qui est représenté par un # je crois sur le forum.


    TU peux mettre supérieur mais vérifie que celà corresponde bien à ce que tu attends :

    for(n=0;n>4;n++)

    Pour n = 0, faire mon action et incrémenter n de 1, si n est supérieur à 4 alors continuer.

    Cette boucle est sans fin à partir de n = 5.
    Mais comme tu initialises n à 0 au départ, tu n'effectueras qu'une seule fois l'action, puisqu'au second coup n vaudra 1, ce qui est inférieur à 4.

  10. #9
    inviteba5c14d8

    Re : pb langage c, devpic

    daccord mai comen faire als pour faire marcher mon programme seulement 2foi pour int2, et 4foi pour int3??

  11. #10
    invite0e5af214

    Re : pb langage c, devpic

    Salut,

    J'ai apporté quelque corrections a ton code, des commentaires, et de l'indentation.
    Dis nous si ca marche mieux

    Bon courage


    Code:
    
    #include std84.h
    #include bit84.h
    
    #define led1 porta.0 //DEL absence croquette dans premier compartiment
    #define led2 porta.1 //DEL batterie faible
    #define moteur1 porta.3 //moteur sens normal
    #define moteur2 porta.4 //moteur inverse
    #define comp portb.0 //comparateur : pic courant
    #define batt portb.2 //batterie faible
    #define mrp portb.3 //minirupteur position roue
    #define int3 portb.4 //deux chats
    #define int2 portb.5 //un chat
    #define int1 portb.6 //un chatton
    #define acroc portb.7 // absence croquette dans roue
    
    
    
    
    // programme principal
    void main(void)
    {
    
    	char n;       // Utiliser tant que possible des variables LOCALES (tu auras droit aux variables globales quand tu seras une virtuose du C ;) )
    
    
    	trisa = 0b00000000;
    	trisb = 0b11111101;
    
    	for(; ;)     // ( soite, même si while(1) c'est plus propre )
    	{
    
    /* Quand tu a des conditions, dans les whiles ou les if, il est bien et prudent de mettre la condition en clair, et ne pas compter sur le compilateur pour comprendre ce que tu voulais dire. J'ai corrigé dans la suite.*/
    
    
    		while(acroc == 1) //ATTENTION, pas de point virgule après l'instruction while
    		{
    			led1 = 1;
    			prog();
    		}
    
    		led1 = 0;
    		if (int1 == 1) //Après un IF, il faut mettre des accolades {}
    		{
    			prog(); //faire tourner la roue 1/5
    		}
    
    		if (int2 == 1) //si un chat
    		{
    			for(n=0 ; n<2 ; n++) //faire tourner la roue 2/5
    			{
    				prog();
    			}	
    		}
    	
    		if (int3 == 1) //si deux chats)
    		{
    			for(n=0 ; n<4 ; n++) //faire tourner la roue 4/5
    			{
    				prog();
    			}
    		}
    
    		for(n=0 ; n<208 ; n++) //temporisation 12h
    		{
    			delays(0.208);
    		}
    	} 
    }
    
    
    //sous programme faire tourner le moteur 1/5
    void prog()
    {
    	while(mrp == 1) //si minirupteur roue = 0
    	{
    		moteur1 = 1; //faire tourner le moteur sens normal
    	} //jusqu'à roue bien
    	moteur1 = 0; //arrêt moteur
    }
    
    
    //programme d'interruption
    void interrupt intf: surintensite()
    {
    	if (comp == 1)
    	{
    		do
    		{
    			moteur1 = 0;
    			moteur2 = 1;
    		}
    	while (!comp);
    
    	moteur2 = 0;
    }

  12. #11
    inviteba5c14d8

    Re : pb langage c, devpic

    okay, jv voir tou sa mais la il faut ke je parte!!
    merci vraimen bcp pour tout!!
    et si jms jpeu aider un jour.. hi
    a beinto bonne soiréee

  13. #12
    inviteba5c14d8

    Re : pb langage c, devpic

    bonjour, me revoila..
    j'aimerais savoir si qqun pourrai me dire si je peux raccourcir mon algorithme pour en fair un de 20ligne pour pouvoir l etester ac la version devaluation de devpic
    emcri

  14. #13
    invite0e5af214

    Re : pb langage c, devpic

    Ah non 20 lignes faut pas déconner quand même.

    Sinon trouve un autre compilateur. (MCC18 qui s'intègre à MPLAB par exemple)

    Je suis arrivé à ca...mais il reste une quarantaine de lignes :

    Code:
    void main(void){
    	char n;
    	trisa = 0b00000000;
    	trisb = 0b11111101;
    	while(1){
    		switch(PORTB){
    			case(0x10) :
    				prog();
    				prog();
    			case(0x20) :
    				prog();
    			case(0x40) :
    				prog();
    			default :
    		}
    		for(n=0 ; n<208 ; n++) //temporisation 12h
    		{
    			delays(0.208);
    		}
    	} 
    }
    void prog()
    {
    	while(portb.3 == 1){
    		moteur1 = 1; //faire tourner le moteur sens normal
    	} //jusqu'à roue bien
    	moteur1 = 0; //arrêt moteur
    }

  15. #14
    inviteba5c14d8

    Re : pb langage c, devpic

    okay.. jvoulais essayer qd mm, merci bine en tout k!!

Discussions similaires

  1. Du langage
    Par invitec15fc0a6 dans le forum Psychologies (archives)
    Réponses: 7
    Dernier message: 18/12/2007, 15h48
  2. Langage C
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 26/02/2007, 06h22
  3. Langage C
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 14/02/2007, 20h47
  4. langage c
    Par invite131aec15 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 31/08/2006, 22h38
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...