Test Comm
Dependencies: mbed
SITAEL-Comm.cpp
- Committer:
- pinofal
- Date:
- 2022-05-18
- Revision:
- 8:7a81e89f60df
File content as of revision 8:7a81e89f60df:
#include "mbed.h"
#include<stdlib.h>
// dimensione massima del pacchetto ricevuto su seriale
#define PACKETDIM 512
// Definizione periferica USB seriale del PC
Serial pc(USBTX, USBRX, 921600); // seriale di comunicazione con il PC. Associati a PA_11 e PA_12
// Definizione periferica seriale del Modulo Seriale HC05
Serial mySerial(PA_9, PA_10, 115200); //Tx, Rx, bps
// User Button, LED
DigitalIn myButton(USER_BUTTON); // pulsante Blu sulla scheda. Associato a PC_13
DigitalOut myLed(LED2); // LED verde sulla scheda. Associato a PA_5
// array per la ricezione dei messaggi da Seriale
volatile char caRxPacket[PACKETDIM];
// contatore e indice di caratteri ricevuti da Seriale
volatile char nRxCharCount; // Contatore dei caratteri ricevuti; Si aggiornerà modulo 256 a buffer circolare
volatile char nRxCharIndex; // Indice dell'array dei caratteri ricevuti e già visualizzati sui LED; Si aggiornerà modulo 256 a buffer circolare
/**********************************************/
// IRQ associata a Rx da PC
//**********************************************/
void pcRxInterrupt(void)
{
// array per la ricezione dei messaggi da seriale
char cReadChar;
// ricevi caratteri su seriale, se disponibili
while((pc.readable()))
{
// acquisice stringa in input e relativa dimensione
cReadChar = pc.getc(); // read character from PC
mySerial.putc(cReadChar); // Diagnostica: write char to Seriale
pc.putc(cReadChar); // Diagnostica: write char to PC
//pc.printf("W>: 0x%02x\n\r",cReadChar); // diagnostica
}
}
//**********************************************/
// IRQ associata a Rx da Seriale
//**********************************************/
void SerialeRxInterrupt(void)
{
// carattere ricevuto da Seriale
char cReadChar;
while((mySerial.readable()))
{
// acquisice stringa in input e memorizza in array
cReadChar = mySerial.getc(); // Read character
nRxCharCount++; // incrementa il contatore dei caratteri ricevuti
caRxPacket[nRxCharCount]=cReadChar;
// visualizza l'ultimo carattere ricevuto
pc.printf("> Rx: %c \r\n",cReadChar); // diagnostica
}
}
/**********/
/* MAIN */
/**********/
int main()
{
// indice per i cicli
int nIndex;
// LED su scheda inizialmente spento
myLed = 0;
// messaggio di benvenuto
pc.printf("\r\n***** Hallo ***** \r\n");
// inizializza contatore e indice di caratteri ricevuti
nRxCharCount = 0;
nRxCharIndex =0;
// inizializza array di caratteri ricevuti
for(nIndex=0; nIndex<PACKETDIM; nIndex++)
{
caRxPacket[nIndex]=0;
}
// Attiva la IRQ per la RX su seriale
mySerial.attach(&SerialeRxInterrupt,Serial::RxIrq); // // entra in questa routine quando riceve un carattere dalla seriale del Seriale
pc.attach(&pcRxInterrupt,Serial::RxIrq); // entra in questa routine quando riceve un carattere dalla USB del PC
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ INIZIO Test +++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ FINE Test +++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ INIZIO Ciclo Principale +++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
while(true)
{
//++++++++++++++++++++++++++ INIZIO Se premuto il myButton effettua un test +++++++++++++++++++++++++++++
if(myButton == 0)
{
myLed =1;
}
else
{
myLed =0;
}
//++++++++++++++++++++++++++ FINE Se premuto il myButton effettua test +++++++++++++++++++++++++++++
} //while(true) Ciclo principale
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ FINE Ciclo Principale +++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
} // main()