Je viens demander un peu d'aide pour un projet étudiant, ce dernier est de faire un concours de robot entre promotion. Mon objectif personnel est de crée une balise (ou phare) infrarouge qui envoie un signal codée en ASCII (un nombre entre 0 et 9). J'ai réussi a faire "clignoter" la LED (vérifier avec un oscilloscope) mais avec des délais ce qui, je pense n'est pas le mieux.
Mon idée était d'utiliser les tableau (comme en C) où quand un 1 est détecter une impulsion est envoyer durant une oscillation(de base l'horloge est de 38kHz) donc environ 0.0000263 secondes (1/38 000). Mais je n'arrive pas a envoyer une impulsion ni a utiliser (si possible) un autre moyen que les délais.
Je précise que j'utilise une carte crée par nos soin utilisant un Atmega328p donc comme l'arduino uno(programmé comme un uno).
J'utilise un émetteur IR, je ne m'occupe pas de la réception.
J'ai du mal m'exprimer, avec les librairies que vous m'avez partager je ne vois pas comment je peut modifier pour passer d'un émetteur pour Samsung ou LG a une balise "standard/sans marque". :
C'est quoi une balise standard?
Soi tu fais ton protocole toi même soit tu utilises un protocole déjà existant et en ce cas pourquoi pas Samsung ou LG?
Si vous regardez la librairie IRLib2 ci dessus on peut faire des trucs à bas niveau.. mais si vous ne vous mettez pas d'accord avec celui qui reçoit, c'est comme si vous parliez chinois à un breton... généralement ça va pas le faire
Ce que j’appelle une balise standard est celle qui de base n'est pas destinée a une marque en particulier(je met le schéma de la carte).
je vais regarder la librairie IRLib2 un petit peu alors si on peux envoyer des impulsion
Merci je reviens vers vous pour donner mon avancement.
Julie
Ton schéma, ce n'est pas un émetteur infra rouge, mais un récepteur infra rouge avec une porteuse 38kHz.
D'après ton premier message tu sembles croire que 38kHz c'est la vitesse de transmission et qu'il y a un bit transmis tout les 1/38000ème de seconde.
38kHz c'est la fréquence de la porteuse (qui est éliminé par un filtre incorporé dans le circuit de réception) et la vitesse de transmission est beaucoup plus faible.
Voir par exemple le codage RC5
Oui, je vous aient transmis le schéma du récepteur, l’émetteur étant une LED (ce qui est banal).
J'ai regarder un peu le doc de IRLib mais je ne comprend toujours pas comment arriver a mes fins
J'ai également regarder le site que vous m'avez transmis en rapport avec la fréquence et dans ce dernier ils multiplie par 32 la périodes, mais pourquoi 32 ?. De plus comment je peut crée en arduino les 1 et les 0 (comme indiquer avec les chronogramme du site) ?
J'ai regarder attentivement l'exemple je comprend la boucle setup mais pas le loop, en effet je ne vois pas où je dit que c'est a 1 et a 0 et comment je dis ce qui se trouve dedans
comme dit plus haut vous devez définir une trame pour 0 et une trame pour 1. pour le dire autrement vous envoyez "coucou" ça veut dire 0 et si vous envoyez "salut" ça veut dire 1
dans l'exemple ils font référence au sketch "rawRecv.ino" qui permet de capture un signal quelconque pour un protocole inconnu
prenez la télécommande du salon, appuyez sur le 0 - ça génère une trame. notez là. idem en appuyant sur 1.
voilà vous avez défini vos 2 trames.
il ne vous reste plus qu'à émettre la bonne trame au bon moment.
Comment je définis ma trame? Si j'ai bien compris on définis les 1 et les 0 et ensuite on les appelle les uns a la suites des autres pour crée le caractère ASCII comme je souhaite. Mais comment (concrètement) je définis les 1 et les 0?
Vous faites un tableau uint16_t rawDataZERO[RAW_DATA_LEN]={...} et idem pour rawDataUN en définissant un contenu différent. Quand vous voulez émettre un 1 vous balancez rawDataUN et pour un zéro rawDataZERO
J'ai une erreur quand j'essaye de compiler le programme , il est écrit que je n'ai pas les librairies sauf que j'ai bien installer ces dernières.
De plus j'ai définis le tableau 0 avec un code ASCII et le 1 avec un 0 (qui n'envoie rien) mais je ne suis pas sûr de ce que j'ai fait ....
Je met le code si jamais
#include <IRLibSendBase.h> //We need the base code
#include <IRLib_HashRaw.h> //Only use raw sender
IRsendRaw mySender;
void setup() {
Serial.begin(9600);
delay(2000); while (!Serial); //delay for Leonardo
Serial.println(F("Every time you press a key is a serial monitor we will send."));
}
/* Cut and paste the output from "rawRecv.ino" below here. It will
* consist of a #define RAW_DATA_LEN statement and an array definition
* beginning with "uint16_t rawData[RAW_DATA_LEN]= {…" and concludes
* with "…,1000};"
*/
uint16_t rawDataZERO[RAW_DATA_LEN]={0,1,1,0,1,0,0}
uint16_t rawDataONE[RAW_DATA_LEN]={0}
void loop() {
if (Serial.read() != -1) {
//send a code every time a character is received from the
// serial port. You could modify this sketch to send when you
// push a button connected to an digital input pin.
mySender.send(rawData,RAW_DATA_LEN,36);//Pass the buffer,length, optionally frequency
Serial.println(F("Sent signal."));
}
}