samples: sensor: sm351lt: Add new SM351LT sensor sample
Adds sample for SM351LT sensor and outputs to console. Signed-off-by: Jamie McCrae <jamie.mccrae@lairdconnect.com>
This commit is contained in:
parent
030456c24e
commit
94721b316f
5 changed files with 164 additions and 0 deletions
12
samples/sensor/sm351lt/CMakeLists.txt
Normal file
12
samples/sensor/sm351lt/CMakeLists.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# Copyright (c) 2020, Laird Connectivity
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
cmake_minimum_required(VERSION 3.13.1)
|
||||
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||
project(sm351lt)
|
||||
|
||||
FILE(GLOB app_sources src/*.c)
|
||||
target_sources(app PRIVATE ${app_sources})
|
51
samples/sensor/sm351lt/README.rst
Normal file
51
samples/sensor/sm351lt/README.rst
Normal file
|
@ -0,0 +1,51 @@
|
|||
.. _sm351lt:
|
||||
|
||||
SM351LT: Magnetoresistive Sensor Example
|
||||
########################################
|
||||
|
||||
Overview
|
||||
********
|
||||
|
||||
This sample application periodically polls an SM351LT magnetoresistive sensor
|
||||
and displays if a magnet near to the sensor, via the console.
|
||||
|
||||
Requirements
|
||||
************
|
||||
|
||||
This sample uses the Honeywell SM351LT sensor.
|
||||
|
||||
References
|
||||
**********
|
||||
|
||||
For more information about the SM351LT magnetoresistive sensor see
|
||||
https://sensing.honeywell.com/SM351LT-low-power
|
||||
|
||||
Building and Running
|
||||
********************
|
||||
|
||||
The SM351LT (or compatible) sensors are available on the following boards:
|
||||
|
||||
* :ref:`bt510`
|
||||
|
||||
Building on bt510
|
||||
==================
|
||||
|
||||
:ref:`bt510` includes a Honeywell SM351LT magnetoresistive sensor.
|
||||
|
||||
.. zephyr-app-commands::
|
||||
:zephyr-app: samples/sensor/sm351lt
|
||||
:board: bt510
|
||||
:goals: build flash
|
||||
:compact:
|
||||
|
||||
Sample Output
|
||||
=============
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Polling at 0.5 Hz
|
||||
#1 @ 6 ms: 1
|
||||
#2 @ 2007 ms: 0
|
||||
#3 @ 4009 ms: 0
|
||||
#4 @ 6010 ms: 1
|
||||
#5 @ 8012 ms: 1
|
4
samples/sensor/sm351lt/prj.conf
Normal file
4
samples/sensor/sm351lt/prj.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
CONFIG_STDOUT_CONSOLE=y
|
||||
CONFIG_GPIO=y
|
||||
CONFIG_SENSOR=y
|
||||
CONFIG_SM351LT=y
|
7
samples/sensor/sm351lt/sample.yaml
Normal file
7
samples/sensor/sm351lt/sample.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
sample:
|
||||
name: SM351LT Magnetoresistive Sensor Example
|
||||
tests:
|
||||
sample.sensor.sm351lt:
|
||||
harness: sensor
|
||||
tags: samples sensor
|
||||
depends_on: gpio sm351lt
|
90
samples/sensor/sm351lt/src/main.c
Normal file
90
samples/sensor/sm351lt/src/main.c
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Laird Connectivity
|
||||
* Based on code by Nordic Semiconductor ASA
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <zephyr.h>
|
||||
#include <device.h>
|
||||
#include <drivers/gpio.h>
|
||||
#include <drivers/sensor.h>
|
||||
|
||||
static void fetch_and_display(struct device *sensor)
|
||||
{
|
||||
static unsigned int count;
|
||||
struct sensor_value mag;
|
||||
int rc = sensor_sample_fetch(sensor);
|
||||
|
||||
++count;
|
||||
if (rc == 0) {
|
||||
rc = sensor_channel_get(sensor,
|
||||
SENSOR_CHAN_PROX,
|
||||
&mag);
|
||||
}
|
||||
if (rc < 0) {
|
||||
printf("ERROR: Update failed: %d\n", rc);
|
||||
} else {
|
||||
printf("#%u @ %u ms: %d\n",
|
||||
count, k_uptime_get_32(), mag.val1);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SM351LT_TRIGGER
|
||||
static void trigger_handler(struct device *dev,
|
||||
struct sensor_trigger *trig)
|
||||
{
|
||||
fetch_and_display(dev);
|
||||
}
|
||||
#endif
|
||||
|
||||
void main(void)
|
||||
{
|
||||
struct device *sensor = device_get_binding(DT_LABEL(DT_INST(0, honeywell_sm351lt)));
|
||||
|
||||
if (sensor == NULL) {
|
||||
printf("Could not get %s device\n",
|
||||
DT_LABEL(DT_INST(0, honeywell_sm351lt)));
|
||||
return;
|
||||
}
|
||||
|
||||
#if CONFIG_SM351LT_TRIGGER
|
||||
{
|
||||
struct sensor_trigger trig;
|
||||
int rc;
|
||||
|
||||
trig.type = SENSOR_TRIG_NEAR_FAR;
|
||||
trig.chan = SENSOR_CHAN_PROX;
|
||||
|
||||
struct sensor_value trigger_type = {
|
||||
.val1 = GPIO_INT_EDGE_BOTH,
|
||||
};
|
||||
|
||||
rc = sensor_attr_set(sensor, trig.chan,
|
||||
SENSOR_ATTR_PRIV_START,
|
||||
&trigger_type);
|
||||
if (rc != 0) {
|
||||
printf("Failed to set trigger type: %d\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = sensor_trigger_set(sensor, &trig, trigger_handler);
|
||||
if (rc != 0) {
|
||||
printf("Failed to set trigger: %d\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
printf("Waiting for triggers\n");
|
||||
while (true) {
|
||||
k_sleep(K_MSEC(2000));
|
||||
}
|
||||
}
|
||||
#else /* CONFIG_SM351LT_TRIGGER */
|
||||
printf("Polling at 0.5 Hz\n");
|
||||
while (true) {
|
||||
fetch_and_display(sensor);
|
||||
k_sleep(K_MSEC(2000));
|
||||
}
|
||||
#endif /* CONFIG_SM351LT_TRIGGER */
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue