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'; }
Partager