/** \brief Light & proximity sensor demo application entry * * After initializing the Xplained platform and sensor boards, this application * attaches descriptors to the ambient light and proximity sensor devices on * an Xplained inertial sensor board. The sensor data, which is formatted and * printed via printf() after being read, can be viewed with a serial terminal * application on a machine attached to the USB interface on the Xplained * board. */ int main(void) { sensor_t light_dev; /* Light sensor device descriptor */ sensor_t prox_dev; /* Proximity sensor device descriptor */ /* Initialize the board (Xplained UC3 or XMEGA & Xplained Sensor boards) * I/O pin mappings and any other configurable resources selected in * the build configuration. */ sensor_platform_init(); /* Attach descriptors to the defined sensor devices. */ sensor_attach(&light_dev, SENSOR_TYPE_LIGHT, 0, 0); sensor_attach(&prox_dev, SENSOR_TYPE_PROXIMITY, 0, 0); if (light_dev.err || prox_dev.err) { puts("\rSensor initialization error."); while (true) { /* Error occurred, loop forever */ } } /* Print sensor information */ if (PRINT_BANNER) { static const char *const banner_format = "%s\r\nID = 0x%02x ver. 0x%02x\r\n" "Bandwidth = %d Hz Range = +/- %d\r\n\n"; uint32_t id; uint8_t version; int16_t freq, range; sensor_device_id(&light_dev, &id, &version); sensor_get_bandwidth(&light_dev, &freq); sensor_get_range(&light_dev, &range); printf(banner_format, light_dev.drv->caps.name, (unsigned)id, (unsigned)version, freq, range); sensor_device_id(&prox_dev, &id, &version); sensor_get_bandwidth(&prox_dev, &freq); sensor_get_range(&prox_dev, &range); printf(banner_format, prox_dev.drv->caps.name, (unsigned)id, (unsigned)version, freq, range); delay_ms(500); } /* Set sample interval for the light sensor */ if (sensor_set_sample_rate(&light_dev, LIGHT_SAMPLE_RATE) != true) { printf("Error setting light sensor sample rate.\r\n"); } /* Set sample interval for the proximity sensor */ if (sensor_set_sample_rate(&prox_dev, PROX_SAMPLE_RATE) != true) { printf("Error setting proximity sensor sample rate.\r\n"); } /* Select all proximity sensor channels */ sensor_set_channel(&prox_dev, SENSOR_CHANNEL_ALL); #if (SET_PROX_THRESHOLD == true) /* Manually set proximity threshold values for each channel */ /* Otherwise, sensor will use values previously stored in nvram. */ sensor_set_threshold(&prox_dev, SENSOR_THRESHOLD_NEAR_PROXIMITY, PROX_THRESHOLD); #endif #if (SET_PROX_CURRENT == true) /* Manually set LED current value for each channel */ /* Otherwise, sensor will use default values. */ sensor_set_current(&prox_dev, PROX_CURRENT_mA); #endif /* Initialize sensor data descriptors for scaled vs. raw data. */ static sensor_data_t light_data = {.scaled = SCALED_DATA}; static sensor_data_t prox_data = {.scaled = SCALED_DATA}; while (true) { LED_Toggle(ACTIVITY_LED); /* Read sensor values */ sensor_get_light(&light_dev, &light_data); sensor_get_proximity(&prox_dev, &prox_data); /* Print sensor values */ if (SCALED_DATA) { printf("light = [%5d]\r\n", (int16_t)light_data.light.value); printf("prox = 1:%s 2:%s 3:%s\r\n", prox_labels[prox_data.proximity.value[0]], prox_labels[prox_data.proximity.value[1]], prox_labels[prox_data.proximity.value[2]]); } else { printf("light = [%5d]\r\n", (int16_t)light_data.light.value); printf("prox = [%.5x, %.5x, %.5x]\r\n", (int16_t)prox_data.proximity.value[0], (int16_t)prox_data.proximity.value[1], (int16_t)prox_data.proximity.value[2]); } delay_ms(500); } return 0; }
/** \brief Inertial sensor demo application entry * * After initializing the Xplained platform and sensor boards, this application * attaches descriptors to the accelerometer, gyroscope, and compass devices on * an Xplained inertial sensor board. The sensor data, which is formatted and * printed via printf() after being read, can be viewed with a serial terminal * application on a machine attached to the USB interface on the Xplained * board. */ int main(void) { sensor_t accel; /* Accelerometer device descriptor */ sensor_t compass; /* Magnetic compass device descriptor */ sensor_t gyro; /* Gyroscope device descriptor */ /* Initialize the board (Xplained UC3 or XMEGA & Xplained Sensor boards) * I/O pin mappings and any other configurable resources selected in * the build configuration. */ sensor_platform_init(); /* Attach descriptors to the defined sensor devices */ sensor_attach(&gyro, SENSOR_TYPE_GYROSCOPE, 0, 0); sensor_attach(&accel, SENSOR_TYPE_ACCELEROMETER, 0, 0); sensor_attach(&compass, SENSOR_TYPE_COMPASS, 0, 0); if (gyro.err || accel.err || compass.err) { puts("\rSensor initialization error."); while (true) { /* Error occurred, loop forever */ } } /* Print sensor information */ if (PRINT_BANNER) { static const char *const banner_format = "%s\r\nID = 0x%02x ver. 0x%02x\r\n" "Bandwidth = %d Hz Range = +/- %d\r\n\n"; uint32_t id; uint8_t version; int16_t freq, range; sensor_device_id(&gyro, &id, &version); sensor_get_bandwidth(&gyro, &freq); sensor_get_range(&gyro, &range); printf(banner_format, gyro.drv->caps.name, (unsigned)id, (unsigned)version, freq, range); sensor_device_id(&accel, &id, &version); sensor_get_bandwidth(&accel, &freq); sensor_get_range(&accel, &range); printf(banner_format, accel.drv->caps.name, (unsigned)id, (unsigned)version, freq, range); sensor_device_id(&compass, &id, &version); sensor_get_bandwidth(&compass, &freq); sensor_get_range(&compass, &range); printf(banner_format, compass.drv->caps.name, (unsigned)id, (unsigned)version, freq, range); delay_ms(500); } /* Initialize sensor data descriptors for scaled vs. raw data. */ static sensor_data_t accel_data = {.scaled = SCALED_DATA}; static sensor_data_t compass_data = {.scaled = SCALED_DATA}; static sensor_data_t gyro_data = {.scaled = SCALED_DATA}; static sensor_data_t temp_data = {.scaled = SCALED_DATA}; while (true) { LED_Toggle(ACTIVITY_LED); /* Read sensor values */ sensor_get_acceleration(&accel, &accel_data); sensor_get_rotation(&gyro, &gyro_data); sensor_get_temperature(&gyro, &temp_data); /* Get temp from gyro */ if (SCALED_DATA) { /* Get calculated magnetic heading from compass */ sensor_get_heading(&compass, &compass_data); } else { /* Get raw magnetic field readings (X,Y,Z) */ sensor_get_field(&compass, &compass_data); } /* Print sensor values */ if (SCALED_DATA) { printf("acc = [%5d, %5d, %5d]\r\n", (int16_t)accel_data.axis.x, (int16_t)accel_data.axis.y, (int16_t)accel_data.axis.z); printf("rot = [%5d, %5d, %5d]\r\n", (int16_t)gyro_data.axis.x, (int16_t)gyro_data.axis.y, (int16_t)gyro_data.axis.z); printf("heading %5d, inclination %5d, strength %5d\r\n", (uint16_t)compass_data.heading.direction, (int16_t)compass_data.heading.inclination, (uint16_t)compass_data.heading.strength); printf("T = %d C\r\n\n", (int16_t)temp_data.temperature.value); } else { printf("acc = [%.5x, %.5x, %.5x]\r\n", (uint16_t)accel_data.axis.x, (uint16_t)accel_data.axis.y, (uint16_t)accel_data.axis.z); printf("rot = [%.5x, %.5x, %.5x]\r\n", (uint16_t)gyro_data.axis.x, (uint16_t)gyro_data.axis.y, (uint16_t)gyro_data.axis.z); printf("field = [%.5x, %.5x, %.5x]\r\n", (int16_t)compass_data.axis.x, (int16_t)compass_data.axis.y, (int16_t)compass_data.axis.z); printf("T = %.5x\r\n\n", (uint16_t)temp_data.temperature.value); } delay_ms(500); } return 0; }