This IOT research work is the working part of the program Change the Wi-Fi ssid and password and program STM32l475 board to see the result on the terminal (C# GUI)
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Revision 37:b7acef59086c, committed 2021-02-23
- Comitter:
- saileshtimilsena
- Date:
- Tue Feb 23 20:03:58 2021 +0000
- Parent:
- 36:2d0820b53217
- Commit message:
- Updated Version for the Research Work...; Change the Wi-Fi ssid and password and program STM32L475 board and see the result in GUI with graph
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Feb 19 16:16:56 2021 +0000 +++ b/main.cpp Tue Feb 23 20:03:58 2021 +0000 @@ -20,24 +20,7 @@ #include "mbed.h" #include "simple-mbed-cloud-client.h" #include "LittleFileSystem.h" - -#include "stdbool.h" //for stepper motor function - -#define STEPPER_PIN_1 PA_15 //ARD.D9-PWM PA15 -#define STEPPER_PIN_2 PA_2 //ARD.D10-PWM PA2 -#define STEPPER_PIN_3 PA_7 //ARD.D11-PWM PA7 -#define STEPPER_PIN_4 PA_6 //ARD.D12-PWM PA6 - -DigitalOut steeperOne(STEPPER_PIN_1); -DigitalOut steeperTwo(STEPPER_PIN_2); -DigitalOut steeperThree(STEPPER_PIN_3); -DigitalOut steeperFour(STEPPER_PIN_4); - -DigitalOut myIOs(PB_14); // review the results on PB_14 -DigitalOut myIOs2(PA_5); // review the results on PA_5 -int step_number=0; -int open_flag=0; -int close_flag=0; +#include<math.h> // Default network interface object. Don't forget to change the WiFi SSID/password in mbed_app.json if you're using WiFi. NetworkInterface *net; @@ -72,8 +55,9 @@ static DevI2C devI2c(PB_11,PB_10); static HTS221Sensor sen_hum_temp(&devI2c); static LPS22HBSensor sen_press_temp(&devI2c); +//static LSM6DSLSensor sen_acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); + static DigitalOut shutdown_pin(PC_6); -//static VL53L0X sen_distance(&devI2c, &shutdown_pin, PC_7); // Temperature reading from microcontroller AnalogIn adc_temp(ADC_TEMP); @@ -88,7 +72,9 @@ #ifdef SEND_ALL_SENSORS MbedCloudClientResource *res_humidity; MbedCloudClientResource *res_pressure; -MbedCloudClientResource *res_adc_temp; +MbedCloudClientResource *res_temperature; + + #endif /* SEND_ALL_SENSORS */ // An event queue is a very useful structure to debounce information between contexts (e.g. ISR and normal threads) @@ -122,87 +108,21 @@ } printf("\n"); } -//Serial port define for uart1 usb -//pb7 rx -//pb6 tx -//Serial device(USBTX, USBRX); -Serial device(PB_6, PB_7); // tx, rx - /** * Button function triggered by the physical button press. */ - - - - - void Tx_interrupt(); -void Rx_interrupt(); -void send_line(); -void read_line(); - - -// Circular buffers for serial TX and RX data - used by interrupt routines -const int buffer_size = 255; -// might need to increase buffer size for high baud rates -char tx_buffer[buffer_size+1]; -char rx_buffer[buffer_size+1]; -// Circular buffer pointers -// volatile makes read-modify-write atomic -volatile int tx_in=0; -volatile int tx_out=0; -volatile int rx_in=0; -volatile int rx_out=0; -// Line buffers for sprintf and sscanf -char tx_line[80]; -char rx_line[80]; - - int i=0; - int rx_i=0; - device.baud(115200); - -// Setup a serial interrupt function to receive data - device.attach(&Rx_interrupt, Serial::RxIrq); -// Setup a serial interrupt function to transmit data - device.attach(&Tx_interrupt, Serial::TxIrq); - - void button_press() { int v = res_button->get_value_int() + 1; res_button->set_value(v); printf("*** Button clicked %d times \n", v); } - // Called everytime a new character goes into // the RX buffer. Test that character for \n // Note, rxGetLastChar() gets the last char that // we received but it does NOT remove it from // the RX buffer. -void read_line() { - int i; - i = 0; -// Start Critical Section - don't interrupt while changing global buffer variables - NVIC_DisableIRQ(UART1_IRQn); -// Loop reading rx buffer characters until end of line character - while ((i==0) || (rx_line[i-1] != '\r')) { -// Wait if buffer empty - if (rx_in == rx_out) { -// End Critical Section - need to allow rx interrupt to get new characters for buffer - NVIC_EnableIRQ(UART1_IRQn); - while (rx_in == rx_out) { - } -// Start Critical Section - don't interrupt while changing global buffer variables - NVIC_DisableIRQ(UART1_IRQn); - } - rx_line[i] = rx_buffer[rx_out]; - i++; - rx_out = (rx_out + 1) % buffer_size; - } -// End Critical Section - NVIC_EnableIRQ(UART1_IRQn); - rx_line[i-1] = 0; - return; -} + /** * Notification callback handler * @param resource The resource that triggered the callback @@ -221,82 +141,11 @@ endpointInfo = endpoint; } -/* - for one rotation when passed true or false in function OneStep(bool) -*/ -void OneStep(bool dir){ -if(dir) -{ - switch(step_number){ - case 0: - steeperOne =1; - steeperTwo =0; - steeperThree =0; - steeperFour =0; - break; - case 1: - steeperOne =0; - steeperTwo =1; - steeperThree =0; - steeperFour =0; - break; - case 2: - steeperOne =0; - steeperTwo =0; - steeperThree =1; - steeperFour =0; - break; - case 3: - steeperOne =0; - steeperTwo =0; - steeperThree =0; - steeperFour =1; - break; - }// end of switch -}// end of if - -else -{ - switch(step_number){ - case 0: - steeperOne =0; - steeperTwo =0; - steeperThree =0; - steeperFour =1; - break; - case 1: - steeperOne =0; - steeperTwo =0; - steeperThree =1; - steeperFour =0; - break; - case 2: - steeperOne =0; - steeperTwo =1; - steeperThree =0; - steeperFour =0; - break; - case 3: - steeperOne =1; - steeperTwo =0; - steeperThree =0; - steeperFour =0; - break; - - - }// end of switch - }// end of else -step_number++; - if(step_number > 3){ - step_number = 0; - } -} // end of OneStep() function /** * Initialize sensors */ void sensors_init() { uint8_t id1, id2; - printf ("\nSensors configuration:\n"); // Initialize sensors sen_hum_temp.init(NULL); @@ -305,13 +154,12 @@ /// Call sensors enable routines sen_hum_temp.enable(); sen_press_temp.enable(); - + sen_hum_temp.read_id(&id1); sen_press_temp.read_id(&id2); printf("HTS221 humidity & temperature = 0x%X\n", id1); printf("LPS22HB pressure & temperature = 0x%X\n", id2); - printf("\n"); ; } @@ -320,55 +168,28 @@ * This function is called periodically. */ void sensors_update() { - float temp3_value, humid_value, pressure_value = 0.0; - - sen_hum_temp.get_humidity(&humid_value); - sen_press_temp.get_pressure(&pressure_value); - temp3_value = adc_temp.read()*100; - - printf("%2.0f^%2.0f^%3.0f",temp3_value,humid_value,pressure_value); - printf("\n"); - - // printf ("%02d : %02d : %02d\n", temp3_value, hummitly, pressure); + float humid_value, pressure_value = 0.0; + float temp1_value = 0.0; + //float temp3_value = 0.0; -// added a new code for stepper motor -// if temperature reading is higher, open motor - if(temp3_value > 30) - { - open_flag = 0; - while(open_flag==0){ - OneStep(false); - wait(0.01); - bool btn_pressed = (button.read() == MBED_CONF_APP_BUTTON_PRESSED_STATE); - if (btn_pressed) { - printf("Door Opened...\n"); - open_flag=1; - close_flag=0; - }//end of if(btn_pressed) - }// end of while - }// end of if(temp3_value>20) - // now we expect to close + sen_hum_temp.get_humidity(&humid_value); + sen_hum_temp.get_temperature(&temp1_value); + sen_press_temp.get_pressure(&pressure_value); + //temp3_value = adc_temp.read()*100; + //sen_acc_gyro.get_g_axes(g_axes); + + printf("%2.2f^%2.1f^%3.2f",temp1_value,humid_value,pressure_value); + printf("\n"); - if(temp3_value < 20)//door has to close - { - close_flag = 0; - while(close_flag==0){ - OneStep(true); - wait(0.01); - bool btn_pressed = (button.read() == MBED_CONF_APP_BUTTON_PRESSED_STATE); - if (btn_pressed) { - printf("Door Closed...\n"); - open_flag=0; - close_flag=1; - }//end of if(btn_pressed) - }// end of while - } - + wait_us(4000);//Wait until the loop_timer reaches 4000us (250Hz) before starting the next loop + if (endpointInfo) { #ifdef SEND_ALL_SENSORS res_humidity->set_value(humid_value); + res_temperature->set_value(temp1_value); res_pressure->set_value(pressure_value); - res_adc_temp->set_value(temp3_value); + //res_adc_temp->set_value(temp3_value); + #endif /* SEND_ALL_SENSORS */ } } @@ -444,26 +265,21 @@ #ifdef SEND_ALL_SENSORS // Sensor resources -/* res_temperature = client.create_resource("3303/0/5700", "Temperature HTS221 (C)"); + res_temperature = client.create_resource("3303/0/5700", "Temperature HTS221 (C)"); res_temperature->set_value(0); res_temperature->methods(M2MMethod::GET); - res_temperature->observable(true);*/ + res_temperature->observable(true); res_humidity = client.create_resource("3304/0/5700", "Humidity"); res_humidity->set_value(0); res_humidity->methods(M2MMethod::GET); res_humidity->observable(true); - res_adc_temp = client.create_resource("3303/2/5700", "Temperature ADC (C)"); - res_adc_temp->set_value(0); - res_adc_temp->methods(M2MMethod::GET); - res_adc_temp->observable(true); - res_pressure = client.create_resource("3323/0/5700", "Pressure"); res_pressure->set_value(0); res_pressure->methods(M2MMethod::GET); res_pressure->observable(true); - + #endif /* SEND_ALL_SENSORS */ printf("Initialized Pelion Client. Registering...\n"); @@ -478,7 +294,7 @@ while (i-- > 0 && !client.is_client_registered()) { wait_ms(100); } - + button.fall(eventQueue.event(&button_press)); // The timer fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations