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 :

PPE (à rendre bientot !) Bug dans la fonction principale introuvable.


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut PPE (à rendre bientot !) Bug dans la fonction principale introuvable.
    PPE détécteur de sur-vitesse :
    Tout d'abord, la personne enclenche un seuil (30,50,70,90,110,130) qui correspond a la vitesse limitée dans la zone où il roule. Puis la vitesse de rotation de la roue de la voiture est détecter en fonction du nombre de fronts montants du signal carré qu'il génère. Enfin le programme compare la vitesse seuil à la vitesse de la voiture si il dépasse la vitesse limitée, la voiture affiche sur un cadrant LCD : "ralentissez"


    Code:

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    /*********************************************
    Projet : Détécteur de sur-vitesse
    Version :    
    Date    : 01/03/09
    Auteur  : Roy Alexandre
    etablissement : LYCEE Paul GUERIN NIORT
    Commentaires: Recuperation de la vitesse Seuil 
    Chip type           : AT90S8535
    Clock frequency     : 8,000000 MHz
    Memory model        : Small
    Internal SRAM size  : 512
    External SRAM size  : 0
    Data Stack size     : 128
         
    PORTB   X   X   X   X   posech   posinit  moteur_on    cdeoptos 
    PORTC--> afficheur
    PORTD   X    X   pb5     pb4    pb3    pb2    pb1   dcy
                    |_________________________________|
                           Seuil Choisi
    *********************************************/
     
     
     
     
    #include <90s8535.h>
    #include <delay.h>
    #include <lcd_V3.h>
    #include <string.h>
    #include <stdlib.h>
    #include <cnv2003.h>
     
     
    /********programme récupérer choix utilisateur*******/
     
    void affiche()
    	{
    		lcd_gotoxy(0,0);
    		lcd_putsf("limitation :");
    		lcd_gotoxy(5,1);
    		}
     
     
    int choix()    
    {  
    	int seuil=0;
     
      	while(PINA==0)
       	  { 
         	    lcd_gotoxy(0,0);
         	    lcd_putsf("Limitation ?");
         	    lcd_gotoxy(4,1);
         	    lcd_putsf("         ");    	    
         	  }
     
     
     
    	switch (PINA)
    	{  
    	case 1:
    	affiche();
    	lcd_putsf("30km/h");
    	seuil=80;
         	break;    
     
    	case 2:
    	affiche();
    	lcd_putsf("50km/h");
    	seuil=121;
           	break;     
     
    	case 4:
    	affiche();
    	lcd_putsf("70km/h");
    	seuil=170;
          	break;
     
    	case 8:
    	affiche();
    	lcd_putsf("90km/h");
    	seuil=218;
    	break;
     
    	case 16:
    	affiche();
    	lcd_putsf("110km/h");
    	seuil=257;
    	break;   
     
    	case 32:
    	affiche();
    	lcd_putsf("130km/h");
    	seuil=310;
         	break;
     
    	default:
    	lcd_gotoxy(1,0);
    	lcd_putsf("Erreur");
         	break;
    	}
     
    	return seuil;
    	}
     
     
     
     
     /********programme récuperer vitesse de la voiture*******/
    float chrono; unsigned int i, tempo, tempomax=2;
     
     
    void valide_interrupt_tim0()
    {TIMSK=0x01;}
     
    void init_timer0()
    {TCCR0=0x05;
    TCNT0=61;}
     
    interrupt[TIM0_OVF]void_timer0_ovf()
    {i = i+1;
    chrono=i*0.025;
    tempo=chrono;
    TCNT0=61;}
     
    void inhibe_interrupt_tim0()
    {TIMSK=0x00;} 
     
    int MesureVitesse()
    { 
    int seuil, vitesse;
     
    PORTD=0;
          seuil=0;i=0;tempo=0;
          valide_interrupt_tim0();
          init_timer0();
          #asm("sei") 
             do
             {  
              while(PIND.0==0);
              while(PIND.0!=0);
              seuil=seuil+1;
     
              }
         while(tempo<tempomax);
         #asm("cli")
         inhibe_interrupt_tim0();
         vitesse = seuil; 
     
    return vitesse;
    }
     
     
    /********programme comparer vitesse au seuil*******/
     
    void compa(int seuilcomp, int vitessecomp) 
    {  
    	if(vitessecomp>seuilcomp)
         		{
         		lcd_clear(); 
         		lcd_putsf ("Ralentissez");
         		}
    }
     
     
    /********Fonction principale************/
     
    main()
    {
    int seuilprin=0, vitesseprin =0;
    DDRA=0x00;
    PORTA=0x00;       
    DDRB=0xFF;
    DDRD=0x00;
    lcd_init();
    while(1)
    {
    do
    {
    	seuilprin=choix();
    	lcd_clear();
    }
    while(seuilprin=!80||121||170||218||257||310);
    vitesseprin=MesureVitesse();
    compa(seuilprin,vitesseprin);
    }
    }
    Dans mon code, j'ai un gros problème celui-ci étant dans la fonction main() (pas sur, mais grosse supposition), la récuperation des seuils marche très bien, mais il ne fait pas la comparaison et surtout n'affiche pas le message "ralentissez" pouvez vous m'aider il reste très peu de temps avant de rendre notre projet !!

    ps : le bug fait que lorsqu'un choisi un seuil, il l'affiche puis si on fait tourner le moteur (sans forcement dépasser la vitesse limité le LCD affiche quelque chose style "130km/h"

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Points : 169
    Points
    169
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(seuilprin=!80||121||170||218||257||310);
    est incorrect ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(seuilprin!=(80||121||170||218||257||310) );

    Et encore je ne suis meme pas sur qu'il ne faille pas mettre a chaque fois

    seuilprin!=80 || seuilprin!=121 || etc...

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    et de toutes façons c'est en général l'inverse dans une condition de while (on met des &&). Et surtout avec une série de valeurs, on ferait :


    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
    int Continuer=1 ;
     
    while ( Continuer == 1 )
    {
       switch ( seuilprin )
        {
            case 80 :
            case 121 :
            case 170 :
            case 218 :
            case 257 :
            case 310 :
                  Continuer = 0 ;
                  break ;
     
            default :
                  .....
                  break ;
        }
    }

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par rilou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(seuilprin=!80||121||170||218||257||310);
    est incorrect ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(seuilprin!=(80||121||170||218||257||310) );

    Et encore je ne suis meme pas sur qu'il ne faille pas mettre a chaque fois

    seuilprin!=80 || seuilprin!=121 || etc...
    Et si, il faut le mettre à chaque fois. Sinon le sens est différent (et en général pas du tout ce qu'on veut) alors que le compilateur reste muet.

Discussions similaires

  1. bizarre, IE bug dans une fonction
    Par ypomes dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2011, 22h25
  2. [AC-2003] Appeller une sous fonction dans la fonction principale
    Par MatAir dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/06/2010, 16h04
  3. gros bug dans GIMP, fonction texte
    Par laurentSc dans le forum Imagerie
    Réponses: 1
    Dernier message: 25/10/2009, 18h09
  4. Bug dans la fonction "répéter l'en-tête de groupe sur chaque page"
    Par nanouille56 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 17/10/2006, 08h04
  5. [9i] bug dans la fonction transform XMLType (XSL) ?
    Par Nico57 dans le forum Oracle
    Réponses: 1
    Dernier message: 20/01/2006, 10h11

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