Bonjour à tous, je suis novice sur arduino (uno) et j'ai quelques petits soucis avec mon petit bout de code. Le but de mon programme étant de récupérer ma position gps pour l'envoyer par module radio à un autre arduino (uno). Seulement voilà, j'arrive a émettre et recevoir un entier avec un programme et à avoir ma position avec un autre programme, mais de faire les deux à la fois dans un même programme ne fonctionne pas, je tiens à préciser que comme je suis novice les deux programmes (émetteur/récepteur et gps) ne sont pas les miens ils ont été modifié pour répondre à mes attentes.
Voici mon programme du récepteur:
le soucis est quand je met vw_setup(2000); le programme stop lors de l'envoi du message.
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 /********************* * gps *10 to GPS Module TX* *09 to GPS Module RX* *emetteur * *********************/ #include <VirtualWire.h> #include <SoftwareSerial.h> #include <TinyGPS.h> SoftwareSerial mySerial(10, 9); TinyGPS gps; void gpsdump(TinyGPS &gps); void setup() { Serial.begin(9600); // set the data rate for the SoftwareSerial port mySerial.begin(9600); delay(1000); Serial.println("emetteur gps"); //vw_setup(2000); Serial.println("Go !"); } void loop() // run over and over { bool newdata = false; unsigned long start = millis(); // Every 5 seconds we print an update while (millis() - start < 5000) { if (mySerial.available()) { char c = mySerial.read(); Serial.print(c); // uncomment to see raw GPS data if (gps.encode(c)) { newdata = true; break; // uncomment to print new data immediately! } } } if (newdata) { Serial.println("Acquired Data"); Serial.println("-------------"); gpsdump(gps); Serial.println("-------------"); Serial.println(); } } void gpsdump(TinyGPS &gps) { long lat, lon; gps.get_position(&lat, &lon); Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon); Serial.print("debut"); vw_send((byte *) &lat, sizeof(lat)); // On envoie le message vw_wait_tx(); // On attend la fin de l'envoi Serial.print("fin"); }
et celui du récepteur :
Je vous remercie d'avance pour l'aide que vous m'apporterez, dans l'attente de vos réponses.
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 /** * Exemple de code pour la bibliothèque VirtualWire Serveur d'envoi de variable */ #include <VirtualWire.h> void setup() { Serial.begin(9600); // Initialisation de la bibliothèque VirtualWire // Vous pouvez changez les broches RX/TX/PTT avant vw_setup() si nécessaire vw_setup(2000); vw_rx_start(); // On peut maintenant recevoir des messages Serial.println("Go !"); } void loop() { float valeur; byte taille_message = sizeof(float); /* La variable "taille_message" doit impérativement être remise à la taille de la variable avant de pouvoir recevoir un message. Le plus simple est d'utiliser une variable locale pour ne pas avoir à réassigner la valeur à chaque début de loop(). */ // On attend de recevoir un message vw_wait_rx(); if (vw_get_message((byte *) &valeur, &taille_message)) { // On copie le message, qu'il soit corrompu ou non Serial.println(valeur); // Affiche le message } }
Partager