From db12f2b3be4f925935247e1b6cc1c5c748207f34 Mon Sep 17 00:00:00 2001 From: Simon Doppler Date: Tue, 9 Apr 2019 17:27:33 +0200 Subject: [PATCH] Module BT fonctionnel --- README.md | 12 ++++++- mBluetooth/mBluetooth.c | 57 +++++++++++++++++++++++---------- mBluetooth/mBluetooth.h | 70 +++++++++++++++++++++-------------------- 3 files changed, 87 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 0375e5c..adf72de 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,14 @@ L'accéleromètre renvoie des valeurs de 0 à 65.535 (qui sont encore trop sensi pour le moment). Un mouvement de déplacement du robot fait saturer l'accéléromètre. Un registre est prévu pour changer la sensibilité Pour le gyroscope : la documentation semble indiquer d'autres adresses de -registres pour l'état dy gyroscope \ No newline at end of file +registres pour l'état dy gyroscope + +## Module BT +Une fois le setup et open faits, on peut utiliser le module comme le module +RS232 (içi à 38400 bauds). +### Fonctionnalités + +* [x] Initialise le module +* [x] Envoi de données vers le téléphone/PC +* [ ] Réception de données +* [x] Reconfiguration en cours de fonctionnement diff --git a/mBluetooth/mBluetooth.c b/mBluetooth/mBluetooth.c index 317933f..a3284a9 100755 --- a/mBluetooth/mBluetooth.c +++ b/mBluetooth/mBluetooth.c @@ -1,14 +1,22 @@ -/* - * mBluetooth.c - * - * Created on: Apr 24, 2014 - * Author: Simon Doppler +/** + * @file mBluetooth.c + * @author Simon Doppler + * @version 1.0 + * @date 2019-04-09 */ +#include "mBluetooth.h" + #include "iDio.h" #include "iUart.h" +#include "FreeRTOS.h" +#include "task.h" + +#include + #define BUFSIZE 128 +static Int8 buffer[BUFSIZE]; void mBT_WriteString(Int8 *aDataPtr) { @@ -22,7 +30,7 @@ void mBT_WriteString(Int8 *aDataPtr) } } -bool mBT_ReadDataFromBuffer(UInt8 *aBytePtr) +bool mBT_ReadDataFromBuffer(Int8 *aBytePtr) { bool aRet=false; @@ -36,7 +44,7 @@ bool mBT_ReadDataFromBuffer(UInt8 *aBytePtr) return aRet; } -void mBT_readString(unsigned char *buffer, int n) { +void mBT_readString(Int8 *buffer, UInt32 n) { int i; for (i = 0; i < n; ++i) { while (mBT_ReadDataFromBuffer(&(buffer[i]))); @@ -46,21 +54,36 @@ void mBT_readString(unsigned char *buffer, int n) { void mBT_setup() { iUart_Config(kUart1); iUart_InitRxBuffer(kUart1,0); - iDio_SetPortDirection(kPortC, kPin13, kIoOutput); iDio_PinConfig(kPortC, kPin13, kAlternate1); + iDio_SetPortDirection(kPortC, kMaskIo13, kIoOutput); } -void mBT_open() { - static unsigned char buffer[BUFSIZE]; - iUart_EnDisTx(kUart1,kEn); +void mBT_open(Int8 *aModuleName, Int8* aModulePassword) { + iDio_SetPort(kPortC, kMaskIo13, kIoOn); // début de la connfiguration, PTC13 à 0 logique (3.3V) + iUart_EnDisRx(kUart1,kEn); + iUart_EnDisTx(kUart1,kEn); + iUart_SetupBaudrate(kUart1, 38400); - iDio_SetPort(kPortC, kMaskIo13, kIoOff); // début de la connfiguration - iUart_SetupBaudrate(kUart1, 9600); + mBT_WriteString("AT+ORGL\r\n"); // reset du module + mBT_readString(buffer, 4); // TODO: vérifier si la réponse est OK\r\n - mBT_WriteString("at\r\n"); - mBT_readString(buffer, 2); + sprintf(buffer, "AT+NAME=\"%s\"\r\n", aModuleName); + mBT_WriteString(buffer); // Nom du bluetooth + mBT_readString(buffer, 4); - iDio_SetPort(kPortC, kMaskIo13, kIoOn); // fin de la configuration - iUart_SetupBaudrate(kUart1, 38400); + sprintf(buffer, "AT+PSWD=\"%s\"\r\n", aModulePassword); + mBT_WriteString(buffer); // mot de passe + mBT_readString(buffer, 4); + + mBT_WriteString("AT+ROLE=1\r\n"); // mise en mode master + mBT_readString(buffer, 4); + + iDio_SetPort(kPortC, kMaskIo13, kIoOff); // fin de la configuration, PTC13 à 1 logique (0V) +} + +void mBT_WriteConfig(Int8 *aDataPtr) { + iDio_SetPort(kPortC, kMaskIo13, kIoOn); + mBT_WriteString(aDataPtr); + iDio_SetPort(kPortC, kMaskIo13, kIoOff); } diff --git a/mBluetooth/mBluetooth.h b/mBluetooth/mBluetooth.h index 1c71fa5..0c2f3c4 100755 --- a/mBluetooth/mBluetooth.h +++ b/mBluetooth/mBluetooth.h @@ -1,21 +1,14 @@ - /* ------------------------------------------------------------- -Copyright 2003-201x Haute �cole ARC Ing�ni�rie, Switzerland. -All rights reserved. ------------------------------------------------------------- -File name : mRs232.h -Author and date : Monnerat Serge 06.06.20xx - -Goal : outils afin de pouvoir exploiter le module Bluetooth - ------------------------------------------------------------------------------ -History: ------------------------------------------------------------------------------ - -$History: $ - ------------------------------------------------------------------------------ -*/ +/** + * @file mBluetooth.h + * @author Simon Doppler + * @version 1.0 + * @date 2019-04-09 + * + * Gestion du module bluetooth + * + * La reconfiguration n'est pas supportée pour le moment, + * il faut écrire les fonctions de configuration spécifiques. + */ #ifndef __MBLUETOOTH__ #define __MBLUETOOTH__ @@ -24,39 +17,48 @@ $History: $ #include "def.h" /** - * @brief Configuration du bluetooth - * - * CETTE FONCTION NE MARCHE PAS + * @brief Configuration du module BT */ void mBT_setup(); /** - * @brief Ouverture de la communication bluetooth + * @brief Ouverture de la communication BT * - * CETTE FONCTION NE MARCHE PAS + * @param aModuleName Nom du module BT (visible de tous) + * @param aModulePassword Mot de passe pour la connexion au module */ -void mBT_open(); +void mBT_open(Int8 *aModuleName, Int8 *aModulePassword); /** - * @brief Ecrit une chaine de caractère dans sur le bluetooth + * @brief Écriture d'une chaine * - * Cette fonction sert à émuler une connection RS232. ELLE N'EST PAS - * FONCTIONNELLE. - * - * @param aDataPtr chaine de caractères + * @param aDataPtr Chaine à écrire, doit se terminer par '\0' */ void mBT_WriteString(Int8 *aDataPtr); /** - * @brief Lecture d'une chaine de caractère + * @brief Écriture d'une chaine de configuration (commande AT) + * + * @param aDataPtr Chaine à écrire, doit se terminer par '\r\n\0' et commencer par 'AT' + */ +void mBT_WriteConfig(Int8 *aDataPtr); + +/** + * @brief Lecture d'un byte * - * CETTE FONCTION NE MARCHE PAS + * @param aBytePtr adresse dans laquelle stocker le byte (pas de vérification pour NULL) * - * @param aBytePtr buffer de destination + * @return false si un charactère est lu, true sinon + */ +bool mBT_ReadDataFromBuffer(Int8 *aBytePtr); + +/** + * @brief Lecture d'une chaine de caractères ( !FONCTION BLOQUANTE! ) * - * @return true si il reste des données à lire + * @brief buffer chaine de caractères dans laquelle écrire, pas de test pour NULL + * @brief n nombre de caractères à lire */ -bool mBT_ReadDataFromBuffer(UInt8 *aBytePtr); +void mBT_readString(Int8 *buffer, UInt32 n); #endif -- GitLab