Langage C
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Langage C



  1. #1
    invitee6cf0735

    Langage C


    ------

    Bonjour,
    Je voudrais réaliser un programme avec un afficheur LCD. J'aimerai que ce programme puisse allumer le rétro éclairage de mon afficheur en fonction de la lumière. J'avais pensé à une commande du style level_light = 2 ( la valeur de ma ldr) mais ça marche pas.
    Voilà ce que j'ai écris :

    // Controle rétro-éclairage
    void retro_eclairage()

    {
    #define eclairage PIN_D3
    (level_light == 2)
    if (eana2 < level_light)
    {
    Output_high;
    }
    else
    {
    Output_low;
    }

    }
    Si quelqu'un pouvais m'aider, ça serais très gentil.
    Merci.

    -----

  2. #2
    Coincoin

    Re : Langage C

    Salut,
    Utilise les balises "code" pour garder l'indentation et rendre le message plus lisible.

    ça marche pas.
    C'est-à-dire ? Ça compile pas ? ça compile mais ça plante ? ça compile, ça plante pas mais ça fait rien ? ça compile, ça plante pas, ça fait ce que tu veux mais ça attire les girafes ?
    Sois plus explicite si tu veux qu'on puisse t'aider.
    Encore une victoire de Canard !

  3. #3
    zoup1

    Re : Langage C

    Je pense qu'il manque aussi un contexte à tout cela.
    Parce que utiliser un afficheur LED se fait avec un contexte qu'il faut préciser.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  4. #4
    invitee6cf0735

    Re : Langage C

    Re bonjour,
    En fait quand je dis ça marche pas, il y a une erreur qui s'affiche en bas de la page et qui me dit que la commande n'est pas valide.
    etant novice dans ce domaine très complexe, je ne suis pas arrivé à trouver une commande qui me permetterai de remplacer celle que j'ai mise. En fait j'ai repris un programme déjà fait et j'ai ajouter des valeurs pour que la fonction rétro éclairé soit accessible. J'ai tout nommé ça fait rien de plus.

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

    Re : Langage C

    Voici le programme entier :
    Si vous pouviez me donner quelques piste car c'est pour un examen en fait.
    Code:
    #include <16F877A.h>         // Déclaration du type de PIC utilisé
    
    
    // Définition des paramètres pour la liaison série
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
    
    // Définition des E/S TOR sur carte DISTRIBUTEUR
    #define rplein    PIN_B1
    #define distrib   PIN_B2
    #define aurg      PIN_B4
    #define pistol    PIN_B5
    #define mot       PIN_C0
    #define ev1       PIN_C1
    #define mforc     PIN_C3
    #define wd        PIN_C4
    #define comm      PIN_C5
    #define eclairage PIN_D3
    
    // Déclaration des fonctions utilisées (utile pour le compilateur)
    void initialisation();
    void acqui_analog();
    void envoi_controle();
    void recoi_controle();
    void retro_eclairage();
    void affiche();
    void calcul();
    void lit_entrees();
    void traite_auto();
    void ecrit_sorties();
    void convert(float nombre);
    
    // Déclarations du type des variables globales
    // int1 : 1 bit
       int1 pistolet, inter_dist, r_plein, arret_urg, marche_forcee;
       int1 moteur, vanne_dist;
       int1 autorise, dist, swd, scomm;
       int1 tempo_en_cours, fin_tempo;
    
    // flottant
       float Input_high;
    
    // int : 8 bits (-128 à 127)
       int nboctet_rec, nboctet_emi, trame_tx1[15], trame_rx1[6];
       int tempo, nb_it, ligne_lcd, trans, etape, b, i, indexana;
    
    // char : 8 bits (0 à 255)
       char dimil, mil, cent, diz, unit;
    
    // int16 = 16 bits (0 à 65535)
       int16 eana0, eana1, eana2;
       int16 teana0[5], teana1[5], teana2[5];
    
    // int32 : 32 bits
       int32 prixlitre, volume, prixtotal, impulsion, seana0, seana1, seana2;
    
    
    // ==================   PROGRAMME PRINCIPAL   =======================
    void main()
    {
           initialisation();
           // Autorisation des interruptions
           enable_interrupts (INT_TIMER1);    // Débordement timer 1 (103ms)
           enable_interrupts (INT_EXT);       // Impulsion sur port B0
           enable_interrupts (INT_RDA);       // Réception sur liaison série
           enable_interrupts (GLOBAL);        // Autorisation globale des IT
    
       do
          {
             acqui_analog();         // Lecture des entrées analogiques
             lit_entrees();          // Lecture des entrées TOR
             traite_auto();          // Traitement du cycle d'automatisme
             ecrit_sorties();        // Ecriture des sorties TOR
             calcul();               // Calcul prix total
             recoi_controle();       // Réception trame de la carte controle
    	   retro_eclairage();      // Controle led retro-éclairage lcd
             affiche();              // Affichage sur LCD
          }
       while(1);                     // Le programme reboucle indéfiniment.
    }
    //   ===================   FIN DU PROGRAMME PRINCIPAL  ================
    
    
    //   =======   FONCTIONS APPELEES PAR LE PROGRAMME PRINCIPAL  =========
    
    
    // Initialisation du microcontroleur
    void initialisation()
    {
       // Configuration des timers
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
       setup_timer_2(T2_DISABLED,0,1);
    
       // Configuration du convertisseur A/N
       setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
       setup_adc(ADC_CLOCK_INTERNAL);
       setup_psp(PSP_DISABLED);
       setup_comparator(NC_NC_NC_NC);
       setup_vref(FALSE);
    
       // Initialisation des variables programme
       etape = 0;
       nb_it = 0;
       prixlitre = 1111;
       volume = 0;
       impulsion = 0;
       prixtotal = 0;
       autorise = 0;
       dist = 0;
       nboctet_emi = 0;
       nboctet_rec = 0;
       ligne_lcd = 0;
       tempo_en_cours = 0;
       fin_tempo = 0;
       indexana = 0;
       for (i = 0 ; i < 5 ; i++)
       {
          teana0[i] = 0;
          teana1[i] = 0;
       }
    
       // Initialisation de l'afficheur LCD
       delay_ms(500);                         //Attente démarrage LCD
       lcd_init();                            // Commande init LCD
       lcd_gotoxy(1,1);                       // Affichage titre système
       lcd_putc("    Station GPL     ");
       lcd_gotoxy(1,2);
       lcd_putc("BAC STI Electronique");
       lcd_gotoxy(1,3);
       lcd_putc("     Theme 2009     ");
       lcd_gotoxy(1,4);
       lcd_putc("Lycee JBDLS ** Lyon");
       for (b = 0 ; b < 4 ; b++)              // Clignotement pour test LED
       {
          delay_ms(600);
          output_high(eclairage);
          output_high(wd);
          output_high(comm);
          delay_ms(600);
          output_low(eclairage);
          output_low(wd);
          output_low(comm);
       }
    }
    
    
    // Lecture des entrées TOR
    void lit_entrees()
    {
          r_plein = input(rplein);
          inter_dist = input (distrib);
          arret_urg = input (aurg);
          pistolet = input (pistol);
          marche_forcee = !input(mforc);
    }
    
    // Traitement du cycle d'automatisme
    void traite_auto()
    {
       if (arret_urg == 0)     // Arrêt d'urgence
          {
             etape = 0;
             dist = 0;
          }
    
       switch (etape)
       {
          case 0:              // Etape "ARRET"
             moteur = 0;
             dist = 0;
             vanne_dist = 0;
             tempo_en_cours = 0;
             fin_tempo = 0;
    
             trans = (autorise || marche_forcee) && arret_urg;
             if (trans == 1)
                etape = 1;
          break;
    
    
          case 1:              // Etape "PRET"
             moteur = 0;
             dist = 0;
             vanne_dist = 0;
             autorise = 0;
    
             trans = pistolet;
             if (trans == 1)
                etape = 2;
          break;
    
    
          case 2:              // Etape "ATTENTE"
             moteur = 1;
             dist = 1;
             vanne_dist = 0;
             volume = 0;
             impulsion = 0;
    
             trans = pistolet && inter_dist;
             if(trans == 1)
                etape = 3;
    
             trans = !pistolet;
             if(trans == 1)
                etape = 0;
          break;
    
    
          case 3:              // Etape "EN COURS"
             moteur = 1;
             dist = 1;
             vanne_dist = 1;
    
             trans = !pistolet || !inter_dist;
             if(trans == 1)
                etape = 4;
    
             trans = r_plein;
             if(trans == 1)
                etape = 5;
          break;
    
    
          case 4:              // Etape "PAUSE"
             moteur = 1;
             dist = 1;
             vanne_dist = 0;
    
             if ((tempo_en_cours == 0) && (fin_tempo == 0))
             {
                tempo = 15;
                tempo_en_cours = 1;
             }
    
             trans = !r_plein && pistolet && inter_dist;
             if (trans == 1)
             {
                fin_tempo = 0;
                tempo_en_cours = 0;
                etape = 3;
             }
    
             trans = !pistolet || fin_tempo;
             if (trans == 1)
             {
                fin_tempo = 0;
                tempo_en_cours = 0;
                etape = 5;
             }
          break;
    
    
          case 5:              // Etape "FIN"
             moteur = 0;
             dist = 0;
             vanne_dist = 0;
             autorise = 0;
    
             if ((tempo_en_cours == 0) && (fin_tempo ==0))
             {
                tempo = 10;
                tempo_en_cours = 1;
             }
    
             trans = fin_tempo && !r_plein && !pistolet && !inter_dist;
             if (trans == 1)
             {
                fin_tempo = 0;
                tempo_en_cours = 0;
                etape = 0;
             }
          break;
       }
    }
    
    
    // Ecriture des sorties TOR
    void ecrit_sorties()
    {
          if (moteur == 0)
             output_low(mot);
          else
             output_high(mot);
    
          if (vanne_dist == 0)
             output_low(ev1);
          else
             output_high(ev1);
    
    }
    
    // Acquisition et mémorisation des entrées analogiques
    void acqui_analog()
    {
       set_adc_channel(0);                 // Sélection CAN voie 0 (pression)
       delay_us(10);
       teana0[indexana] = read_adc();      // Acquisition voie 0
    
       set_adc_channel(1);                 // Sélection CAN voie 1 (temperature)
       delay_us(10);
       teana1[indexana] = read_adc();      // Acquisition voie 1
    
       set_adc_channel(2);                 // Sélection CAN voie 2 (luminosite)
       delay_us(10);
       teana2[indexana] = read_adc();      // Acquisition voie 2
    
       indexana++;
       if (indexana == 5)
          indexana = 0;
    
       seana0 = 0;                         // Filtrage numérique par calcul de la
       seana1 = 0;                         // moyenne sur 5 mesures
       seana2 = 0;
    
       for (i = 0 ; i < 5 ; i++)
       {
          seana0 = seana0 + teana0[i];
          seana1 = seana1 + teana1[i];
    	seana2 = seana2 + teana2[i];
       }
       eana0 = seana0 / 5;
       eana1 = seana1 / 5;
       eana2 = seana2 / 5;
    }
    
    // Calcul prix total
    void calcul()
    {
       prixtotal = (prixlitre * volume) / 1000;  // prixtotal en 1/100 Euro
                                                 // prixlitre en 1/1000 Euro
                                                 // volume en 1/100 L
       if (prixtotal > 99999)
          prixtotal = 99999;
    }
    
    
    
    // Réception trame de la carte CONTROLE
    void recoi_controle()
    {
       if (nboctet_rec > 3)                // Si au moins 4 octets reçus
       {
          disable_interrupts (INT_RDA);    // Blocage des interruptions
          nboctet_rec = 0;                 // Réinitialisation compteur octets
          if  (trame_rx1[0] == 'C')        // Si le message reçu est OK
          {                                // Traitement du message reçu
             prixlitre = trame_rx1[1] + trame_rx1[2] * 256;
             if (prixlitre > 9999)
                prixlitre = 9999;
    
             if ((trame_rx1[3] && 0x01) == 1)
                autorise = 1;
    
             envoi_controle();             // Réponse à carte contrôle
    
             if (scomm == 0)              // LED communication
             {
                output_high(comm);
                scomm = 1;
             }
             else
             {
                output_low(comm);
                scomm = 0;
             }
          }
          enable_interrupts (INT_RDA);     // Relance interruptions
       }
    }
    
    
    // Controle rétro-éclairage
    void retro_eclairage()
    
    {
    	#define eclairage PIN_D3
    	(level_light == 2)
    	if (eana2 < level_light)
    	{
    		Output_high;
    	}
    	else
    	{
    		Output_low;
    	}
    
    }
    
    
    // Envoi trame à la carte CONTROLE
    void envoi_controle()
    {
       trame_tx1[0] = 'D';                    // Préparation message réponse
       trame_tx1[2] = (volume/256);           // Volume sur 2 octets
       trame_tx1[1] = (volume - trame_tx1[2] * 256);
    
       trame_tx1[4] = (prixtotal/256);        // Prix total sur 2 octets
       trame_tx1[3] = (prixtotal - trame_tx1[4] * 256);
    
       trame_tx1[5] = dist;                   // Distribution en cours (0 ou 1)
    
       trame_tx1[7] = (eana0/256);            // Valeur entrée analogique 0
       trame_tx1[6] = (eana0 - trame_tx1[7] * 256);
    
       trame_tx1[9] = (eana1/256);            // Valeur entrée analogique 1
       trame_tx1[8] = (eana1 - trame_tx1[9] * 256);
    
       trame_tx1[10] = etape;                 // N° étape en cours
    
       for (nboctet_emi = 0 ; nboctet_emi < 11 ; nboctet_emi++)
       {
             putc(trame_tx1[nboctet_emi]);   // Envoi sur port série de 11 octets
       }
    }
    
    
    // Gestion de l'afficheur LCD
    void affiche()
    {
        ligne_lcd++;
        if (ligne_lcd > 3)
          ligne_lcd = 0;
    
       switch (ligne_lcd)         // Affichage 1 ligne à la fois
       {
       case 0 :
          // affichage état du distributeur
          lcd_gotoxy(1,1);
          lcd_putc("Etat = ");
    
          if (etape == 0)
          lcd_putc("ARRET        ");
    
          if (etape == 1)
          lcd_putc("PRET         ");
    
          if (etape == 2)
          lcd_putc("ATTENTE      ");
    
          if (etape == 3)
          lcd_putc("EN COURS     ");
    
          if (etape == 4)
          {
          lcd_putc("PAUSE     ");
          convert(tempo);
          lcd_putc(diz+'0');
          lcd_putc(unit+'0');
          lcd_putc('s');
          }
    
          if (etape == 5)
          lcd_putc("FIN DISTRIB  ");
       break;
    
    
       case 1 :
          // affichage volume
          lcd_gotoxy(1,2);
          lcd_putc("Volume = ");
          convert(volume);
    
          if (dimil == 0)
             lcd_putc(" ");
          else
             lcd_putc(dimil+'0');
    
          if ((dimil == 0) && (mil == 0))
             lcd_putc(" ");
          else
             lcd_putc(mil+'0');
          lcd_putc(cent+'0');
          lcd_putc('.');
          lcd_putc(diz+'0');
          lcd_putc(unit+'0');
          lcd_putc(" L   ");
       break;
    
       case 2:
          // affichage prix litre
          lcd_gotoxy(1,3);
          lcd_putc("Prix U =   ");
          convert(prixlitre);
          lcd_putc(mil+'0');
          lcd_putc('.');
          lcd_putc(cent+'0');
          lcd_putc(diz+'0');
          lcd_putc(unit+'0');
          lcd_putc(" E/L");
       break;
    
     case 3:
          // affichage prix total
          lcd_gotoxy(1,4);
          lcd_putc("Prix T = ");
          convert(prixtotal);
    
          if (dimil == 0)
             lcd_putc(" ");
          else
             lcd_putc(dimil+'0');
    
          if ((dimil == 0) && (mil == 0))
             lcd_putc(" ");
          else
             lcd_putc(mil+'0');
          lcd_putc(cent+'0');
          lcd_putc('.');
          lcd_putc(diz+'0');
          lcd_putc(unit+'0');
          lcd_putc(" E   ");
       break;
       }
    }
    
    // Conversion nombre en 5 caractères ASCII
    void convert(float nombre)
    {
       if (nombre > 99999)
          nombre = 99999;
    
       dimil = nombre/10000;
       mil = (nombre/1000) - (10 * dimil);
       cent = (nombre/100) - (100 * dimil + 10 * mil);
       diz = (nombre / 10) - (1000 * dimil + 100 * mil + 10 * cent);
       unit = nombre - (10000 * dimil + 1000 * mil + 100 * cent + 10 * diz);
    }

  7. #6
    zoup1

    Re : Langage C

    Ben si c'est pour un examen, il faudrait peut-être que tu y arrives par toi même alors...

    Pour info : majuscules et minuscules ne sont pas indifférentes donc Output_low n'est pas la même chose que output_low

    en C, une fonction prend toujours des paramètres (même si il n'y en a pas - c'est même ce qui syntaxiquement permet de faire la différence entre une fonction et une variable). donc output_low(mod); n'est pas la même chose que output_low;
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  8. #7
    invitee6cf0735

    Re : Langage C

    Merci, mais je ne veux pas que vous me donniez la réponse, même si je serais super content, mais plutot que vous me donniez des tuyaux du genre comment peut on dire dans le programme le nom de ma valeur ldr , moi j'avais mis level_light mais ce n'est pas ça et je ne vois pas ce que je peut mettre d'autre.
    Merci de m'avoir répondu.

  9. #8
    zoup1

    Re : Langage C

    Ben mon pauvre, tu n'es sans doute pas au bout de tes peines.
    Tu dois donc avoir eu des cours et tout cela sur la question ?
    Là on a l'impression que tu débarques sans rien connaitre et que tu cherches de l'aide désespérement...

    Regarde le programme et essaye de comprendre comment il fonctionne.
    Avec un peu de sueur, tu comprendras peut-être comment dans quelle variable est stocké la luminosité...
    Et si tu regardes le reste du programme tu devrais pouvoir t'en sortir pour ajouter ce que tu veux en faire.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  10. #9
    invitee6cf0735

    Re : Langage C

    Merci, je vais essayer, pour la question de débarquer, ce n'est pas une impression car si tu veux mon cours était que le prof nous a filer un bouquin et c'était à nous de nous débrouiller, pas d'explication donc tu comprend surment maintenant pourquoi je demande de l'aide déséspérément.

  11. #10
    whoami

    Re : Langage C

    Bonjour,
    Citation Envoyé par TitusV Voir le message
    Merci, je vais essayer, pour la question de débarquer, ce n'est pas une impression car si tu veux mon cours était que le prof nous a filer un bouquin et c'était à nous de nous débrouiller, pas d'explication donc tu comprend surment maintenant pourquoi je demande de l'aide déséspérément.
    Tu peux porter plainte contre ton prof qui semble ne pas avoir fait le travail pour lequel il est là.

Discussions similaires

  1. Langage C
    Par invited92bca68 dans le forum Logiciel - Software - Open Source
    Réponses: 11
    Dernier message: 16/11/2008, 14h33
  2. Du langage
    Par invitec15fc0a6 dans le forum Psychologies (archives)
    Réponses: 7
    Dernier message: 18/12/2007, 15h48
  3. Langage C
    Par invite8c0f8078 dans le forum Logiciel - Software - Open Source
    Réponses: 23
    Dernier message: 05/04/2007, 01h57
  4. langage c
    Par invite131aec15 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 31/08/2006, 22h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.