DÉBUT D'UNE SÉRIE PROGRAMMATION ARDUINO
=========================================
/*test RTTY BEACON du module NTX2B
*/
//définir la pin de sortie vers NTX2B
#define RADIOPIN 9
//définir les bibliothèques
#include <string.h>
#include <util/crc16.h>
//définir la taille du texte à transmettre en balise
char datastring[80];
void setup(){
pinMode(RADIOPIN,OUTPUT);
Serial.begin(9600);
}
void loop(){
snprintf(datastring,80,"$$$$$F6AGV-11,RTTY,TEST,BEACON"); //placer le texte dans datastring
unsigned int CHECKSUM=gps_CRC16_checksum(datastring); //calcul du checksum pour ce texte
char checksum_str[6];
sprintf(checksum_str,"*%04X\n",CHECKSUM);
strcat(datastring,checksum_str);
rtty_txstring(datastring);
}
void rtty_txstring(char*string){
//envoyer des caractéres d'un octet de 8 bits (byte)
char c;
c=*string++;
while (c !='\0'){
rtty_txbyte(c);
c=*string++;
}
}
void rtty_txbyte(char c){
//envoyer chaque bit d'un caractére
//le LSB est transmit en premier
//chaque octet est précédé d'un zéro (start)
//chaque octet est suivi d'un ou deux un (stop)
int i;
rtty_txbit(0); //start bit
//envoyer les bits avec LSB en premier
for (i=0;i<7;i++) { //
if(c&1) rtty_txbit(1);
else rtty_txbit(0);
c = c>>1;
}
rtty_txbit(1); //stop bit
rtty_txbit(1); //stop bit
}
void rtty_txbit (int bit) {
if (bit) {
// high
analogWrite(RADIOPIN,110);
}
else {
// low
analogWrite(RADIOPIN,100);
}
delayMicroseconds(10000);
delayMicroseconds(10150);
/* pour 300 bauds (3370)
pour 50 bauds (20150)
*/
}
uint16_t gps_CRC16_checksum (char*string){
size_t i;
uint16_t crc;
uint8_t c;
crc = 0xFFFF;
//calcul du checksum les deux premiers $$ ne comptent pas
for(i=2; i <strlen(string);i++) {
c=string[i];
crc=_crc_xmodem_update (crc, c);
}
return crc;
}
---------------------------------------
D'après source UPU : UKHAS
From : Alain F6AGV - BHAF
Aucun commentaire:
Enregistrer un commentaire