Tableau avec Software Serial

Bonjours à tous, je voulais savoir s'il été possible d'envoyer un tableau contenant plusieurs variables via des module RF HC-12. J'ai fait pas mal d'essais mais rien de très concluant.
Voici mon code :
Emetteur :

#include <SoftwareSerial.h>

SoftwareSerial HC12(2, 3);


void setup() {
  Serial.begin(9600);            
  HC12.begin(9600);           
}

void loop() {
  int x = analogRead(A5);
  int y = analogRead(A4);

  int pos[2] = {x, y};

  HC12.write(pos);
  //Serial.println(pos[0]);
  //Serial.println(pos[1]);
  delay(50);
}

Et récepteur :

#include <SoftwareSerial.h>

SoftwareSerial HC12(2, 3); // HC-12 TX Pin, HC-12 RX Pin

int x;
int y;

int Led = 8;
int Led2 = 7;

void setup() {
  Serial.begin(9600);            
  HC12.begin(9600);          
  pinMode(Led, OUTPUT); 
  pinMode(Led2, OUTPUT);
}

void loop() {
  int pos[2]={x, y};
  
  while (HC12.available()) {
    pos = HC12.read();
    Serial.println(pos[0]);
  }
}

Merci d'avance

vous devez envoyer tous les octets donc il faut faire

HC12.write((byte*)pos, sizeof pos); // edit pour le type

ensuite il faut adapter le côté réception pour aussi lire tous les octets

Sa ne marche pas, je ne voit pas ou est l'erreur.

void loop() {
  int x = analogRead(A5);
  int y = analogRead(A4);

  int pos[2] = {x, y};

  HC12.write(pos, sizeof pos);
  //Serial.println(pos[0]);
  //Serial.println(pos[1]);
  delay(50);
}

Le message d'erreur indique ceci :
no matching function for call to 'SoftwareSerial::write(int [2], unsigned int)'

write() attend un pointeur sur des bytes
Je pense qu'il faut faire

HC12.write((byte *)pos, sizeof pos);

Pour l'émetteur avec la ligne

HC12.write((byte *)pos, sizeof pos);

il n'y a plus d'erreur lors de la compilation.
Mais du côté récepteur, avec la ligne

HC12.read((byte *)pos, sizeof pos);

il y a le message d'erreur suivant :
no matching function for call to 'SoftwareSerial::read(byte*, unsigned int)'

Bonsoir samuelkoh_lanta

Pour rendre la chose plus aisée, le mieux est de mettre toutes les variables ou tableaux de variables dans une structure et d'envoyer et recevoir celle-ci.

Pour l'envoi : HC12.write((byte *)Structure, sizeof Structure);
Pour recevoir : HC12.readByte((byte *)Structure, sizeof Structure);

Ce n'est pas testé!

Cordialement
jpbbricole

Sans la structure aussi - avec readbytes car c’est un tableau

Oui, et un petit tour dans la doc permet généralement de trouver ce qui ne va pas.

Serial/SoftwareSerial = même interface.

Effectivement il manquait seulement readBytes sa fonctionne correctement, merci à vous

Notez bien que ce n’est pas robuste
Si vous ratez un octet vous ne pourrez pas savoir comment vous resynchroniser

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.