Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Test de la libreria SoftwareSerial en arduino nano A.Villanueva
- * En este caso se envia y se recibe una estructura
- * utiliza stream sobre SoftwareSerial
- *
- */
- #include <SoftwareSerial.h>
- #include <Stream.h>
- //Invertir cables entre los 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];//Establezco un buffer de 256 bytes
- };
- //************************************************************************************
- 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);//Conexion USB hacia PC
- while (!Serial) { }//Espera conexion usb DEBUG
- rs232.begin(9600);//Inicia puerto bis con SoftwareSerial
- }
- //************************************************************************************
- void loop() {
- //Emisor TX dato simple
- //TX(dato++);
- //Receptor RX dato simple
- //RX();
- //Envio y recepcion de structs utilizando stream y SoftwareSerial
- char *txt="algo volo sobre el nido del cuco .Pero podia no volar";
- datosStruct(&estructuraTX,69,txt, strlen (txt) );//Escribe datos en la estructura
- Serial.print("Tam estructura ");
- Serial.print (sizeof(estructuraTX));
- //TX Estructura
- //size_t enviaStruct(Stream *stream,const void *estructura ,uint16_t tam){
- enviaStruct(&rs232,&estructuraTX ,sizeof(estructuraTX) );
- //RX Estructura
- recibeStruct (&rs232,&estructuraRX,sizeof(estructuraRX));
- //Ver Estructura
- verStruct(&estructuraRX,sizeof(estructuraRX));
- delay (8000);
- }
- //************************************************************************************
- //Emision de un dato simple tipo unsigned char
- void TX (unsigned char dato){//Escribe en el puerto serie bis
- Serial.print("TX = ");
- Serial.print(dato);
- Serial.print(" , ");
- Serial.print(dato,DEC);
- Serial.print(" , ");
- Serial.println(dato,HEX);
- rs232.write (dato);//Escribe dato en puerto SoftwareSerial
- delay(2000);//Retardo 2s
- }
- //************************************************************************************
- //Recepcion de un dato simple tipo unsigned char
- unsigned char RX (){//Recibe desde el puerto serie SoftwareSerial
- rs232.listen();//Pasa a la escucha SoftwareSerial
- while (rs232.available ()){//Hay datos en SoftwareSerial ?
- Serial.print("RX = ");
- Serial.println (rs232.read());//Lee un dato y envia en el puerto serie USB
- }
- }
- //************************************************************************************
- //Copia datos en la estructura ,esta funcion se debe adaptar a cada estructura
- void datosStruct(Estructura *estructura ,unsigned char num,char* txt,size_t tam){
- memcpy(estructura->txt,txt,tam);//Copia txt
- estructura->num=num;
- }
- //************************************************************************************
- //Muestra una estructura en el puerto serie USB por defecto de arduino...Serial
- void verStruct(Estructura *estructura,size_t tam){
- Serial.println();
- Serial.print(" lenght = ");
- Serial.print (strlen (estructura->txt));//Tamano de la estructura debug
- Serial.print(" num =");
- Serial.print(estructura->num);//Dato num dentro de la estructura
- size_t i=0;
- //Muestra, envia por el Serial USB la parte char* de la estructura
- do{
- Serial.print ((char) estructura->txt[i]);
- }while ( estructura->txt[i++]!=0 && (i < tam ));
- Serial.println ();
- }
- //************************************************************************************
- //Envia estructura , parametros &SoftwareSerial , La estructura a enviar, y su tamano
- size_t enviaStruct(Stream *stream,const void *estructura ,uint16_t tam){
- size_t nbytes = stream->write((uint8_t *) estructura, tam);
- return nbytes;
- }
- //************************************************************************************
- //Recibe estructura parametros puntero a la estructura y su tamano
- size_t recibeStruct (Stream *stream,const void *estructura,uint16_t tam){
- size_t nbytes = stream->readBytes((uint8_t *) estructura, tam);
- return nbytes;
- }
- //************************************************************************************
- //Mira si hay datos en el rs232 si es asi recupera la estructura RX
- void RX_Struct (Stream *stream,const void *estructura,uint16_t tam){
- if (rs232.available()){//Hay datos en SoftwareSerial port ?
- size_t nbytes=recibeStruct (stream,estructura,tam);//Recibe la estructura
- Serial.print("Datos recibidos = ");
- Serial.println(nbytes,DEC);
- }
- }
Add Comment
Please, Sign In to add comment