Lucas B
/
TelecoBot_Emetteur
Programme Émetteur pour les TelecoBots - IUT Nice 2019
Diff: main.cpp
- Revision:
- 0:0b449162e362
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jun 17 12:47:24 2019 +0000 @@ -0,0 +1,189 @@ +/* +TélécoBot Emetteur V1 +Bagrowski 2019 + +pour pairer 2 robots changer l'adresse dans le .h de la bibliothèque + +Le code n'est pas optimisé, car la trame envoyé est l'état de tous les boutons +et ils sont stockés dans une variable giBPDec à la réception, il vaudrait mieux +créer cette variable avant l'émission et l'envoyer seule, ça racourcirait la trame, +donc le temps d'émission et on pourrait émettre plus souvent +*/ + + +#include "mbed.h" +#include "nRF24L01P.h" + + +//////////////////////////////////////// DEFINE //////////////////////////////////////// +//longeur de la trame de la mbed1 vers la mbed2 +#define LONGTRAME 8 +//mode débugage (0= sans, 1= avec) +#define DEBUG 1 + +//emplacement des données dans la trame +#define TRAMEETAT 0 +#define TRAMEBPG 1 +#define TRAMEBPD 2 +#define TRAMEBPH 3 +#define TRAMEBPB 4 +#define TRAMEBPBOOST 5 +#define TRAMEBPSERVO 6 +#define TRAMEFIN 7 + +//caractère de fin trame +#define CARACFIN 42 + +#define PERIODLED 100 + +//////////////////////////////////////// Entrées //////////////////////////////////////// +DigitalIn BPGauche (p10); +DigitalIn BPDoite (p11); +DigitalIn BPHaut (p12); +DigitalIn BPBas (p13); +DigitalIn BPBoost (p14); +DigitalIn BPServo (p15); +AnalogIn UBat5V (p20); + + +//////////////////////////////////////// Sorties //////////////////////////////////////// +PwmOut LedServo (p21); +PwmOut LedBoost (p22); +DigitalOut myled1(LED1); + + +//////////////////////////////////////// Liaison SPI //////////////////////////////////////// +nRF24L01P my_nrf24l01p(p5, p6, p7, p9, p8, p16); // mosi, miso, sck, csn, ce, irq: non connecté + + +//////////////////////////////////////// Timer/Ticker //////////////////////////////////////// +//Ticker appelant la fonction d'envoi +Ticker ticEnvoi; + + +//////////////////////////////////////// Prototypes //////////////////////////////////////// +//Initialisation +void Init (void); +//Envoi des données à la mbed2 +void Envoi (void); +//Acquisition état Boutons Poussoirs +void Acquisition (void); +//Affectation de la valeur des BP dans la Trame +void AffectTrameBp (void); + + +//////////////////////////////////////// Variables globales //////////////////////////////////////// +//Trames d'envoi vers le mbed 2 +char gctabTrame[LONGTRAME]; +//Boutons poussoirs +int giBpGauche, giBpDroite, giBpHaut, giBpBas, giBpBoost, giBpServo; +//Etat Principal +int giEtat1= 0; + + +//////////////////////////////////////// Liaison série //////////////////////////////////////// +Serial pc(USBTX, USBRX); // tx, rx + + +//////////////////////////////////////// Main //////////////////////////////////////// +int main() { + int i; + + Init(); + + while(1) { + Acquisition(); + AffectTrameBp(); + + /* + if(giBpBoost == 1) LedBoost.write(1); + else LedBoost.write(0); + if(giBpServo == 1) LedServo.write(1); + else LedServo.write(0); + */ + } +} + +//////////////////////////////////////// Fonctions //////////////////////////////////////// +//Initialisation +void Init(void) +{ + //Mode PullUp des Boutons Poussoirs + BPGauche.mode(PullUp); + BPDoite.mode(PullUp); + BPHaut.mode(PullUp); + BPBas.mode(PullUp); + BPBoost.mode(PullUp); + BPServo.mode(PullUp); + + //Envoi + ticEnvoi.attach(&Envoi, 0.02); + + //Affectation du caractère de fin dans la trame + gctabTrame[TRAMEFIN]= CARACFIN; + + //Emetteur Recepteur 2,4GHz + my_nrf24l01p.powerUp(); + my_nrf24l01p.setTransferSize(LONGTRAME); + my_nrf24l01p.setReceiveMode(); + my_nrf24l01p.disable(); + my_nrf24l01p.enable(); + + // Display the (default) setup of the nRF24L01+ chip + printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); + printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); + printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); + printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); + printf( "nRF24L01+ RX Address : 0x%010llX\r\n\n", my_nrf24l01p.getRxAddress() ); + + + //PWM + LedServo.period_us(PERIODLED); + LedBoost.period_us(PERIODLED); +} + +//Envoi des données à la mbed2 +void Envoi () +{ + // Send the transmitbuffer via the nRF24L01+ + my_nrf24l01p.write(NRF24L01P_PIPE_P0, gctabTrame, LONGTRAME); + + //printf("\n\rEnvoi\n"); + myled1 = !myled1; +} + +//Acquisition valeurs Boutons Poussoirs +void Acquisition (void) +{ + //Acquisition et stockage de la valeur des BP + giBpGauche= !BPGauche.read(); + giBpDroite= !BPDoite.read(); + giBpHaut= !BPHaut.read(); + giBpBas= !BPBas.read(); + giBpBoost= BPBoost.read(); + giBpServo= BPServo.read(); + + if(DEBUG == 1) + { + //Affichage de l'état des BP pour le débugage + printf("\n\n\rBpGauche: %d",giBpGauche); + printf("\n\rBpDroite: %d",giBpDroite); + printf("\n\rBpHaut: %d",giBpHaut); + printf("\n\rBpBas: %d",giBpBas); + printf("\n\rgiBpBoost: %d",giBpBoost); + printf("\n\rgiBpServo: %d",giBpServo); + } +} + +//Affectation de la valeur des BP dans la Trame +void AffectTrameBp() +{ + gctabTrame[TRAMEETAT] = 48+(char)giEtat1 ; + + gctabTrame[TRAMEBPG]= 48+(char)giBpGauche; + gctabTrame[TRAMEBPD]= 48+(char)giBpDroite; + gctabTrame[TRAMEBPH]= 48+(char)giBpHaut; + gctabTrame[TRAMEBPB]= 48+(char)giBpBas; + gctabTrame[TRAMEBPBOOST]= 48+(char)giBpBoost; + gctabTrame[TRAMEBPSERVO]= 48+(char)BPServo; +} \ No newline at end of file