Skip to content
Snippets Groups Projects
Commit fbcf6a2b authored by emily.anderson@duke.edu's avatar emily.anderson@duke.edu
Browse files

Merge branch 'Gabby' into 'main'

Gabby

See merge request !1
parents 922b5f5b 2f1acf53
Branches main
No related tags found
1 merge request!1Draft: Emily Anderson [Gabriella Kupsho]
Pipeline #459918 passed
......@@ -5,4 +5,4 @@ build:
script:
- west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.4.2
- west update
- west build --build-dir /builds/EmbeddedMedicalDevices/f23-ble/build /builds/EmbeddedMedicalDevices/f23-ble --pristine --board nrf52833dk_nrf52833 --no-sysbuild -- -DNCS_TOOLCHAIN_VERSION=NONE -DCONF_FILE=/builds/EmbeddedMedicalDevices/f23-ble/prj.conf
\ No newline at end of file
- west build --build-dir $CI_PROJECT_DIR/build $CI_PROJECT_DIR --pristine --board nrf52833dk_nrf52833 --no-sysbuild -- -DNCS_TOOLCHAIN_VERSION=NONE -DCONF_FILE=$CI_PROJECT_DIR/prj.conf
{
"files.associations": {
"bluetooth.h": "c"
}
}
\ No newline at end of file
This diff is collapsed.
......@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(bme590-f23-ble)
target_sources(app PRIVATE src/main.c)
target_sources(app PRIVATE src/main.c src/pressure.c)
Input Voltage,Battery Percentage (%)
0.5,12
0.5,11
0.5,12
1,25
1,25
1,25
1.5,37
1.5,37
1.5,37
2,49
2,49
2,49
2.5,60
2.5,60
2.5,60
3,83
3,72
3,77
3.3,79
3.3,79
3.3,79
\ No newline at end of file
final_state_diagram.jpeg

400 KiB

