On progresse
On affinera plus tard pour le bug avec 200
On progresse
On affinera plus tard pour le bug avec 200
non le "slave" beep 3 coups très rapides toutes le 5 s mais il me transmet pas les beep du master
il doit y avoir un truc à modifier concernant le slave....
le master m'indique bien la mesure et beep parfaitement...!
Jay, on arrive à piloter un écran comme celui que je vous ai montré avec un Pro Mini...?
Pour le slave faudra que je regards - on connectera sans doute l’écran lcd dessus pour voir ce qu’il reçoit (vous n’avez pas la console ouverte - on est d’accord ?)
Le pro mini fait tout ce que fait la Uno ou nano - il
N’a juste pas la partie usb.
non non je n'ai pas ouvert la console, j'alimente le master et le slave par des accu
Salut - bien arrivé à l’hôtel (confinement obligé, voyage en 2 fois)
Pouvez vous connecter le lcd sur le slave (branchements et déclaration dans le code identiques que sur le master.
Il y a l’import de la bibliothèque et la déclaration de la variable lcd en début de code
puis dans le setup l’appel dinitialisation à rajouter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // address, #cols, #lines. NB other LCD may use 0x3FPuis Modifiez la fonction de réception des codes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // init lcd lcd.begin(); lcd.backlight(); lcd.print(F("Welcome"));Vous devriez alors voir ce que reçoit le slave
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 void checkHC12() { if (HC12.peek() != -1) { // did we get an update from the Master? char received = HC12.read(); switch (received) { case sleepPillCode: goToSleep(); break; case minDistanceBeepCode ... maxDistanceBeepCode: keepAliveChrono = millis(); distanceCode = received; lcd.clear(); lcd.print(F("Code: '")); lcd.print(distanceCode); lcd.print(F("' ")); break; default: break; } } }
Bonjour Jay,
merde c'est con ce confinement...!
bon j'ai tout fait bien dans le code et j'ai branché le LCD ...
master branché et detection code 0
sur le slave j'ai que welcome et mes 3 beep ultra rapide.... j'ai rien d'autre
Salut
De retour
Faut qu’on fasse quelques tests pour voir sir les composants fonctionnent. Je vous envoie un bout de code plus tard dans la matinée
Eh eh Jay le retour....! alors cette Rando...? ca a du faire du bien ....!
très cool les randos, temps magnifique
pouvez vous connecter vos 2 HC-12 à deux Arduino Nano (ou Uno) avec alimentation sur 5V/GND et RX du HC12 connecté à la pin 2 et TX du HC12 connecté à la pin 3 et SET connecté à la pin 4.
puis charger le code suivant sur chacun:
Si vous pouvez connecter les 2 Arduinos sur 2 PC différents c'est plus simple, vous ouvrez la console à 115200 bauds avec "NewLine" en validation des commandes
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 // Author: Jay M for Arduino forums. // Standard MIT License applies. https://opensource.org/licenses/mit-license.php // HC12 documentation @https://opencircuit.shop/resources/file/0f8d974f31fd813604c4d3fb0e9004ec3b483706466/HC-12-Datasheet.pdf const uint8_t hc12RxPin = 2; // connnected to uno acting as Tx const uint8_t hc12TxPin = 3; // connnected to uno acting as Rx const uint8_t hc12SetPin = 4; // used to go to AT mode if connected to GND (10kΩ internal pullup, could float) long hc12Bbaud = 9600; // default HC12 speed. OK with Software Serial. bool ATMode = true; #include <SoftwareSerial.h> SoftwareSerial HC12(hc12TxPin, hc12RxPin); void setATCommandMode(bool activate) { digitalWrite(hc12SetPin, activate ? LOW : HIGH); delay(activate ? 40 : 80); // according to specifications (40ms to be active, 80ms to save changes upon exit) } const uint8_t messageMaxSize = 50; char serialMessage[messageMaxSize + 1] = {'\0'}; // +1 for trailing '\0' byte serialMessageIndex = 0; boolean gotSerialMessage(const char endMarker = '\n') { boolean messageReady = false; int r = Serial.read(); // -1 si erreur, sinon notre charactère if (r != -1) { if (r == endMarker) { if (serialMessageIndex == 0) serialMessage[0] = '\0'; //empty cString serialMessageIndex = 0; messageReady = true; } else if (r != '\r') { // ignore CR serialMessage[serialMessageIndex++] = (char) r; serialMessage[serialMessageIndex] = '\0'; // maintain cString if (serialMessageIndex >= messageMaxSize) serialMessageIndex = messageMaxSize - 1; // don't overrflow } } return messageReady; } void setup() { pinMode(hc12SetPin, OUTPUT); Serial.begin(115200); HC12.begin(hc12Bbaud); setATCommandMode(ATMode); Serial.println(F("READY\n")); } void loop() { if (gotSerialMessage()) { if (!strncmp(serialMessage, "!!", 2)) { ATMode = !ATMode; Serial.println(ATMode ? F("AT command Mode") : F("Serial Mode")); setATCommandMode(ATMode); } else HC12.println(serialMessage); } while (HC12.available()) Serial.write(HC12.read()); }
Si vous n'avez qu'un PC il faudra ouvrir un logiciel d'émulation de terminal série (je suis sur mac, j'utilise CoolTerm) pour vous connecter à un des 2 Arduinos et l'autre pourra être sur la console série de l'IDE.
Une fois que c'est fait tapez AT et validez dans chacune des consoles et dites moi si vous obtenez OK.
si vous avez obtenu "OK", tapez AT+RX et dites moi quelle est la réponse
si vous n'avez pas obtenu de OK, modifiezpour mettre 4800 à la place de 9600 et re-essayez
Code : Sélectionner tout - Visualiser dans une fenêtre à part long hc12Bbaud = 9600; // default HC12 speed. OK with Software Serial.
salut Jay,
desolé du retard... boulot boulot...
bon j'ai testé... mais ca parle pas
j'ai bien mon "ok"
puis sur la sequence "AT+RX" j'ai 9600 FU03 ETC ETC
mais de l'autre coté que dalle
j'ai aussi changé pour 4800 bauds mais idem...
Salut - oui boulot first ;-)
vous avez ça sur les 2 cartes ?
que dit le AT+RX exactement ?j'ai bien mon "ok"
puis sur la sequence "AT+RX" j'ai 9600 FU03 ETC ETC
ben sur mon ordi quand je fait AT+RX
ca me fait 4 ligne (j'ai pas noté) et sur l'autre ordi, rien
par contre sur l'autre ordi (on va l'appeler slave) si je tape AT et entré ca me dit "ok" mais que sur l'ordi slave
c'est normal qu'ils ne se parlent pas s'ils ne sont pas configurés de manière identique
--> il faudrait taper "AT+RX" des deux côtés et regarder si vous avez la même chose
S'ils sont identiques, tapez !! et validez (de chaque côté) - ça fait sortir les modules du mode commande AT et ils sont alors liés. ce que vous tapez d'un côté devrait apparaître de l'autre
je comprend pas trop le but alors...
j'ai les 2 meme arduino avec les 2 HC12 sur 2 ordi differents sur un je tape AT+RX et ca me repond les 4 lignes que j'ai cité et sur l'autre pareil...
Je voudrais évacuer le problème matériel avant de plonger plus dans le code complexe. donc tester une communication simple entre les 2 modules.
La question initiale donc c'est de savoir si les 4 lignes sont EXACTEMENT identiques (et j'aimerais bien les voir) sur les 2 modules. Si ce n'est pas le cas, ils ne peuvent pas communiquer.
Si c'est identique, et qu'après avoir tapé (et validé) !! sur chacune des consoles séries, vous n'arrivez pas à échanger des messages, alors c'est qu'il y a un souci matériel (ou d'interférence)
Salut Jay,
un peu bousculé en ce moments...
bon alors pour la commande AT+RX
que ce soit sur le "maitre ou l'escalve) on obtiens
OK+B9600
OK+RC001
OK+RP:+20Dbm
OK+FU3
si on tape "!!"
on obtiens
serial mode
OK donc les 2 modules sont réglé en configuration usine, par défaut plein pot
avez vous essayé de taper quelque chose une fois que vous aviez entré les !!? Tout ce que vous tapez d'un côté devrait apparaître de l'autre.
oui ca marche d'un coté comme de l'autre
bon signe non...?
cool donc les modules sont fonctionnels!
On va forcer la configuration au cas où:
relancez le code de chaque côté puis tapez dans la console (dans cet ordre):
- AT+P4
- AT+C003
- AT+FU2
- AT+B4800
- !!
sur chacun des modules. Quittez le programme, modifiez dans le code sourcepour mettre à la place 4800 bauds:
Code : Sélectionner tout - Visualiser dans une fenêtre à part long hc12Bbaud = 9600; // default HC12 speed. OK with Software Serial.Rechargez les code, retapez AT+RX
Code : Sélectionner tout - Visualiser dans une fenêtre à part long hc12Bbaud = 4800; // HC12 speed for FU2
vous devriez voir
OK+B4800
OK+RC003
OK+RP:+08dBm
OK+FU2
si vous avez bien cela des 2 côtés, tapez à nouveau !! et vérifiez que ce que vous tapez d'un côté arrive bien de l'autre.
Si ça fonctionne c'est que la puissance et la config sont OK et on peut revenir au montage et code "officiel"
impec tout marche....
on a en gros 20 metres de portée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager