updated

Dependencies:   MTS-Serial libmDot mbed-rtos mbed

Fork of mDot_LoRa_Street_light by HM_IOT_Demo

Committer:
venubk
Date:
Tue Oct 17 11:52:13 2017 +0000
Revision:
9:531bddbe36a9
Parent:
8:525a53f54326
energy meter integrated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hariom 2:20a5d4681abf 1 #include "mbed.h"
hariom 2:20a5d4681abf 2 #include"Thread.h"
hariom 2:20a5d4681abf 3 #include "rtos.h"
hariom 2:20a5d4681abf 4 Serial pc(USBTX, USBRX); // tx, rx
hariom 2:20a5d4681abf 5
hariom 2:20a5d4681abf 6 SPI spimaster(SPI1_MOSI, SPI1_MISO, SPI1_SCK);
hariom 2:20a5d4681abf 7 DigitalOut cs(SPI1_CS);
hariom 2:20a5d4681abf 8 extern int first_time;
hariom 2:20a5d4681abf 9 extern int device_buffer[8];
hariom 2:20a5d4681abf 10 int ble_flag;
hariom 2:20a5d4681abf 11 extern Mutex my_mutex;
venubk 6:db60638d7f9a 12 extern int bufferSize;
varshaberya123 5:f16b067257b6 13
venubk 8:525a53f54326 14 char data_buf[100];
venubk 8:525a53f54326 15
varshaberya123 5:f16b067257b6 16 // reading data from spi
varshaberya123 5:f16b067257b6 17 // spi is communnication between ble and mdot device
venubk 6:db60638d7f9a 18 void SPI_Init()
varshaberya123 5:f16b067257b6 19 {
varshaberya123 5:f16b067257b6 20 pc.baud(9600);
venubk 6:db60638d7f9a 21 spimaster.format(8,0);
venubk 6:db60638d7f9a 22 spimaster.frequency(1000000);
venubk 6:db60638d7f9a 23 }
venubk 8:525a53f54326 24 bool recieve_flag = false;
venubk 6:db60638d7f9a 25 int spi_read(int* response)
venubk 6:db60638d7f9a 26 {
venubk 6:db60638d7f9a 27 //int response[100];
venubk 6:db60638d7f9a 28 cs=1;
venubk 6:db60638d7f9a 29 //pc.baud(9600);
varshaberya123 5:f16b067257b6 30 printf("...SPI read test ..\n\r ");
varshaberya123 5:f16b067257b6 31 // Chip must be deselected
varshaberya123 5:f16b067257b6 32 cs = 1;
hmiot 7:5cd07142d293 33 int temp = 0;
hmiot 7:5cd07142d293 34 int size = 0;
venubk 6:db60638d7f9a 35 int i = 0;
venubk 6:db60638d7f9a 36 printf("Reading Buffer : ");
venubk 6:db60638d7f9a 37 while(1)
venubk 6:db60638d7f9a 38 {
venubk 6:db60638d7f9a 39 // Chip must selected
venubk 6:db60638d7f9a 40 cs = 0;
venubk 6:db60638d7f9a 41 //int SUCCESS = 1;
hmiot 7:5cd07142d293 42 temp = spimaster.write(0xAA);
venubk 6:db60638d7f9a 43 cs = 1;
venubk 8:525a53f54326 44 //printf("Response %X ", temp);
venubk 8:525a53f54326 45
hmiot 7:5cd07142d293 46 if(recieve_flag)
venubk 8:525a53f54326 47 {
venubk 8:525a53f54326 48 if(temp == 0x20)
venubk 8:525a53f54326 49 {
venubk 8:525a53f54326 50 data_buf[size] = ' ';
venubk 8:525a53f54326 51 }
venubk 8:525a53f54326 52 else if(temp == 0x2E)
venubk 8:525a53f54326 53 {
venubk 8:525a53f54326 54 data_buf[size] = '.';
venubk 8:525a53f54326 55 }
venubk 8:525a53f54326 56 else if(temp == 0xFE)
venubk 8:525a53f54326 57 {
venubk 8:525a53f54326 58 printf("buffer size %d\n", bufferSize);
venubk 8:525a53f54326 59 data_buf[size] = '\0';
venubk 8:525a53f54326 60 printf("data received = %s\n",data_buf);
venubk 8:525a53f54326 61 }
venubk 8:525a53f54326 62 else
venubk 8:525a53f54326 63 {
venubk 8:525a53f54326 64 if(temp >= 0x30)
venubk 8:525a53f54326 65 data_buf[size] = (char)temp;
venubk 8:525a53f54326 66 }
hmiot 7:5cd07142d293 67 response[size++] = temp;
venubk 8:525a53f54326 68 }
venubk 8:525a53f54326 69
venubk 8:525a53f54326 70 if(temp == 0xFE)
venubk 8:525a53f54326 71 {
venubk 8:525a53f54326 72 bufferSize = size;
venubk 8:525a53f54326 73 response[i] = '\0';
venubk 8:525a53f54326 74 int j = 0;
venubk 8:525a53f54326 75 size = 0;
venubk 8:525a53f54326 76
venubk 8:525a53f54326 77
venubk 8:525a53f54326 78
venubk 8:525a53f54326 79 break;
venubk 8:525a53f54326 80 }
venubk 8:525a53f54326 81
venubk 8:525a53f54326 82 printf("Response %X ", temp);
venubk 8:525a53f54326 83 //printf("recieve_flag %d ", recieve_flag);
venubk 8:525a53f54326 84
venubk 8:525a53f54326 85
hmiot 7:5cd07142d293 86
hmiot 7:5cd07142d293 87 if(temp == 0xA0)
venubk 6:db60638d7f9a 88 {
hmiot 7:5cd07142d293 89 recieve_flag = true;
hmiot 7:5cd07142d293 90 size = 0;
hmiot 7:5cd07142d293 91 }
hmiot 7:5cd07142d293 92
venubk 6:db60638d7f9a 93
venubk 8:525a53f54326 94 osDelay(180);
venubk 6:db60638d7f9a 95
venubk 6:db60638d7f9a 96 i++;
venubk 6:db60638d7f9a 97 }
venubk 6:db60638d7f9a 98 if(ble_flag)
venubk 6:db60638d7f9a 99 {
hmiot 7:5cd07142d293 100 recieve_flag = false;
venubk 6:db60638d7f9a 101 cs = 0;
venubk 6:db60638d7f9a 102 spimaster.write(0xAD);
venubk 6:db60638d7f9a 103 cs = 1;
venubk 6:db60638d7f9a 104 }
venubk 8:525a53f54326 105 else
venubk 8:525a53f54326 106 {
venubk 8:525a53f54326 107 recieve_flag = true;
venubk 8:525a53f54326 108 }
varshaberya123 5:f16b067257b6 109
varshaberya123 5:f16b067257b6 110 return 1;
venubk 6:db60638d7f9a 111 }
varshaberya123 5:f16b067257b6 112
hariom 2:20a5d4681abf 113 int spi_write(int *buf)
hariom 2:20a5d4681abf 114 {
hariom 2:20a5d4681abf 115 int response[8];
venubk 6:db60638d7f9a 116
venubk 6:db60638d7f9a 117 // pc.baud(9600);
hariom 2:20a5d4681abf 118 printf("SPI test..\n\r");
hariom 2:20a5d4681abf 119 //int temp;
hariom 2:20a5d4681abf 120 //size = strlen(buf);
venubk 6:db60638d7f9a 121 // Chip must be deselected
hariom 2:20a5d4681abf 122
hariom 2:20a5d4681abf 123
hariom 2:20a5d4681abf 124 //printf("spi data length is:%d\r\n", size);
hariom 2:20a5d4681abf 125 // Setup the spi for 8 bit data, high steady state clock,
hariom 2:20a5d4681abf 126 // second edge capture, with a 1MHz clock rate
venubk 6:db60638d7f9a 127 // spimaster.format(8,0);
venubk 6:db60638d7f9a 128 // spimaster.frequency(1000000);
hariom 2:20a5d4681abf 129
hariom 2:20a5d4681abf 130 int i = 0;
venubk 6:db60638d7f9a 131
hariom 2:20a5d4681abf 132 while(i < 5)
hariom 2:20a5d4681abf 133 {
hariom 2:20a5d4681abf 134 //osDelay(1000);
hariom 2:20a5d4681abf 135 // Select the device by seting chip select low
hariom 2:20a5d4681abf 136 cs = 0;
hariom 2:20a5d4681abf 137 response[i] = spimaster.write(buf[i]);
venubk 6:db60638d7f9a 138
venubk 6:db60638d7f9a 139 if(response[i] == 0xFE)
venubk 6:db60638d7f9a 140 {
venubk 6:db60638d7f9a 141 spimaster.write(0xAF);
venubk 6:db60638d7f9a 142 }
hariom 2:20a5d4681abf 143 cs = 1;
hariom 2:20a5d4681abf 144 printf("buf[i] = %X\r\n", buf[i]);
hariom 2:20a5d4681abf 145 printf("response[i] = %X\r\n", response[i]);
hariom 2:20a5d4681abf 146 i++;
hariom 2:20a5d4681abf 147 //printf("\r\nSlave response = 0x%X, 0x%X, 0x%X, 0x%X", response[0], response[1], response[2], response[3]);
hariom 2:20a5d4681abf 148 }
hariom 2:20a5d4681abf 149
hariom 2:20a5d4681abf 150 //printf("master send: %s\r\n", buf);
hariom 2:20a5d4681abf 151 //printf("slave response: %s\r\n", response);
hariom 2:20a5d4681abf 152 printf("exiting from spi write\r\n");
hariom 2:20a5d4681abf 153 return response[0];
hariom 2:20a5d4681abf 154 }
hariom 2:20a5d4681abf 155
hariom 2:20a5d4681abf 156
hariom 2:20a5d4681abf 157 void ble_task(void const *args)
hariom 2:20a5d4681abf 158 {
hariom 2:20a5d4681abf 159 printf("started ble task\r\n");
hariom 2:20a5d4681abf 160 int ble_buffer[8];
hariom 2:20a5d4681abf 161 int i;
hariom 2:20a5d4681abf 162 while (true) {
hariom 2:20a5d4681abf 163 if (ble_flag) {
hariom 2:20a5d4681abf 164 my_mutex.lock();
hariom 2:20a5d4681abf 165 for (i = 0; i < 5; i++)
hariom 2:20a5d4681abf 166 ble_buffer[i] = device_buffer[i];
hariom 2:20a5d4681abf 167 my_mutex.unlock();
hariom 2:20a5d4681abf 168 printf("spi write called\r\n");
hariom 2:20a5d4681abf 169 spi_write(ble_buffer);
hariom 2:20a5d4681abf 170 ble_flag = 0;
hariom 2:20a5d4681abf 171 }
hariom 2:20a5d4681abf 172 osDelay(1000);
hariom 2:20a5d4681abf 173 }
varshaberya123 5:f16b067257b6 174 }
varshaberya123 5:f16b067257b6 175
varshaberya123 5:f16b067257b6 176 /*void ble_energymeter(void const *argc)
varshaberya123 5:f16b067257b6 177 {
varshaberya123 5:f16b067257b6 178 printf("Starting energymeter ble task \r\n");
varshaberya123 5:f16b067257b6 179 int buff[8];
varshaberya123 5:f16b067257b6 180 while(true)
varshaberya123 5:f16b067257b6 181 {
varshaberya123 5:f16b067257b6 182 if(ble_eflag)
varshaberya123 5:f16b067257b6 183 {
varshaberya123 5:f16b067257b6 184 printf("calling spi read \r\n");
varshaberya123 5:f16b067257b6 185 spi_read(buff);
varshaberya123 5:f16b067257b6 186 ble_eflag = 0;
varshaberya123 5:f16b067257b6 187 }
varshaberya123 5:f16b067257b6 188 osDelay(1000);
varshaberya123 5:f16b067257b6 189 }
varshaberya123 5:f16b067257b6 190 }*/