Codage morse pour trasmission GPIO sans fil "sans bavures"

Bonjour !
Voilà, le titre de ce post n'est pas très clair, mais je vais clarifier un peu les choses :smiley: :

J'ai un couple émetteur/récepteur AM (sans fil donc) qui n'émettent et ne reçoivent que dans un seul sens, donc impossible d'utiliser des connexions séries I2C, SPI ou même UART.
Je souhaite pourtant faire communiquer ma carte Arduino Uno et mon Raspberry, ce dernier étant l'émetteur et l'Arduino le récepteur.

Étant donné que je ne peux utiliser de connexion série, j'ai pensé bidouillé une sorte de "code morse", en gros :
Le Raspberry envoie une série d'états 1/0 par un port GPIO, 10 impulsions brèves, impulsions reçues par l'Arduino.

Jusqu'ici tout va bien, ça fonctionne et c'est tout simple :

int led = 13;
int radio = 2;
int val = 0;
void setup(){
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
}
void loop(){
  val=digitalRead(radio);
  digitalWrite(led, val);
  Serial.println(val);
  }

Seulement... la fréquence utilisée par le couple émetteur/récepteur est de 433,92MHz, et beaucoup de choses fonctionnent sur cette bande là, notamment la clé de bagnole du voisin et divers "polluants" hasardeux, l'Arduino étant très sensible, la LED blink des fois entre les impulsions envoyées par le Raspberry... c'est clair ? :cold_sweat:

DONC, c'est là que j'ai pensé à utiliser une sorte de code qui dirait : "Arduino, si tu ne reçois pas une série de 10 brèves impulsions à la suite, tu ne fais rien. Si tu reçois 10 impulsions, alors allume la LED pendant 1 seconde".
Voilà.

Mais... je ne sais pas vraiment comment m'y prendre et pourtant j'y suis depuis le début d'après-midi.
J'ai pensé utiliser une fonction qui additionnerais les impulsions reçues, et si celles-ci ne sont pas au total de 10 au bout d'une attente d'une seconde, le compteur reviens a zéro jusqu'à la prochaine impulsion.

Mais... j'ai besoin d'aide, s'il vous plait... =(

Pour s'affranchir du brouillage, mettre un en tête de message et un cheksum

Dans une transmission de données, oui. Mais là c'est une transmission d'état 1/0, je n'ai pas encore trouvé le moyen de faire considérer une trame envoyée par le Raspberry, (une suite particulière d'états, par exemple "101011001") par l'Arduino. La est toute la question.

Étant donné que je ne peux utiliser de connexion série,

Le fait que la liaison soit unidirectionnelle n'empêche pas d'utiliser la liaison série.
La sortie RX de ton Raspi peut entrer dans l'émetteur et le sortie du récepteur entrer dans l'arduino.
C'est plus simple à gérer mais cela ne dispense pas de mettre un contrôle de validité de la liaison.

Dans une transmission de données, oui. Mais là c'est une transmission d'état 1/0,

Une donnée n'est jamais qu'une suite d'états.

RoKN:
J'ai un couple émetteur/récepteur AM (sans fil donc) qui n'émettent et ne reçoivent que dans un seul sens, donc impossible d'utiliser des connexions séries I2C, SPI ou même UART.

Je comprend pas le rapport entre spi, i2c et émetteur/récepteur AM. Tu peux très bien faire du spi et/ou de l'i2c en même temps que de l'UART ...

Et il y a également softwareSerial.h ==> http://arduino.cc/en/Reference/SoftwareSerial

Ce que je veux dire, c'est que mon émetteur (http://www.lextronic.fr/P854-emetteur-43392-mhz-rt6-433.html) et mon récepteur (http://www.lextronic.fr/P855-recepteur-43392-mhz-rr3-433.html) ne peuvent d'envoyer/et recevoir que dans un seul sens. Or, si j'ai bien tout compris, la transmission de données en I2C est bidirectionnelle et le SPI fonctionne avec 4 connections (miso/mosi/sclk/ss). Or, avec mon couple émetteur/récepteur, c'est comme si je n'avais qu'un seul fil directionnel branché, donc transmission de données = impossible.
... bon, après c'est possible que je n'ai pas tout compris, étant débutant dans l'électronique... mais c'est comme ça qu'on apprends :slight_smile:

SPI et I²C nécessitent plusieurs fils horloge + données
Mais la liaison UART ne demande qu'un fil si elle est unidirectionnelle.

L'UART peut être unidirectionnelle ?! oh ?
Mince... je vais creuser alors, je posterai le résultat... Merci :slight_smile:

Oula ok ... mais c'est quoi l'intérêt d'avoir une connexion (ici sans-fil unidirectionnelle on est d'accord) pour de l'autre côté faire une connexion ... avec fils ! Ou alors j'ai pas encore saisi ton projet xD

Parce que quitte à faire ça, soit utiliser des nrf24l01 par exemple et avoir des transceivers, ou bien tout faire par fils (arduino et rasberry peuvent échanger en i2c ou SPI)

Oui l'UART il a un fil RX et un TX T: X Arduino --> RX rasberry et RX Arduino <--- TX Rasberry donc si on en enlève un ...

Bonjour,

Le protocole utilisait par la librairie VirtualWire est disponible dans le pdf de présentation de la dite librairie :wink:
C'est un protocole testé, retesté et fiable, en plus il est pas si terrible à implémenter (par contre sur Rasp. Pi les gpio seront peut être pas assez rapide ...)