Bonjour,

Mon objectif est de pouvoir envoyer mes coordonnées gps sur le réseau sigfox et je veux n'envoyer que la deuxième parti des coordonnées exemple : 50.6381
pour la latitude et de même pour la longitude mais pour l'instant mon code est capable simplement de recevoir les coordonnées gps dans le moniteur arduino pour la partie gps et pour la partie sigfox d'envoyer des données sur sigfox mes pas les coordonnées gps.

je vais vous montrer deux codes le premier est le code qui fonctionne pour le gps et le module sigfox mais je n'arrive pas à faire fonctionner les 2 en même temps et le deuxième est le même code mais modifier pour pouvoir récupérer les coordonnés gps je veux créer 2 variables lat et longi pour pouvoir ensuite les envoyer vient le réseau sigfox mais je rencontre des difficultés à coder cela pouvez-vous m'aider merci.

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
  #include <SoftwareSerial.h>
 
  #define GPS
  #define SIGFOX
 
  #ifdef GPS
  SoftwareSerial gpsSerial(10, 11); // RX, TX (TX not used)
  #endif
  #ifdef SIGFOX
  SoftwareSerial Sigfox(8,7);      // TX, RX
  #endif
 
  const int sentenceSize = 80;
 
  char sentence[sentenceSize];
  static int time = 0;
  static int b = 0;
  const byte Led = 13 ;
   char lat =0 ;       
    void setup()
    {
    //INITIALISATION DU TIMER//
    cli();
    //set timer1 interrupt at 1Hz
    TCCR1A = 0;// set entire TCCR1A register to 0
    TCCR1B = 0;// same for TCCR1B
    TCNT1  = 0;//initialize counter value to 0
    // set compare match register for 1hz increments
    OCR1A = 15624;// = (16*10^6) / (1*1024) - 1 (must be <65536)
    // turn on CTC mode
    TCCR1B |= (1 << WGM12);
    // Set CS10 and CS12 bits for 1024 prescaler
    TCCR1B |= (1 << CS12) | (1 << CS10);  
    // enable timer compare interrupt
    TIMSK1 |= (1 << OCIE1A);   
    sei();//allow interrupts
 
    Serial.begin(9600);
    #ifdef SIGFOX
      Sigfox.begin(9600);
    #endif
    #ifdef GPS
      gpsSerial.begin(9600);
    #endif
 
    pinMode(Led , OUTPUT);
    }
 
      // permet de cibler la fonction qui utilise timer
      ISR(TIMER1_COMPA_vect)  
      {
      time ++;
      Serial.println(time);
      if(time >=3 /*600*/)
      {//tous les 10 min soit 60 * 10 = 600
          digitalWrite(Led , HIGH); //allumer L1
          time = 0;
          }
          else
          {
            digitalWrite(Led , LOW);
          }
     }        
 
 
     void loop()
    {
      static int i = 0;
     /* #ifdef SIGFOX
        Sigfox.listen();
        if (Sigfox.available() > 0) 
        {       
          Serial.write(Sigfox.read());
        }
        sigfox ();
        #endif*/
        #ifdef GPS
        if(time == 2)
        {
          gpsSerial.listen();
 
            if (gpsSerial.available())
            {           
              char ch = gpsSerial.read();
 
               if (ch != '\n' && i < sentenceSize)
                {
                  sentence[i] = ch;
                  i++;
                }
                else
                {                
                  sentence[i] = '\0';
                  i = 0;
                  displayGPS();
                }     
            }        
        }
        #endif
        #ifdef SIGFOX
        Sigfox.listen();
        if (Sigfox.available() > 0) 
        {       
          Serial.write(Sigfox.read());
          //lat =  displayGPS(); 
        }
        sigfox ();
        #endif
    }
 
 
  void sigfox (/*float lat ,float longi*/)
    {
    if (b == 0)
    {
      char lat;
      lat =  displayGPS();
       //longi =
      Serial.println("AT$SF=4567b9");
      // Serial.println("AT");
      Sigfox.println("AT$SF=lat");
      b = 1;
    }
  }
 
  void displayGPS()
  {
    char field[200];
    getField(field, 0);
 
    if (strcmp(field, "$GPRMC") == 0)
    {
      char lat;
      Serial.print("Lat: ");
      getField(field, 3);  // number
 
      Serial.print(atof(field)/100);
      getField(field, 4); // N/S
      Serial.print(atof(field)/100);
 
 
      Serial.print(" Long: ");
      getField(field, 5);  // number
 
      Serial.print(atof(field)/100);
      getField(field, 6);  // E/W
      Serial.println(atof(field)/100);    
    }          
  }
 
  void getField(char* buffer, int index)
  {
    int sentencePos = 0;
    int fieldPos = 0;
    int commaCount = 0;
 
    while (sentencePos < sentenceSize)
    {
      if (sentence[sentencePos] == ',')
      {
        commaCount ++;
        sentencePos ++;
      }
 
      if (commaCount == index)
      {
        buffer[fieldPos] = sentence[sentencePos];
        fieldPos ++;
      }
 
      sentencePos ++;
    }
 
    buffer[fieldPos] = '\0';
  }



