Résolu Programme Pic C pour projet STI2D

Wiligan

Membre
Inscription
31 Octobre 2011
Messages
1 157
Réactions
161
Points
7 403
RGCoins
50
Salut !

J'ai un soucis avec mon programme: en fait, ce programme sera sur un microcontrôleur pic qui va servir de "module central" à notre projet.
L'idée est de pouvoir gérer la fréquence cardiaques de moutons, envoyées par des colliers équipés de modules radio.

La fréquence cardiaque de chaque mouton est envoyée avec ce modèle:
[ID][Fréquence]

Le tout est récupéré via une boucle dans le programme principal (qui va attendre de recevoir des caractères).

Ma question: comment faire pour transformer la fréquence qui sera reçue dans le tableau heart_rate[0-2] en quelque chose d'exploitable ? (par exemple: '1' '2' '0' ==> '120').

Merci !

Code:
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
#include <16f877A.h>
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT

#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

#include "LCDPICDEM2006.c"

// Variables //////////////////////////////////////////////////////////////////////////////
const int nbrmouton = 1; // A remplacer par le nombre de moutons (1 à 9)

char heart_rate[3];

int i;
int TempID;
int TempBPM;

struct tab_MOUTONS{
    int ID;
    char BPM;
}MOUTONS[nbrmouton];
  

// Programme principal ////////////////////////////////////////////////////////////////////
void main()
{
   lcd_init();

   for (i = 0 ; i <= nbrmouton ; i++)
        {
    MOUTONS[i].ID = i;
        }

   while(TRUE)
      {
        TempID = getch();

           for (i = 0 ; i < 3 ; i++)
            {
                heart_rate[i] = getch();
            }
      }
}
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

Juste au cas où, je rajoute le programme du collier (en passant, pas sûr du type de variable utilisé !).
Code:
#include <16f877A.h>
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#use I2C(master, sda=PIN_C4, scl=PIN_C3,FORCE_HW)
#include "LCDPICDEM2006.c"

const char IDmouton = 1; // A remplacer par l'ID du mouton entre 1 et 9

char heart_rate;

// Programme principal
void main()
{
   lcd_init();
   while(TRUE)
      {
      i2c_start();
      i2c_write(0xA1);
      heart_rate = i2c_read(0);
      i2c_stop();

      lcd_gotoxy(1,1);
      printf(lcd_putc, "\fFrequence:\n%c BPM",heart_rate); // Affiche la fréquence sur le LCD
      printf("%c%c",IDmouton, heart_rate); // Fréquence envoyée au module central
   
      delay_ms(1000);
      }
}
 
Dernière édition:
Très sincèrement je doute beaucoup que tu trouve quelqu’un dans la possibilité de t'aider ici surtout que le C ses un peut en arrière tout ça.
Par ailleurs je comprend pas trop bien la question de ton sujet, ça serais bien si tu pouvais développer un peut plus?
 
Très sincèrement je doute beaucoup que tu trouve quelqu’un dans la possibilité de t'aider ici surtout que le C ses un peut en arrière tout ça.
Par ailleurs je comprend pas trop bien la question de ton sujet, ça serais bien si tu pouvais développer un peut plus?

Bah en même temps faute de budget on nous fait bosser sur des vieux trucs de 2006 ! (Mais au moins ça fonctionne !)

En fait on doit protéger les moutons des attaques de loup, et pour ça on va avoir un système en plusieurs parties: le "module central", et les colliers.

Les colliers vont capter la fréquence cardiaque du mouton et l'envoyer à intervalle régulier au module central.
Chaque collier à son identifiant propre, du coup quand il va envoyer la fréquence cardiaque, il va envoyer (par exemple pour l'ID 1 et une fréquence de 120 BPM): 1120.

Le module central va recevoir tout ça, et va stocker l'identifiant dans une variable TempID, et la fréquence dans un tableau heart_rate[0-2].

Mon soucis c'est au niveau de ce tableau justement.
Pour récupérer la fréquence cardiaque, le module radio que l'on va installer sur le collier va envoyer tout ça caractère par caractère, donc 1 1 2 0.

Le module va d'abord récupérer l'identifiant (pas de soucis), mais là où ça coince c'est pour la fréquence cardiaque, puisqu'elle va être stockée dans un tableau à l'aide d'une boucle, donc elle sera inutilisable en tant que tel puisqu'il faudrait la transformer en variable (chaîne de caractère, ou en entier par exemple), pour pouvoir la comparer à la fréquence cardiaque d'un mouton stressé pour activer ou non le répulsif.

Voilà, j'espère avoir apporté plus de précisions !
 
Ne jamais utilisé de variable globales, la règle d'or en programmation !
Passons, en gros tu veux juste que les valeurs de ton tableau sois collées ? ex: 'A' 'e' '9' => "Ae9" ?
Si c'est sa, et bhen c'est justement à quoi sert un tableau, là, tu dis que tu as un tableau, ah bon mais un tableau de quoi ? Un tableau de char */[] ! Sois une chaine de caractère, donc qu'est-ce qu'il ne va pas ?
Si tu veux afficher par exemple le tableau, donc les " valeurs collées ": printf("array: %s\n", heart_rate);
 
Cette réponse a aidé l'auteur de cette discussion !
Ne jamais utilisé de variable globales, la règle d'or en programmation !
Passons, en gros tu veux juste que les valeurs de ton tableau sois collées ? ex: 'A' 'e' '9' => "Ae9" ?
Si c'est sa, et bhen c'est justement à quoi sert un tableau, là, tu dis que tu as un tableau, ah bon mais un tableau de quoi ? Un tableau de char */[] ! Sois une chaine de caractère, donc qu'est-ce qu'il ne va pas ?
Si tu veux afficher par exemple le tableau, donc les " valeurs collées ": printf("array: %s\n", heart_rate);

Merci !
Je vais peut être pouvoir avancer demain grâce à toi !
Le soucis avec les projets de STI2D c'est qu'on nous lance là dedans sans aucune expérience, et j'ai dû apprendre vite fait sur le tas avec la documentation et les tutos trouvés sur le net ... Donc c'est pas parfait et je galère !

Par contre pourquoi pas de variables globales ?
 
Merci !
Je vais peut être pouvoir avancer demain grâce à toi !
Le soucis avec les projets de STI2D c'est qu'on nous lance là dedans sans aucune expérience, et j'ai dû apprendre vite fait sur le tas avec la documentation et les tutos trouvés sur le net ... Donc c'est pas parfait et je galère !

Par contre pourquoi pas de variables globales ?
Derien : )
Jamais de variables globales car ils peuvent être utilisées partout dans le programme !
 
Oh et j'avais pas vu, mais la fonction main, c'est pas void mais int comme le veut la norme !
  1. int main(void)
  2. int main(int argc, char **argv)
  3. int main(int argc, char *argv[])
Voici les 3façons d'écrire la fonction main.
 
Oh et j'avais pas vu, mais la fonction main, c'est pas void mais int comme le veut la norme !
  1. int main(void)
  2. int main(int argc, char **argv)
  3. int main(int argc, char *argv[])
Voici les 3façons d'écrire la fonction main.

Bah ... ça par contre c'est le prof qui nous impose cette syntaxe, donc je sais pas trop :x
 
Retour
Haut