Example showing how to integrate EASE with proximity Sensor and Base board
Dependencies: mbed EsmacatShield X_NUCLEO_6180XA1
Information about Esmacat and EASE is provided in the link below. https://os.mbed.com/users/esmacat/code/EASE_Example/wiki/Homepage
Information about the hardware needs and setup is provided in the link below. https://os.mbed.com/users/esmacat/code/EASE_Example/wiki/Hardware-Setup
Information about the structure of the system and it's software is provided in the link below. https://os.mbed.com/users/esmacat/code/EASE_Example/wiki/Software
Diff: main.cpp
- Revision:
- 6:318b85f6e6a5
- Parent:
- 4:84dfc00ae7b3
diff -r 6935fab2a92b -r 318b85f6e6a5 main.cpp --- a/main.cpp Mon Aug 21 15:52:57 2017 +0000 +++ b/main.cpp Fri Feb 07 23:15:39 2020 +0000 @@ -1,3 +1,36 @@ +/** + ****************************************************************************** + * @file main.cpp + * @date February 07, 2020 + * @brief mbed test application Esmacat Shield working together with + * STMicroelectronics X-NUCLEO-6180XA1 + * The Expansion Board for range measurement and als measurement. + *The original code is by STMicroelectronics which is modified to integrate EASE. + *The Copyright of STMicroelectronics is retained below. + ****************************************************************************** + + Copyright (c) 2020 https://www.esmacat.com/ + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + EsmacatShield.h - Library for using EtherCAT Arduino Shield by Esmacat(EASE). + Created by Esmacat, 01/22/2020 + +******************************************************************************* +* @file EsmacatShield.h +******************************************************************************* +*/ + /* This VL6180X Expansion board test application performs a range measurement and an als measurement in interrupt mode on the onboard embedded top sensor. @@ -26,6 +59,8 @@ #include <stdlib.h> #include <stdio.h> #include <assert.h> +#include <EsmacatShield.h> //Esmacat : Include Esmacat Shield Library + /* Definitions ---------------------------------------------------------------*/ @@ -41,6 +76,15 @@ /* Types ---------------------------------------------------------------------*/ + +/* Esmacat communication------------------------------------------------------*/ +DigitalOut selectPin(D10); // D10 is used to drive chip enable low +SPI spi(D11, D12, D13); // mosi, miso, sclk +EsmacatShield slave(spi, selectPin); // EsmacatShield Slave object creation +int sendToEsmacat; +bool led_on; +/* Esmacat communication------------------------------------------------------*/ + /* Operating mode */ operating_mode_t operating_mode, prev_operating_mode; enum op_mode_int_poll_t { @@ -84,17 +128,31 @@ if (op_mode==range_continuous_interrupt || op_mode==range_continuous_polling) { if (data_sensor_top.range_mm!=0xFFFFFFFF) { sprintf(str,"%d",data_sensor_top.range_mm); + /*Copy Sensor data to be sent to EASE*/ + sendToEsmacat = data_sensor_top.range_mm; } else { + /*Copy Sensor data to be sent to EASE*/ + sendToEsmacat = 0; // Esmacat sprintf(str,"%s","----"); } } else if (op_mode==als_continuous_interrupt || op_mode==als_continuous_polling) { if (data_sensor_top.lux!=0xFFFFFFFF) { sprintf(str,"%d",data_sensor_top.lux); + /*Copy Sensor data to be sent to EASE*/ + sendToEsmacat = data_sensor_top.lux; // Esmacat } else { + /*If not valid data then send 0 to EASE*/ + sendToEsmacat = 0; // Esmacat sprintf(str,"%s","----"); } } - board->display->display_string(str, strlen(str)); + + /*Toggle the LED on EASE board*/ + led_on = !led_on; + printf("sendToEsmacat value %d \n", sendToEsmacat); // Esmacat + slave.write_reg_value(0,sendToEsmacat, led_on); // Write data to EASE + + board->display->display_string(str, strlen(str)); } /* On board red slider position check */ @@ -159,13 +217,14 @@ /* Handle continuous ALS or Range measurement. */ void int_continous_als_or_range_measure (DevI2C *device_i2c) { + int status; /* Creates the 6180XA1 expansion board singleton obj */ #ifdef TARGET_STM32F429 - board = XNucleo6180XA1::instance(device_i2c, A5, A2, D13, D2); + board = XNucleo6180XA1::instance(device_i2c, A5, A2, D7, D2);//Pratima D13 -> D7 #else - board = XNucleo6180XA1::instance(device_i2c, A3, A2, D13, D2); + board = XNucleo6180XA1::instance(device_i2c, A3, A2, D7, D2);//Pratima D13 -> D7 #endif display_msg("INT"); @@ -213,11 +272,14 @@ } else { display_refresh(operating_mode); } + } } display_msg("BYE"); + } + /*=================================== Main ================================== Move the VL6180X Expansion board red slider to switch between ALS or Range measures. @@ -225,6 +287,12 @@ =============================================================================*/ int main() { +/* Esmacat communication*/ + + slave.setup_spi(); //Setup SPI for EASE + + + #if USER_BUTTON==PC_13 // Cross compiling for Nucleo-F401 InterruptIn stop_button (USER_BUTTON); stop_button.rise (&stop_measure_irq); @@ -234,3 +302,5 @@ /* Start continous measures Interrupt based */ int_continous_als_or_range_measure (device_i2c); } + +