le deuxiéme :

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
  #include <SoftwareSerial.h>
 
  #define GPS
//  #define SIGFOX
 
  #ifdef GPS
  SoftwareSerial gpsSerial(10, 11); // RX, TX (TX not used)
  #endif
  #ifdef SIGFOX
  SoftwareSerial Sigfox(8,7);      // TX, RX
  #endif
 
  const int sentenceSize = 80;
 
  char sentence[sentenceSize];
  static int time = 0;
  static int b = 0;
  const byte Led = 13 ;
 
    void setup()
    {
    //INITIALISATION DU TIMER//
    cli();
    //set timer1 interrupt at 1Hz
    TCCR1A = 0;// set entire TCCR1A register to 0
    TCCR1B = 0;// same for TCCR1B
    TCNT1  = 0;//initialize counter value to 0
    // set compare match register for 1hz increments
    OCR1A = 15624;// = (16*10^6) / (1*1024) - 1 (must be <65536)
    // turn on CTC mode
    TCCR1B |= (1 << WGM12);
    // Set CS10 and CS12 bits for 1024 prescaler
    TCCR1B |= (1 << CS12) | (1 << CS10);  
    // enable timer compare interrupt
    TIMSK1 |= (1 << OCIE1A);   
    sei();//allow interrupts
 
    Serial.begin(9600);
    #ifdef SIGFOX
      Sigfox.begin(9600);
    #endif
    #ifdef GPS
      gpsSerial.begin(9600);
    #endif
 
    pinMode(Led , OUTPUT);
    }
 
      // permet de cibler la fonction qui utilise timer
      ISR(TIMER1_COMPA_vect)  
      {
      time ++;
      Serial.println(time);
      if(time >=3 /*600*/)
      {//tous les 10 min soit 60 * 10 = 600
          digitalWrite(Led , HIGH); //allumer L1
          time = 0;
          }
          else
          {
            digitalWrite(Led , LOW);
          }
     }        
 
 
     void loop()
    {
      static int i = 0;
     /* #ifdef SIGFOX
        Sigfox.listen();
        if (Sigfox.available() > 0) 
        {       
          Serial.write(Sigfox.read());
        }
        sigfox ();
        #endif*/
        #ifdef GPS
        if(time == 2)
        {
          gpsSerial.listen();
 
            if (gpsSerial.available())
            {           
              char ch = gpsSerial.read();
 
               if (ch != '\n' && i < sentenceSize)
                {
                  sentence[i] = ch;
                  i++;
                }
                else
                {                
                  sentence[i] = '\0';
                  i = 0;
                  displayGPS(lat,longi);
                }     
            }        
        }
        #endif
        #ifdef SIGFOX
        Sigfox.listen();
        if (Sigfox.available() > 0) 
        {       
          Serial.write(Sigfox.read());
        }
       // sigfox (lat,longi);
        #endif
    }
 
 
    float sigfox (float lat1, float longi1)
    {
 
    if (b == 0)
    {
      //lat = getField(field, 4);
      //longi = getField(field, 6); 
      Serial.println("AT$SF=4567b9");
      //Serial.println("AT");
     // Sigfox.println("AT$SF=4567b9");
      b = 1;
    }
  }
 
  float displayGPS(float lat, float longi)
  {
    char field[200];
    getField(field, 0);
 
    if (strcmp(field, "$GPRMC") == 0)
    {
      Serial.print("Lat: ");
      getField(field, 3);  // number
      Serial.print(atof(field)/100);
      getField(field, 4); // N/S
      lat = getField(field, 4);
      Serial.print(atof(field)/100);
 
      Serial.print(" Long: ");
      getField(field, 5);  // number
      Serial.print(atof(field)/100);
      getField(field, 6);  // E/W
      longi = getField(field, 6);
      Serial.println(atof(field)/100); 
 
    return (lat,longi);   
    }          
  }
 
  void getField(char* buffer, int index)
  {
    int sentencePos = 0;
    int fieldPos = 0;
    int commaCount = 0;
 
    while (sentencePos < sentenceSize)
    {
      if (sentence[sentencePos] == ',')
      {
        commaCount ++;
        sentencePos ++;
      }
 
      if (commaCount == index)
      {
        buffer[fieldPos] = sentence[sentencePos];
        fieldPos ++;
      }
 
      sentencePos ++;
    }
 
    buffer[fieldPos] = '\0';
  }