Wifi is working but bluetooth is not.
Code: Select all
#include "tft_resources.h"
#include <stdbool.h>
// module connections
sbit WIFI_3_EN at RC2_bit;
sbit WIFI_3_EN_DIR at TRISC2_bit;
sbit WIFI_3_RST at RC1_bit;
sbit WIFI_3_RST_DIR at TRISC1_bit;
sbit BLE_3_EN at RC2_bit;
sbit BLE_3_EN_DIR at TRISC2_bit;
sbit BLE_3_RST at RC1_bit;
sbit BLE_3_RST_DIR at TRISC1_bit;
extern void BLE_Configure();
extern void WiFI_Configure();
// Responses to parse
const OK = 1;
const ERROR = 2;
const NO_CHANGE = 3;
const FAIL = 4;
const READY = 5;
const SEND = 6;
char ip_address[40];
unsigned short i;
unsigned short DataReady;
unsigned int oldstate;
unsigned int length;
char txt_val[ 10 ];
char state;
char response_rcvd;
char responseID, response = 0;
char is_receiving_data = 0;
char LED_switching = 0;
int cntr = 0;
// Change following information to match your network settings
unsigned char *SSID = "";
unsigned char *password = "";
char txt1[] = "<a href=\"https://www.mikroe.com/\">MikroElektronika</a>";
char txt2[] = "<h1 style=\"color:red;\">WiFi ESP click board</h1>";
char txt3[] = "<h1>Server example</h1";
char txt4[] = "<p> LED RA0 is ";
static char _BLE_AT_BLEINIT [ 15 ] = "AT+BLEINIT=2";
static char _BLE_AT_BLEADVSTART[ 25 ] = "AT+BLEADVSTART";
static char _BLE_AT_BLEADVDATA [ 25 ] = "AT+BLEADVDATA=";
bool A0_change = false;
char txt_state_A0[9] = "OFF</p>";
char data_[ 500 ] = { 0 };
// Get response
char Get_Response()
{
if (response_rcvd)
{
response_rcvd = 0;
return responseID;
}
else
return 0;
}
void BLE_Init(){
BLE_3_EN = 1;
delay_ms(500);
BLE_3_RST = 0;
delay_ms(500);
BLE_3_RST = 1;
Delay_ms(2000);
}
void WiFi_Init()
{
WIFI_3_EN = 1;
delay_ms(500);
WIFI_3_RST = 0; // Perform reset procedure
delay_ms(500);
WIFI_3_RST = 1;
Delay_ms(2000);
}
void sending_data( void )
{
UART2_Write_Text("AT+CIPSEND=0");
UART2_Write_Text(",");
UART2_Write_Text( txt_val );
UART2_Write(0x0D);
UART2_Write(0x0A);
Delay_ms(100);
UART2_Write_Text( data_ );
Delay_ms( 200 );
UART2_Write_Text("AT+CIPSEND=1");
UART2_Write_Text(",");
UART2_Write_Text( txt_val );
UART2_Write(0x0D);
UART2_Write(0x0A);
Delay_ms(100);
UART2_Write_Text( data_ );
Delay_ms( 200 );
UART2_Write_Text("AT+CIPSEND=2");
UART2_Write_Text(",");
UART2_Write_Text( txt_val );
UART2_Write(0x0D);
UART2_Write(0x0A);
Delay_ms(100);
UART2_Write_Text( data_ );
Delay_ms( 200 );
UART2_Write_Text("AT+CIPSEND=3");
UART2_Write_Text(",");
UART2_Write_Text( txt_val );
UART2_Write(0x0D);
UART2_Write(0x0A);
Delay_ms(100);
UART2_Write_Text( data_ );
}
void WiFi_Send()
{
if( !LED_switching ) {
length += strlen( txt1 );
length += strlen( txt2 );
length += strlen( txt4 );
length += strlen( txt_state_A0 );
IntToStr( length, txt_val );
Ltrim( txt_val );
strcat( data_, txt1 );
strcat( data_, txt2 );
strcat( data_, txt4 );
strcat( data_, txt_state_A0 );
Rtrim( data_ );
sending_data();
}
else
{
if ( A0_change )
{
A0_change = false;
length += strlen( txt4 );
length += strlen( txt_state_A0 );
strcat( data_, txt4 );
strcat( data_, txt_state_A0 );
}
IntToStr( length, txt_val );
Ltrim( txt_val );
Rtrim( data_ );
sending_data();
}
strcpy(data_, "");
length = 0;
Delay_ms(100);
}
void BLE_Send()
{
if( !LED_switching ) {
length += strlen( txt1 );
length += strlen( txt2 );
length += strlen( txt4 );
length += strlen( txt_state_A0 );
IntToStr( length, txt_val );
Ltrim( txt_val );
strcat( data_, txt1 );
strcat( data_, txt2 );
strcat( data_, txt4 );
strcat( data_, txt_state_A0 );
Rtrim( data_ );
sending_data();
}
else
{
if ( A0_change )
{
A0_change = false;
length += strlen( txt4 );
length += strlen( txt_state_A0 );
strcat( data_, txt4 );
strcat( data_, txt_state_A0 );
}
IntToStr( length, txt_val );
Ltrim( txt_val );
Rtrim( data_ );
sending_data();
}
strcpy(data_, "");
length = 0;
Delay_ms(100);
}
void main() {
// Initialize variables
length = 0;
state = 0;
response_rcvd = 0;
responseID = 0;
response = 0;
i = 0;
AD1PCFG = 0xFFFF; // Configure AN pins as digital I/O
JTAGEN_bit = 0; // Disable JTAG
BLE_3_EN_DIR = 0; //added
BLE_3_RST_DIR = 0; //added
WIFI_3_EN_DIR = 0;
WIFI_3_RST_DIR = 0;
TRISA4_bit = 1;
TRISA0_bit = 0;
LATA4_bit = 0;
// UART
UART2_Init( 115200 );
Delay_ms( 100 );
U2IP0_bit = 0;
U2IP1_bit = 1;
U2IP2_bit = 1;
U2RXIE_bit = 1;
EnableInterrupts();
display_init();
TFT_Set_Font( &Tahoma15x16_Bold, CL_RED, FO_HORIZONTAL );
// Initialize WiFI module
WiFi_Init();
BLE_Init();
//added
//Setting WiFi Mode - station mode
BLE_Configure(); //added
WiFI_Configure();
state = 100;
i = 0;
TFT_Write_Text("Please connect to your STAIP address...", 20, 175);
// Waiting for multiple connections to Server STAIP
Delay_ms(20000);
// Sending Initial data to server
BLE_Send(); //added
WiFi_Send();
TFT_Write_Text("Entering button toggling loop.", 20, 190);
TFT_Write_Text("Observe changes on server.", 20, 205);
//LED_switching = 1;
/*while( 1 )
{
// detect logical one on PA4 pin
if (Button(&PORTA, 4, 1, 1))
{
oldstate = 1;
}
// detect logical one-to-zero transition on PA4 pin
if (oldstate && Button(&PORTA, 4, 1, 0))
{
if ( !strcmp(txt_state_A0, "OFF</p>" ))
{
strncpy( txt_state_A0, "ON </p>", 8 );
LATA0_bit = 1;
}
else
{
strncpy( txt_state_A0, "OFF</p>", 8 );
LATA0_bit = 0;
}
oldstate = 0;
A0_change = true;
WiFi_Send();
BLE_Send();
}
}
}*/
// Uart Rx interrupt handler
/*void UART2interrupt() iv IVT_UART_2 ilevel 6 ics ICS_AUTO
{
if( IFS1 & ( 1 << U2RXIF ))
{
char tmp = UART2_Read();*/ // Get received byte
// Process reception through state machine
/*switch (state) {
case 0: {
response = 0; // Clear response
if (tmp == 'O')
state = 1;
if (tmp == 'E')
state = 10;
if (tmp == 'n')
state = 20;
if (tmp == 'F')
state = 30;
if (tmp == 'A')
state = 40;
if (tmp == '+')
state = 54;
if (tmp == 'r')
state = 50;
if (tmp == '>')
{
state = 0;
response = SEND;
response_rcvd = 1;
responseID = response;
}
break;
}
case 1: {
if (tmp == 'K'){
response = OK; // OK
state = 2;
}
else
state = 0;
break;
}
case 10: {
if (tmp == 'R')
state = 11;
else
state = 0;
break;
}
case 11: {
if (tmp == 'R')
state = 12;
else
state = 0;
break;
}
case 12: {
if (tmp == 'O')
state = 13;
else
state = 0;
break;
}
case 13: {
if (tmp == 'R') {
response = ERROR; // ERROR
state = 2;
}
else
state = 0;
break;
}
case 20: {
if (tmp == 'o')
state = 21;
else
state = 0;
break;
}
case 21: {
if (tmp == ' ')
state = 22;
else
state = 0;
break;
}
case 22: {
if (tmp == 'c')
state = 23;
else
state = 0;
break;
}
case 23: {
if (tmp == 'h')
state = 24;
else
state = 0;
break;
}
case 24: {
if (tmp == 'a')
state = 25;
else
state = 0;
break;
}
case 25: {
if (tmp == 'n')
state = 26;
else
state = 0;
break;
}
case 26: {
if (tmp == 'g')
state = 27;
else
state = 0;
break;
}
case 27: {
if (tmp == 'e'){
response = NO_CHANGE; // NO CHANGE
state = 2;
}
else
state = 0;
break;
}
case 30: {
if (tmp == 'A')
state = 31;
else
state = 0;
break;
}
case 31: {
if (tmp == 'I')
state = 32;
else
state = 0;
break;
}
case 32: {
if (tmp == 'L') {
response = FAIL; // FAIL
state = 2;
}
else
state = 0;
break;
}
case 40: {
if (tmp == 'T')
state = 41;
else
state = 0;
break;
}
case 41: {
if (tmp == '+')
state = 42;
else
state = 0;
break;
}
case 42: {
if (tmp == 'C')
state = 43;
else
state = 0;
break;
}
case 43: {
if (tmp == 'I')
state = 44;
else
state = 0;
break;
}
case 44: {
if (tmp == 'F')
state = 45;
else
state = 0;
break;
}
case 45: {
if (tmp == 'S')
state = 46;
else
state = 0;
break;
}
case 46: {
if (tmp == 'R')
state = 47;
else
state = 0;
break;
}
case 47: {
if (tmp == 10) {
state = 48;
i = 0;
}
else if (tmp == 13){
}
else
state = 0;
break;
}
case 48: {
if (tmp == 13){
state = 3;
response = OK;
}
else {
ip_address[i] = tmp; // get IP address
i++;
}
break;
}
case 50: {
if (tmp == 'e')
state = 51;
else
state = 0;
break;
}
case 51: {
if (tmp == 'a')
state = 52;
else
state = 0;
break;
}
case 52: {
if (tmp == 'd')
state = 53;
else
state = 0;
break;
}
case 53: {
if (tmp == 'y') {
response = READY; // READY
state = 2;
}
else
state = 0;
break;
}
case 54: {
state = 0;
response = SEND;
response_rcvd = 1;
responseID = response;
break;
}
case 2: {
if (tmp == 13)
state = 3;
else
state = 0;
break;
}
case 3: {
if (tmp == 10){
response_rcvd = 1;
responseID = response;
}
state = 0;
break;
}
default: {
state = 0;
break;
}
}
U2RXIF_bit = 0;
}*/
}