Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Test de la bibliothèque SoftwareSerial sur Arduino Nano, A.Villanueva
- * Dans ce cas, une structure est envoyée et reçue
- * en utilisant le flux avec SoftwareSerial
- */
- #include <SoftwareSerial.h>
- #include <Stream.h>
- //Inverser les câbles entre les Arduinos : TX1 --> RX2, RX1 <-- TX2.
- //#define PIN_TX 11 //D11
- //#define PIN_RX 10 //D10
- #define PIN_TX 5 //D11
- #define PIN_RX 4 //D10
- //************************************************************************************
- struct Estructura{
- unsigned char num;
- unsigned char txt[256];//Je mets en place un tampon de 256 octets.
- };
- //************************************************************************************
- SoftwareSerial rs232(PIN_RX, PIN_TX); // RX, TX my serial
- unsigned char dato;
- Estructura estructuraTX;
- Estructura estructuraRX;
- //************************************************************************************
- void setup() {
- pinMode(PIN_TX,OUTPUT);//TX1 --> rx2
- pinMode(PIN_RX,INPUT);//RX1 <-- tx2
- Serial.begin(9600);//Connexion USB vers un PC.
- while (!Serial) { }//En attente de la connexion USB DEBUG.
- rs232.begin(9600);//Démarre le port série virtuel (BIS) avec SoftwareSerial.
- }
- //************************************************************************************
- void loop() {
- // Émetteur TX simple de données
- // TX(dato++);
- // Récepteur RX de données simple
- // RX();
- // Envoi et réception de structures en utilisant les flux et SoftwareSerial
- char *txt="TEST TX RX ";
- datosStruct(&estructuraTX,69,txt, strlen (txt) );//Escribe datos en la estructura
- Serial.print("Taille struct Tx ");
- Serial.print (sizeof(estructuraTX));
- //TX Structure
- //size_t enviaStruct(Stream *stream,const void *estructura ,uint16_t tam){
- enviaStruct(&rs232,&estructuraTX ,sizeof(estructuraTX) );
- //RX Structure
- recibeStruct (&rs232,&estructuraRX,sizeof(estructuraRX));
- //Regarder structure
- verStruct(&estructuraRX,sizeof(estructuraRX));
- delay (8000);
- }
- //************************************************************************************
- // Transmission of a simple unsigned char type data
- void TX (unsigned char dato){// Écrit sur le port série bis
- Serial.print("TX = ");
- Serial.print(dato);
- Serial.print(" , ");
- Serial.print(dato,DEC);
- Serial.print(" , ");
- Serial.println(dato,HEX);
- rs232.write (dato);// Écrit la donnée sur le port SoftwareSerial
- delay(2000);//Retard 2s
- }
- //************************************************************************************
- // Réception d'une donnée simple de type unsigned char
- unsigned char RX (){// Reçoit depuis le port série SoftwareSerial
- rs232.listen();// Passe en mode écoute pour SoftwareSerial
- while (rs232.available ()){// Y a-t-il des données disponibles sur SoftwareSerial ?
- Serial.print("RX = ");
- Serial.println (rs232.read());// Lit une donnée et l'envoie sur le port série USB
- }
- }
- //************************************************************************************
- // Copie les données dans la structure, cette fonction doit être adaptée à chaque structure
- void datosStruct(Estructura *estructura ,unsigned char num,char* txt,size_t tam){
- memcpy(estructura->txt,txt,tam);//Copia txt
- estructura->num=num;
- }
- //************************************************************************************
- // Affiche une structure sur le port série USB par défaut d'Arduino... Serial
- void verStruct(Estructura *estructura,size_t tam){
- Serial.println();
- Serial.print(" lenght = ");
- Serial.print (strlen (estructura->txt));// Taille de la structure en mode débogage
- Serial.print(" num =");
- Serial.print(estructura->num);// Donnée num à l'intérieur de la structure
- size_t i=0;
- // Affiche, envoie via le port série USB la partie char* de la structure
- do{
- Serial.print ((char) estructura->txt[i]);
- }while ( estructura->txt[i++]!=0 && (i < tam ));
- Serial.println ();
- }
- //************************************************************************************
- // Envoie une structure, avec comme paramètres &SoftwareSerial, la structure à envoyer et sa taille
- size_t enviaStruct(Stream *stream,const void *estructura ,uint16_t tam){
- size_t nbytes = stream->write((uint8_t *) estructura, tam);
- return nbytes;
- }
- //************************************************************************************
- // Reçoit une structure, avec comme paramètres un pointeur vers la structure et sa taille
- size_t recibeStruct (Stream *stream,const void *estructura,uint16_t tam){
- size_t nbytes = stream->readBytes((uint8_t *) estructura, tam);
- return nbytes;
- }
- //************************************************************************************
- // Vérifie s'il y a des données dans le RS232, si c'est le cas, récupère la structure RX
- void RX_Struct (Stream *stream,const void *estructura,uint16_t tam){
- if (rs232.available()){// Y a-t-il des données dans le port SoftwareSerial ?
- size_t nbytes=recibeStruct (stream,estructura,tam);// Reçoit la structure
- Serial.print("Données reçues = ");
- Serial.println(nbytes,DEC);
- }
- }
Add Comment
Please, Sign In to add comment