100 HZ,Led 1 Vpp,Brightness
10,0.88,10.69
10,0.91,10.74
10,0.99,10.89
20,1.13,11.14
20,1.15,11.18
20,1.4,11.63
30,1.57,11.95
30,1.8,12.36
30,1.72,12.22
40,2.39,13.43
40,2.43,13.51
40,2.51,13.65
50,3.59,15.61
50,3.88,16.15
50,3.62,15.67
\ No newline at end of file
/ {
aliases
{
led1 = &led0;
led2 = &led1;
error = &led2;
heartbeat = &led3;
button1 = &button0;
button2 = &button1;
vadc0 = &vadc;
vadc1 = &vadc1;
vadc2 = &vadc2;
pwm1 = &pwmch1;
pwm2 = &pwmch2;
mpr = &mpr;
};
pwm {
compatible = "pwm-leds";
pwmch1: pwm_1 {
pwms = < &pwm0 0 PWM_MSEC(1) PWM_POLARITY_NORMAL>; // 0 - channel
label = "PWM_CH1";
};
pwmch2: pwm_2 {
pwms = < &pwm0 1 PWM_MSEC(1) PWM_POLARITY_NORMAL>; // 1 - channel
label = "PWM_CH2";
};
};
zephyr,user
{
io-channels = <&adc 0>, <&adc 1>, <&adc 2>; // need to "activate" these channels for IO usage
};
};
&adc
{
#address-cells = <1>;
#size-cells = <0>;
vadc: channel@0
{
reg = <0>; // channel number
zephyr,reference = "ADC_REF_INTERNAL"; // voltage ref for SA (0.6 V)
zephyr,gain = "ADC_GAIN_1_6"; // gain factor to scale ref voltage (1/gain)
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN0>; //pin 2
zephyr,input-negative = <NRF_SAADC_AIN1>; // pin 3
zephyr,resolution = <12>; // bit depth
zephyr,vref-mv = <750>;
};
vadc1: channel@1
{
reg = <1>; // channel number
zephyr,reference = "ADC_REF_INTERNAL"; // voltage ref for SA (0.6 V)
zephyr,vref-mv = <750>; //(3.3 V / 4)
zephyr,gain = "ADC_GAIN_1_6"; // gain factor to scale ref voltage (1/gain)
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN2>; // pin 4
zephyr,input-negative = <NRF_SAADC_AIN3>; // pin 5
zephyr,resolution = <12>; // bit depth
};
vadc2: channel@2
{
reg = <2>; // channel number
zephyr,reference = "ADC_REF_INTERNAL"; // voltage ref for SA (0.6 V)
zephyr,gain = "ADC_GAIN_1_6"; // gain factor to scale ref voltage (1/gain)
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
zephyr,input-positive = <NRF_SAADC_AIN4>; // pin 6
zephyr,resolution = <8>; // bit depth
};
status = "okay"; // enable the ADC
};
&pwm0 {
compatible = "nordic,nrf-pwm";
reg = <0x4001c000 0x1000>;
interrupts = <28 NRF_DEFAULT_IRQ_PRIORITY>;
status = "okay";
#pwm-cells = <3>;
pinctrl-0 = <&pwm0_default>;
pinctrl-1 = <&pwm0_sleep>;
pinctrl-names = "default", "sleep";
};
&pinctrl {
compatible = "nordic,nrf-pinctrl";
status = "okay";
pwm0_default: pwm0_default {
group1 {
psels = <NRF_PSEL(PWM_OUT0, 0, 13)>, // P0.28, channel 0 - pin 13 not 28
<NRF_PSEL(PWM_OUT1, 0, 14)>; // P0.30, channel 1 - pin 14 not 14
nordic,invert;
};
};
pwm0_sleep: pwm0_sleep {
group1 {
psels = <NRF_PSEL(PWM_OUT0, 0, 13)>, // P0.28, channel 0 - pin 13 not 28
<NRF_PSEL(PWM_OUT1, 0, 14)>; // P0.30, channel 1 - pin 14 not 30
low-power-enable;
};
};
};
/* I2C Pin Mapping
SCK: P0.27
SDA: P0.26
*/
&i2c0 {
mpr: mpr@18{
compatible = "honeywell,mpr"; // Honeywell MPR is a Zephyr-recognized sensor
reg = <0x18>;
status = "okay";
};
};
// BLE
CONFIG_GPIO=y
CONFIG_LOG=y
CONFIG_LOG_MODE_IMMEDIATE=y
CONFIG_SMF=y
CONFIG_ADC=y
CONFIG_CBPRINTF_FP_SUPPORT=y
CONFIG_FPU=y
CONFIG_PWM=y
CONFIG_SENSOR=y
# // BLE
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="YourDeviceName"
CONFIG_BT_DEVICE_NAME="ARE YOU THERE?"
CONFIG_BT_DEVICE_APPEARANCE=0
CONFIG_BT_MAX_CONN=1
CONFIG_BT_LL_SOFTDEVICE=y
CONFIG_BT_BAS=y // Battery Service GATT
CONFIG_BT_BAS=y
CONFIG_BT_SETTINGS=y
CONFIG_SETTINGS_RUNTIME=y
CONFIG_SETTINGS=y
CONFIG_SETTINGS_NONE=y
// DIS (Device Information Service)
CONFIG_BT_DIS=y // Device Information Service GATT
# // DIS (Device Information Service)
CONFIG_BT_DIS=y
CONFIG_BT_DIS_SETTINGS=y
CONFIG_BT_DIS_STR_MAX=25 // allow strings to be 25 char (or longer if desired)
CONFIG_BT_DIS_STR_MAX=25
CONFIG_BT_DIS_MODEL="YourDeviceModel"
CONFIG_BT_DIS_MANUF="YourManufacturerName"
CONFIG_BT_DIS_SERIAL_NUMBER=y
CONFIG_BT_DIS_SERIAL_NUMBER_STR="0001" // serial number
CONFIG_BT_DIS_SERIAL_NUMBER_STR="0001"
CONFIG_BT_DIS_FW_REV=y
CONFIG_BT_DIS_FW_REV_STR="0.9.0" // semantic version numbering
CONFIG_BT_DIS_FW_REV_STR="0.9.0"
CONFIG_BT_DIS_HW_REV=y
CONFIG_BT_DIS_HW_REV_STR="0.9.0" // semantic version numbering
CONFIG_BT_DIS_HW_REV_STR="0.9.0"
CONFIG_BT_DIS_SW_REV=y
CONFIG_BT_DIS_SW_REV_STR="0.9.0" // semantic version numbering
CONFIG_BT_DIS_PNP=y // plug-n-play (vendor ID)
CONFIG_BT_DIS_SW_REV_STR="0.9.0"
CONFIG_BT_DIS_PNP=y
CONFIG_BT_DIS_PNP_VID_SRC=1
CONFIG_BT_DIS_PNP_VID=0x01FF // vendor ID
\ No newline at end of file
CONFIG_BT_DIS_PNP_VID=0x01FF
This diff is collapsed.
#include "pressure.h"
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(pressure, LOG_LEVEL_INF);
int read_pressure_sensor(const struct device *pressure_in, int oversample, int atm_offset_daPa) {
/* Fetch-n-get pressure sensor data
INPUTS:
oversample (int) - number of serial data points to average together
atm_offset_daPa (int) - atmospheric pressure offset (daPa); set to 0 for absolute pressure
OUTPUTS:
pressure_daPa (int)
An error (-9999) will be returned if the pressure exceeds the range of the sensor.
*/
int err;
float pressure_kPa = 0;
float raw_pressure_kPa = 0;
int relative_pressure_kPa = 0;
struct sensor_value pressure_vals = {.val1 = 0, .val2 = 0};
LOG_DBG("Oversampling Factor: %d", oversample);
for (int i=0; i < oversample; i++) {
err = sensor_sample_fetch(pressure_in);
err = sensor_sample_fetch(pressure_in);
err = sensor_sample_fetch(pressure_in);
if (err != 0) {
LOG_ERR("MPR sensor_sample_fetch error: %d", err);
return -9999;
}
else {
err = sensor_channel_get(pressure_in, SENSOR_CHAN_PRESS, &pressure_vals);
if (err != 0) {
LOG_ERR("MPR sensor_channel_get error: %d", err);
return -9999;
}
}
// data returned in kPa
raw_pressure_kPa = (float)pressure_vals.val1 + (float)pressure_vals.val2/1000000;
LOG_DBG("Raw Pressure (kPa): %f", raw_pressure_kPa);
pressure_kPa += raw_pressure_kPa;
}
pressure_kPa /= oversample;
LOG_DBG("Mean Absolute Pressure (daPa): %f", pressure_kPa);
relative_pressure_kPa = (int)pressure_kPa - atm_offset_daPa;
LOG_INF("Mean Relative Pressure (daPa): %d", relative_pressure_kPa);
return relative_pressure_kPa;
}
\ No newline at end of file
#ifndef PRESSURE_H
#define PRESSURE_H
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/logging/log.h>
#include <zephyr/drivers/sensor.h> // prf.conf -> CONFIG_SENSOR=y
int read_pressure_sensor(const struct device *pressure_in, int oversample, int atm_offset_daPa);
#endif
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment