Code réception DEL SFH757V

Bonsoir à tous,
Pour un cours je dois relier deux arduino ensemble par un câble optique, un arduino envoie un message lumineux en binaire avec une DEL SFH757V et l’autre reçoit le message avec une DEL similaire don’t j’ai oublié le nom exact.
J’ai fait un code pour que l’émetteur envoie un SOS simple avec allumé/éteint en tant que 1 et 0 (message optique normal) mais j’ai du mal à coder la réception, que la DEL qui reçoit le message lumineux puisse détecter les lettres en binaires, pourriez vous m’aider svp ?
Je suis vraiment un débutant en arduino, je n’ai pas de connaissances en C, C# ou C++ donc ça n’aide pas trop :confused:

Bonsoir et Bienvenue !

SI tu montrais déjà ton code d'émission ?

Pour cela bien suivre le paragraphe suivant extrait des Bonnes Pratique du Forum
https://forum.arduino.cc/t/les-bonnes-pratiques-du-forum-francophone/861014#utilisation-de-quelques-outils-1

si la référence du composant utilisé en réception ne revient pas (SFH250 ? SFH551 ?.) , probablement une photodiode et non une DEL.......montres le dans une photo nette et indiques avec détails et précison comment tu comptes le relier à la carte Arduino......ça a une certaine importance pour le code .

En fait le message je l’avais fait en morse parce que plus simple sur le moment mais je vais le changer en binaire. Je mets des photos du montage émetteur avec la DEL blanche, du récepteur avec la DEL noire, des références des DEL ainsi que mon code.
Le câble noir est le câble de fibre optique

Ps: apparemment je ne peux envoyer qu’une seule photo car je suis un nouveau membre, je vais les envoyer une par une

Émetteur:

Récepteur:


Et pour moins de photos, la DEL emetteur c’est une SFH757 ou SFH757V et la DEL récepteur c’est une SFH250V

code posté en photo = inutile, inexploitable !! :no_entry:

Lis bien le texte du lien suivant pour bien publier ton code , dans le corps du message comme indiqué plus haut
https://forum.arduino.cc/t/les-bonnes-pratiques-du-forum-francophone/861014#utilisation-de-quelques-outils-1

la doc du récepteur SFH250V est ici : https://www.farnell.com/datasheets/3029078.pdf
le fabricant montre (figure 4) un montage en inverse pour le tester : cathode vers VCC, résistance entre anode et masse.

Le petit courant (µA) traversant la photodiode quand elleest illuminée produit une chute de tension dans la rédistance, chute de tension qu'il faut acquérir pour détecter l'arrivée des photons dans la fibre.

SI cette tension est suffisement élévée (>3V) il suffit de faire un DIgitalRead() sur une entrée numérique de la carte Arduino pour repérer l'arrivée de la lumière ......avant de coder pour pouvoir distinguer points et traits.....
la réception avec son décodage est souvent plus complexe que l'émission !

Désolé je n'avais pas compris comment faire, dis moi si c'est bon comme ça:

void S_morse();
void O_morse();

void setup() {
      DDRB = B00100000;
      Serial.begin(9600);
}


void loop() {
   S_morse();
   O_morse();
   S_morse();
   delay(1000);
}

void S_morse() {

  PORTB = B00100000;
  delay(100);
  PORTB = B00000000;
  delay(100);
  PORTB = B00100000;
  delay(100);
  PORTB = B00000000;
  delay(100);
  PORTB = B00100000;
  delay(100);
  PORTB = B00000000;
  delay(100);
  
}

void O_morse() {

  PORTB = B00100000;
  delay(300);
  PORTB = B00000000;
  delay(100);
  PORTB = B00100000;
  delay(300);
  PORTB = B00000000;
  delay(100);
  PORTB = B00100000;
  delay(300);
  PORTB = B00000000;
  delay(100);
  
}

pas lu le code mais oui, c'est comme ça qu'il faut le partager , c'est lisible même sur un smartphone et en bonus en passant sur l'angle en haut à droite , on peut cliquer pour faire un copié collé du code vers l'IDE Arduino pour le tester
:+1:

ok je vois merci, désolé c'est mon premier post :sweat_smile:

Aux bornes de ta résistance RLde 68kOhm (si je vois bien) tu auras peut être une tension suffisante lors de l'arrivée de la lumière dans la fibre, si Ip est d'environ 50µA
montage

Normalement toutes les valeurs physiques sont correctes il manque plus que la partie code que je ne comprends vraiment pas ':confused:

Je vais jeter un coup d'oeil à digitalread si ca peut m'aider merci

Bonjour

dant ton code d'émission tu manipules le Port B dans son ensemble juste pour gérer l'u de ses 8 bits
Tu passes à côté de petites fonctiosn sympas offertes par l'IDE Arduino!
Un digitalWrite() aurait fait l'affaire pour manipuler le bit du PortB où est connectée la diode
A l'inverse digitalRead() permet de connaître le niveau logique arrivant sur un bit individuel.
Si le niveau logique en réception est OK
Vois ensuite la fonction pulsein() pour conaîtef la durée d'un état haut afin de discriminer le points et les traits.

Je suis vraiment un débutant en arduino, je n’ai pas de connaissances en C, C# ou C++ donc ça n’aide pas trop

les tutoriels d'initiation à Arduino ne manquent pas sur Internet ....... ça aide !!

Déjà, avant de parler code, on parle algorithmie. Là, il n'y a besoin d'aucune connaissance d'un quelconque langage de programmation. Questions:

  • Comment faire pour décoder une suite de points et de trait ?
  • Comment identifier le début du mot?
  • identifier les différents caractères?
    Au passage, tu ne respectes pas la durée normalisée entre les lettres.
    Toutes les durées sont définies par rapport à la durée du point.
    symbole point : durée élémentaire
    symbole trait : durée égale à 3 points
    pause entre 2 symboles : durée égale à un point
    pause entre 2 lettres : durée égale à 3 points
    pause entre 2 mots : durée égale à 7 points

Bonjour vladipoo

Pourquoi ne pas directement passer à une liaison série en ajoutant un port série avec SoftwareSerial, tu as, ainsi, tout les outils pour transmettre et recevoir. Le signal série serait, ainsi, "transporté" optiquement.

Cordialement
jpbbricole

En fait le message je l’avais fait en morse parce que plus simple sur le moment

assez simple au départ..... complexe à l'arrivée .....

Pourquoi ne pas directement passer à une liaison série en ajoutant un port série avec SoftwareSerial,

+1 Si la transmission physique d'un bit est validée , une liaison par SoftSerial (dans le cas d'une carte UNO) prend en charge la transmission des octets, c'est nettement plus simple que de tenter de passer par le Morse !!

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