Greetings,
I was facing an issue when interfacing Lora module RN2483 of microchip over UART communication.
The lux variable when i am directly feeding the data into it its successfully getting transmitted in HEX format while I am trying to transmit fAmbient data which changes upon every sample collected over I2C bus. The which i am receiving on the other end is 0 .
I am pasting the code down below please help.
#include <stdint.h> #include <string.h> #include <stdbool.h> #include <string.h> #include "inc/hw_memmap.h" #include "inc/hw_ints.h" #include "driverlib/debug.h" #include "driverlib/gpio.h" #include "driverlib/adc.h" #include "driverlib/pin_map.h" #include "inc/tm4c123gh6pm.h" #define TARGET_IS_BLIZZARD_RB1 #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "sensorlib/hw_isl29023.h" #include "sensorlib/i2cm_drv.h" #include "sensorlib/isl29023.h" #include "driverlib/uart.h" //functions and variables for setting up the lora network int sendATCommand(char* ATCommand, char* expected_answer); void loraConfigure(void); uint8_t cond; char luxResult[20] = ""; void stringToHex(char *luxResult); char packet[25]="radio tx "; char buffer[50]=""; void concatenate(); float fAmbient; float lux; uint32_t ui32ADC0Value[4]; uint32_t ui32ADC3Value[4]; volatile uint32_t ui32TempAvg; volatile uint32_t ui32TempValueC; #define DEBUG #define ISL29023_I2C_ADDRESS 0x44 // ISL29023 I2C address tI2CMInstance g_sI2CInst; // I2C master driver structure tISL29023 g_sISL29023Inst; // ISL29023 sensor driver structure volatile unsigned long g_vui8DataFlag; // Data ready flag volatile unsigned long g_vui8ErrorFlag; // Error flag //************************************************************************* void ISL29023AppCallback(void *pvCallbackData, uint_fast8_t ui8Status) { if(ui8Status == I2CM_STATUS_SUCCESS) { g_vui8DataFlag = 1; } g_vui8ErrorFlag = ui8Status; } void ISL29023I2CIntHandler(void) { I2CMIntHandler(&g_sI2CInst); } void ISL29023AppErrorHandler(char *pcFilename, uint_fast32_t ui32Line) { while(1) { } } void ISL29023AppI2CWait(char *pcFilename, uint_fast32_t ui32Line) { while((g_vui8DataFlag == 0) && (g_vui8ErrorFlag == 0)); if(g_vui8ErrorFlag) { ISL29023AppErrorHandler(pcFilename, ui32Line); } g_vui8DataFlag = 0; } int main(void) { SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); //ADC CONFIGURATION i.e. CPU TEMP SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); // ENABLE ADC0 MODULE SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); // ENABLE GPIO for ADC0 GPIOPinTypeADC(GPIO_PORTE_BASE,GPIO_PIN_3|GPIO_PIN_2);// ENABLE A0 AND A1 OF ADC0 MODULE ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 2, 0, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable(ADC0_BASE, 3); ADCSequenceEnable(ADC0_BASE, 2); //UART 0 SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 57600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_TWO | UART_CONFIG_PAR_NONE)); //UART 1 SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); GPIOPinConfigure(GPIO_PB0_U1RX); GPIOPinConfigure(GPIO_PB1_U1TX); GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 57600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); //loraConfigure(); //I2C CONFIGURATION SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C3); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinConfigure(GPIO_PD0_I2C3SCL); GPIOPinConfigure(GPIO_PD1_I2C3SDA); GPIOPinTypeI2CSCL(GPIO_PORTD_BASE, GPIO_PIN_0); GPIOPinTypeI2C(GPIO_PORTD_BASE, GPIO_PIN_1); I2CMInit(&g_sI2CInst, I2C3_BASE, INT_I2C3, 0xFF, 0xFF, SysCtlClockGet()); SysCtlDelay(SysCtlClockGet() / 3); //INITIALISING SENSORS ISL29023Init(&g_sISL29023Inst, &g_sI2CInst, ISL29023_I2C_ADDRESS,ISL29023AppCallback, &g_sISL29023Inst); ISL29023AppI2CWait(__FILE__, __LINE__); ISL29023ReadModifyWrite(&g_sISL29023Inst, ISL29023_O_CMD_I, ISL29023_CMD_I_OP_MODE_M, ISL29023_CMD_I_OP_MODE_ALS_CONT, ISL29023AppCallback, &g_sISL29023Inst); ISL29023AppI2CWait(__FILE__, __LINE__); while(1) { ISL29023DataRead(&g_sISL29023Inst, ISL29023AppCallback, &g_sISL29023Inst); ISL29023AppI2CWait(__FILE__, __LINE__); ISL29023DataLightVisibleGetFloat(&g_sISL29023Inst, &fAmbient); //calculating the CPU temperature // CLEAR INTERRUPT FLAG FOR ADC0, SEQUENCER 1 ADCIntClear(ADC0_BASE, 1); // TRIGGER IS GIVEN FOR ADC 0 MODULE, SEQUENCER 1 ADCProcessorTrigger(ADC0_BASE, 1); // STORE THE CONVERTED VALUE FOR ALL DIFFERENT SAMPLING IN ARRAY //ui32ADC0Value ADCSequenceDataGet(ADC0_BASE, 2, ui32ADC0Value); ui32TempAvg = (ui32ADC0Value[0] + ui32ADC0Value[1] + ui32ADC0Value[2] + ui32ADC0Value[3] + 2)/4; ui32TempValueC = (1475 - ((2475 * ui32TempAvg)) / 4096)/10; //calculating decibal values ADCSequenceDataGet(ADC0_BASE,3,ui32ADC3Value); //lux=172.607; //transmiting data via LoRa sprintf(luxResult, "%g",lux); stringToHex(luxResult); concatenate();//creating a packet to be transfered sendATCommand(packet,"OK\0"); SysCtlDelay(20000000);//500ms delay sendATCommand("sys reset\r\n\0","OK\0"); lux=fAmbient; } } int sendATCommand(char* ATCommand, char* expected_answer) { uint8_t answer=0; while(*ATCommand!='\0') { UARTCharPut(UART1_BASE, *ATCommand); ATCommand++; } SysCtlDelay(4000000);//100 ms delay while(UARTCharsAvail(UART1_BASE)) { UARTCharPut(UART0_BASE, UARTCharGet(UART1_BASE)); answer=1; } return answer; } void loraConfigure(void) { cond=sendATCommand("radio set mod lora\r\n\0","OK\0"); SysCtlDelay(400000);//10ms delay cond=sendATCommand("radio get mod\r\n\0","lora\0"); SysCtlDelay(400000); cond=sendATCommand("radio set pwr 15\r\n\0","OK\0"); SysCtlDelay(400000); cond=sendATCommand("radio get pwr\r\n\0","15\0"); SysCtlDelay(400000); cond=sendATCommand("radio set freq 868100000\r\n\0","OK\0"); SysCtlDelay(400000); cond=sendATCommand("radio get freq\r\n\0","868100000\0"); SysCtlDelay(400000); cond=sendATCommand("radio set sf sf12\r\n\0","OK\0"); SysCtlDelay(400000); cond=sendATCommand("radio get sf\r\n\0","sf12\0"); SysCtlDelay(400000); cond=sendATCommand("radio set cr 4/5\r\n\0","OK\0"); SysCtlDelay(400000); cond=sendATCommand("radio get cr\r\n\0","4/5\0"); SysCtlDelay(400000); cond=sendATCommand("radio set bw 125\r\n\0","OK\0"); SysCtlDelay(400000); cond=sendATCommand("radio get bw\r\n\0","125\0"); SysCtlDelay(400000); cond=sendATCommand("radio set crc on\r\n\0","OK\0"); SysCtlDelay(400000); cond=sendATCommand("radio get crc\r\n\0","on\0"); SysCtlDelay(400000); } void stringToHex(char *luxResult) { char *pbuffer = buffer; int i; int len=strlen( luxResult ); for(i=0;i<len;i++) { sprintf(pbuffer, "%x", luxResult[i]); pbuffer +=2; } } void concatenate() { int count=9,i=0; while(buffer[i]!='\0') { packet[count]=buffer[i]; count++; i++; } packet[count++]='\r'; packet[count++]='\n'; }