Lucas B
/
TelecoBot_Emetteur
Programme Émetteur pour les TelecoBots - IUT Nice 2019
main.cpp@1:bac396443157, 2019-06-17 (annotated)
- Committer:
- Boborski
- Date:
- Mon Jun 17 13:17:22 2019 +0000
- Revision:
- 1:bac396443157
- Parent:
- 0:0b449162e362
TelecoBot Recepteur V2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Boborski | 0:0b449162e362 | 1 | /* |
Boborski | 0:0b449162e362 | 2 | TélécoBot Emetteur V1 |
Boborski | 0:0b449162e362 | 3 | Bagrowski 2019 |
Boborski | 0:0b449162e362 | 4 | |
Boborski | 0:0b449162e362 | 5 | pour pairer 2 robots changer l'adresse dans le .h de la bibliothèque |
Boborski | 0:0b449162e362 | 6 | |
Boborski | 0:0b449162e362 | 7 | Le code n'est pas optimisé, car la trame envoyé est l'état de tous les boutons |
Boborski | 0:0b449162e362 | 8 | et ils sont stockés dans une variable giBPDec à la réception, il vaudrait mieux |
Boborski | 0:0b449162e362 | 9 | créer cette variable avant l'émission et l'envoyer seule, ça racourcirait la trame, |
Boborski | 0:0b449162e362 | 10 | donc le temps d'émission et on pourrait émettre plus souvent |
Boborski | 0:0b449162e362 | 11 | */ |
Boborski | 0:0b449162e362 | 12 | |
Boborski | 0:0b449162e362 | 13 | |
Boborski | 0:0b449162e362 | 14 | #include "mbed.h" |
Boborski | 0:0b449162e362 | 15 | #include "nRF24L01P.h" |
Boborski | 0:0b449162e362 | 16 | |
Boborski | 0:0b449162e362 | 17 | |
Boborski | 0:0b449162e362 | 18 | //////////////////////////////////////// DEFINE //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 19 | //longeur de la trame de la mbed1 vers la mbed2 |
Boborski | 0:0b449162e362 | 20 | #define LONGTRAME 8 |
Boborski | 0:0b449162e362 | 21 | //mode débugage (0= sans, 1= avec) |
Boborski | 0:0b449162e362 | 22 | #define DEBUG 1 |
Boborski | 0:0b449162e362 | 23 | |
Boborski | 0:0b449162e362 | 24 | //emplacement des données dans la trame |
Boborski | 0:0b449162e362 | 25 | #define TRAMEETAT 0 |
Boborski | 0:0b449162e362 | 26 | #define TRAMEBPG 1 |
Boborski | 0:0b449162e362 | 27 | #define TRAMEBPD 2 |
Boborski | 0:0b449162e362 | 28 | #define TRAMEBPH 3 |
Boborski | 0:0b449162e362 | 29 | #define TRAMEBPB 4 |
Boborski | 0:0b449162e362 | 30 | #define TRAMEBPBOOST 5 |
Boborski | 0:0b449162e362 | 31 | #define TRAMEBPSERVO 6 |
Boborski | 0:0b449162e362 | 32 | #define TRAMEFIN 7 |
Boborski | 0:0b449162e362 | 33 | |
Boborski | 0:0b449162e362 | 34 | //caractère de fin trame |
Boborski | 0:0b449162e362 | 35 | #define CARACFIN 42 |
Boborski | 0:0b449162e362 | 36 | |
Boborski | 0:0b449162e362 | 37 | #define PERIODLED 100 |
Boborski | 0:0b449162e362 | 38 | |
Boborski | 0:0b449162e362 | 39 | //////////////////////////////////////// Entrées //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 40 | DigitalIn BPGauche (p10); |
Boborski | 0:0b449162e362 | 41 | DigitalIn BPDoite (p11); |
Boborski | 0:0b449162e362 | 42 | DigitalIn BPHaut (p12); |
Boborski | 0:0b449162e362 | 43 | DigitalIn BPBas (p13); |
Boborski | 0:0b449162e362 | 44 | DigitalIn BPBoost (p14); |
Boborski | 0:0b449162e362 | 45 | DigitalIn BPServo (p15); |
Boborski | 0:0b449162e362 | 46 | AnalogIn UBat5V (p20); |
Boborski | 0:0b449162e362 | 47 | |
Boborski | 0:0b449162e362 | 48 | |
Boborski | 0:0b449162e362 | 49 | //////////////////////////////////////// Sorties //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 50 | PwmOut LedServo (p21); |
Boborski | 0:0b449162e362 | 51 | PwmOut LedBoost (p22); |
Boborski | 0:0b449162e362 | 52 | DigitalOut myled1(LED1); |
Boborski | 0:0b449162e362 | 53 | |
Boborski | 0:0b449162e362 | 54 | |
Boborski | 0:0b449162e362 | 55 | //////////////////////////////////////// Liaison SPI //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 56 | nRF24L01P my_nrf24l01p(p5, p6, p7, p9, p8, p16); // mosi, miso, sck, csn, ce, irq: non connecté |
Boborski | 0:0b449162e362 | 57 | |
Boborski | 0:0b449162e362 | 58 | |
Boborski | 0:0b449162e362 | 59 | //////////////////////////////////////// Timer/Ticker //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 60 | //Ticker appelant la fonction d'envoi |
Boborski | 0:0b449162e362 | 61 | Ticker ticEnvoi; |
Boborski | 0:0b449162e362 | 62 | |
Boborski | 0:0b449162e362 | 63 | |
Boborski | 0:0b449162e362 | 64 | //////////////////////////////////////// Prototypes //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 65 | //Initialisation |
Boborski | 0:0b449162e362 | 66 | void Init (void); |
Boborski | 0:0b449162e362 | 67 | //Envoi des données à la mbed2 |
Boborski | 0:0b449162e362 | 68 | void Envoi (void); |
Boborski | 0:0b449162e362 | 69 | //Acquisition état Boutons Poussoirs |
Boborski | 0:0b449162e362 | 70 | void Acquisition (void); |
Boborski | 0:0b449162e362 | 71 | //Affectation de la valeur des BP dans la Trame |
Boborski | 0:0b449162e362 | 72 | void AffectTrameBp (void); |
Boborski | 0:0b449162e362 | 73 | |
Boborski | 0:0b449162e362 | 74 | |
Boborski | 0:0b449162e362 | 75 | //////////////////////////////////////// Variables globales //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 76 | //Trames d'envoi vers le mbed 2 |
Boborski | 0:0b449162e362 | 77 | char gctabTrame[LONGTRAME]; |
Boborski | 0:0b449162e362 | 78 | //Boutons poussoirs |
Boborski | 0:0b449162e362 | 79 | int giBpGauche, giBpDroite, giBpHaut, giBpBas, giBpBoost, giBpServo; |
Boborski | 0:0b449162e362 | 80 | //Etat Principal |
Boborski | 0:0b449162e362 | 81 | int giEtat1= 0; |
Boborski | 0:0b449162e362 | 82 | |
Boborski | 0:0b449162e362 | 83 | |
Boborski | 0:0b449162e362 | 84 | //////////////////////////////////////// Liaison série //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 85 | Serial pc(USBTX, USBRX); // tx, rx |
Boborski | 0:0b449162e362 | 86 | |
Boborski | 0:0b449162e362 | 87 | |
Boborski | 0:0b449162e362 | 88 | //////////////////////////////////////// Main //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 89 | int main() { |
Boborski | 0:0b449162e362 | 90 | int i; |
Boborski | 0:0b449162e362 | 91 | |
Boborski | 0:0b449162e362 | 92 | Init(); |
Boborski | 0:0b449162e362 | 93 | |
Boborski | 0:0b449162e362 | 94 | while(1) { |
Boborski | 0:0b449162e362 | 95 | Acquisition(); |
Boborski | 0:0b449162e362 | 96 | AffectTrameBp(); |
Boborski | 0:0b449162e362 | 97 | |
Boborski | 0:0b449162e362 | 98 | /* |
Boborski | 0:0b449162e362 | 99 | if(giBpBoost == 1) LedBoost.write(1); |
Boborski | 0:0b449162e362 | 100 | else LedBoost.write(0); |
Boborski | 0:0b449162e362 | 101 | if(giBpServo == 1) LedServo.write(1); |
Boborski | 0:0b449162e362 | 102 | else LedServo.write(0); |
Boborski | 0:0b449162e362 | 103 | */ |
Boborski | 0:0b449162e362 | 104 | } |
Boborski | 0:0b449162e362 | 105 | } |
Boborski | 0:0b449162e362 | 106 | |
Boborski | 0:0b449162e362 | 107 | //////////////////////////////////////// Fonctions //////////////////////////////////////// |
Boborski | 0:0b449162e362 | 108 | //Initialisation |
Boborski | 0:0b449162e362 | 109 | void Init(void) |
Boborski | 0:0b449162e362 | 110 | { |
Boborski | 0:0b449162e362 | 111 | //Mode PullUp des Boutons Poussoirs |
Boborski | 0:0b449162e362 | 112 | BPGauche.mode(PullUp); |
Boborski | 0:0b449162e362 | 113 | BPDoite.mode(PullUp); |
Boborski | 0:0b449162e362 | 114 | BPHaut.mode(PullUp); |
Boborski | 0:0b449162e362 | 115 | BPBas.mode(PullUp); |
Boborski | 0:0b449162e362 | 116 | BPBoost.mode(PullUp); |
Boborski | 0:0b449162e362 | 117 | BPServo.mode(PullUp); |
Boborski | 0:0b449162e362 | 118 | |
Boborski | 0:0b449162e362 | 119 | //Envoi |
Boborski | 0:0b449162e362 | 120 | ticEnvoi.attach(&Envoi, 0.02); |
Boborski | 0:0b449162e362 | 121 | |
Boborski | 0:0b449162e362 | 122 | //Affectation du caractère de fin dans la trame |
Boborski | 0:0b449162e362 | 123 | gctabTrame[TRAMEFIN]= CARACFIN; |
Boborski | 0:0b449162e362 | 124 | |
Boborski | 0:0b449162e362 | 125 | //Emetteur Recepteur 2,4GHz |
Boborski | 0:0b449162e362 | 126 | my_nrf24l01p.powerUp(); |
Boborski | 0:0b449162e362 | 127 | my_nrf24l01p.setTransferSize(LONGTRAME); |
Boborski | 0:0b449162e362 | 128 | my_nrf24l01p.setReceiveMode(); |
Boborski | 0:0b449162e362 | 129 | my_nrf24l01p.disable(); |
Boborski | 0:0b449162e362 | 130 | my_nrf24l01p.enable(); |
Boborski | 0:0b449162e362 | 131 | |
Boborski | 0:0b449162e362 | 132 | // Display the (default) setup of the nRF24L01+ chip |
Boborski | 0:0b449162e362 | 133 | printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); |
Boborski | 0:0b449162e362 | 134 | printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); |
Boborski | 0:0b449162e362 | 135 | printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); |
Boborski | 0:0b449162e362 | 136 | printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); |
Boborski | 0:0b449162e362 | 137 | printf( "nRF24L01+ RX Address : 0x%010llX\r\n\n", my_nrf24l01p.getRxAddress() ); |
Boborski | 0:0b449162e362 | 138 | |
Boborski | 0:0b449162e362 | 139 | |
Boborski | 0:0b449162e362 | 140 | //PWM |
Boborski | 0:0b449162e362 | 141 | LedServo.period_us(PERIODLED); |
Boborski | 0:0b449162e362 | 142 | LedBoost.period_us(PERIODLED); |
Boborski | 0:0b449162e362 | 143 | } |
Boborski | 0:0b449162e362 | 144 | |
Boborski | 0:0b449162e362 | 145 | //Envoi des données à la mbed2 |
Boborski | 0:0b449162e362 | 146 | void Envoi () |
Boborski | 0:0b449162e362 | 147 | { |
Boborski | 0:0b449162e362 | 148 | // Send the transmitbuffer via the nRF24L01+ |
Boborski | 0:0b449162e362 | 149 | my_nrf24l01p.write(NRF24L01P_PIPE_P0, gctabTrame, LONGTRAME); |
Boborski | 0:0b449162e362 | 150 | |
Boborski | 0:0b449162e362 | 151 | //printf("\n\rEnvoi\n"); |
Boborski | 0:0b449162e362 | 152 | myled1 = !myled1; |
Boborski | 0:0b449162e362 | 153 | } |
Boborski | 0:0b449162e362 | 154 | |
Boborski | 0:0b449162e362 | 155 | //Acquisition valeurs Boutons Poussoirs |
Boborski | 0:0b449162e362 | 156 | void Acquisition (void) |
Boborski | 0:0b449162e362 | 157 | { |
Boborski | 0:0b449162e362 | 158 | //Acquisition et stockage de la valeur des BP |
Boborski | 0:0b449162e362 | 159 | giBpGauche= !BPGauche.read(); |
Boborski | 0:0b449162e362 | 160 | giBpDroite= !BPDoite.read(); |
Boborski | 0:0b449162e362 | 161 | giBpHaut= !BPHaut.read(); |
Boborski | 0:0b449162e362 | 162 | giBpBas= !BPBas.read(); |
Boborski | 0:0b449162e362 | 163 | giBpBoost= BPBoost.read(); |
Boborski | 0:0b449162e362 | 164 | giBpServo= BPServo.read(); |
Boborski | 0:0b449162e362 | 165 | |
Boborski | 0:0b449162e362 | 166 | if(DEBUG == 1) |
Boborski | 0:0b449162e362 | 167 | { |
Boborski | 0:0b449162e362 | 168 | //Affichage de l'état des BP pour le débugage |
Boborski | 0:0b449162e362 | 169 | printf("\n\n\rBpGauche: %d",giBpGauche); |
Boborski | 0:0b449162e362 | 170 | printf("\n\rBpDroite: %d",giBpDroite); |
Boborski | 0:0b449162e362 | 171 | printf("\n\rBpHaut: %d",giBpHaut); |
Boborski | 0:0b449162e362 | 172 | printf("\n\rBpBas: %d",giBpBas); |
Boborski | 0:0b449162e362 | 173 | printf("\n\rgiBpBoost: %d",giBpBoost); |
Boborski | 0:0b449162e362 | 174 | printf("\n\rgiBpServo: %d",giBpServo); |
Boborski | 0:0b449162e362 | 175 | } |
Boborski | 0:0b449162e362 | 176 | } |
Boborski | 0:0b449162e362 | 177 | |
Boborski | 0:0b449162e362 | 178 | //Affectation de la valeur des BP dans la Trame |
Boborski | 0:0b449162e362 | 179 | void AffectTrameBp() |
Boborski | 0:0b449162e362 | 180 | { |
Boborski | 0:0b449162e362 | 181 | gctabTrame[TRAMEETAT] = 48+(char)giEtat1 ; |
Boborski | 0:0b449162e362 | 182 | |
Boborski | 0:0b449162e362 | 183 | gctabTrame[TRAMEBPG]= 48+(char)giBpGauche; |
Boborski | 0:0b449162e362 | 184 | gctabTrame[TRAMEBPD]= 48+(char)giBpDroite; |
Boborski | 0:0b449162e362 | 185 | gctabTrame[TRAMEBPH]= 48+(char)giBpHaut; |
Boborski | 0:0b449162e362 | 186 | gctabTrame[TRAMEBPB]= 48+(char)giBpBas; |
Boborski | 0:0b449162e362 | 187 | gctabTrame[TRAMEBPBOOST]= 48+(char)giBpBoost; |
Boborski | 0:0b449162e362 | 188 | gctabTrame[TRAMEBPSERVO]= 48+(char)BPServo; |
Boborski | 0:0b449162e362 | 189 | } |