Archives par mot-clé : reports

Arduino : Manipulateur CW de numéro de série pour concours

Avec l’ARRL 10M contest qui s’approche je me suis dit qu’il serait de bon ton de me remuer l’arrière-train pour enfin programmer ce manipulateur électronique spécial numéro de série pour les concours. Cet article fait suite à celui-ci sur une balise CW à partir du micro-contrôleur Arduino (http://xv4y NULL.radioclub NULL.asia/2011/07/01/balise-cw-a-base-de-micro-controleur-arduino/).

La majorité de nos transceivers actuels intègrent un manipulateur électronique à mémoire, mais peu embarquent la possibilité d’envoyer les “reports” ou plutôt les numéros de série durant les concours.

J’ai donc fait un petit programme sur Arduino qui vient combler ce manque. La plateforme matérielle et la base du code seront décrites dans le prochain numéro de Radioamateur Magazine (http://www NULL.malibrairienumerique NULL.fr/librairie/). Ce montage viendra sur la prise “straight key” de votre émetteur ou en parallèle de la sortie de votre manipulateur électronique externe si celui-ci ne fait pas les numéros de série.

Je vous mets le code brut de fonderie sur cette page, à vous de l’adapter. Il fonctionne mais il lui manque encore à mon goût la possibilité d’envoyer plus vite de 599 que le numéro de série en lui-même. J’ai finalement ajouté cette fonctionnalité en quatre lignes de codes, et c’est propre. Il manque encore la possibilité de dépasser le numéro de série de 999 et mettre ou non les zéros devant. Cela dit je ne pense pas m’éterniser plus sur ce code depuis que j’ai découvert ce dont je parle ici (http://xv4y NULL.radioclub NULL.asia/2011/12/14/arduino-un-manipulateur-cw-complet/). Les commentaires devraient vous aider à comprendre le code et l’adapter.

Apparemment le code source s’affiche mal, vous trouverez un fichier texte du code source sur ce lien (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2011/12/CW_Contest1 NULL.txt).

// Générateur de reports pour concours (contests) 599+numéro de série
// Vitesse variable par potentiomètre entrée A0, commande transistor pin D12 et LED pin D13
// Lecture des commandes par 3 broches 6, 7 et 8
// Codage de l'alphabet par Hans Summers G0UPL et Stephen Farthing G0XAR

// Version 0.9
// 09/12/2011 par Yannick DEVOS XV4Y

// Définition de l'alphabet sous forme binaire
// 0 = dot, 1 = dash
const int A	=	0b11111001;
const int B	=	0b11101000;
const int C	=	0b11101010;
const int D	=	0b11110100;
const int E	=	0b11111100;
const int F	=	0b11100010;
const int G	=	0b11110110;
const int H	=	0b11100000;
const int I	=	0b11111000;
const int J	=	0b11100111;
const int K	=	0b11110101;
const int L	=	0b11100100;
const int M	=	0b11111011;
const int N	=	0b11111010;
const int O	=	0b11110111;
const int P	=	0b11100110;
const int Q	=	0b11101101;
const int R	=	0b11110010;
const int S	=	0b11110000;
const int T	=	0b11111101;
const int U	=	0b11110001;
const int V	=	0b11100001;
const int W	=	0b11110011;
const int X	=	0b11101001;
const int Y	=	0b11101011;
const int Z	=	0b11101100;
const int _SPC	=       0b11101111;
const int _0	=	0b11011111;
const int _1	=	0b11001111;
const int _2	=	0b11000111;
const int _3	=	0b11000011;
const int _4	=	0b11000001;
const int _5	=	0b11000000;
const int _6	=	0b11010000;
const int _7	=	0b11011000;
const int _8	=	0b11011100;
const int _9	=	0b11011110;
const int _BRK	 =      0b11010010;
const int _WAIT  =	0b10000000;

// Format du message : 1er nombre = longueur, Caractères utilisent les constantes pour une équivalence binaire
const int msg[] = {10, T, _1, _2, _3, _4, _5, _6, _7, _8, N}; // Chiffres seulement avec abbréviations pour 0 et 9

// Attribution des broches
const byte inUP = 8;    // Broche 8 pour incrémenter les numéros de série
const byte inRPT = 7;   // Broche 7 pour répéter les numéros de série
const byte inDWN = 6;   // Broche 8 pour décrémenter les nuémros de série

// Réglages par défaut
const byte nbRepetition = 2;

// Déclaration et initilisation des variables
byte msgIndex = 1;
byte inc_bit = 8;
byte character = _SPC;
boolean start = false;
byte seqIndex = 8; // On démarre trop haut pour ne pas initialiser la lecture de suite
int sequence = 0;
byte repetition = 0;
int vitesse = 100;

byte key = 0;
byte etat = 0;

void setup()  {
  // on declare La patte 13 (LED intégrée) comme sortie
  pinMode(13, OUTPUT);
  // on declare les pattes inUP, inRPT et inDWN (Entrée numérique) comme entrées et on met en place la résistance de pull-up
  pinMode(inUP, INPUT);
  digitalWrite(inUP, HIGH);
  pinMode(inDWN, INPUT);
  digitalWrite(inDWN, HIGH);
  pinMode(inRPT, INPUT);
  digitalWrite(inRPT, HIGH);
  // Initilisation du générateur de nombres aléatoires avec la lecture d'une patte non connectée
  randomSeed(analogRead(A2));
} 

// Ici le micro-controleur bouclera indéfiniement
void loop()  { 

  if (repetition