forked from electro/esp-irblaster
parent
f9d3fa3cec
commit
2917a84eb5
@ -0,0 +1,70 @@ |
|||||||
|
#include <freertos/FreeRTOS.h> |
||||||
|
#include <freertos/task.h> |
||||||
|
#include <math.h> |
||||||
|
#include <esp_log.h> |
||||||
|
#include "onewires.h" |
||||||
|
#include "tasks.h" |
||||||
|
#include "owb.h" |
||||||
|
#include "ds18b20.h" |
||||||
|
|
||||||
|
static const char* TAG="1w"; |
||||||
|
|
||||||
|
static owb_rmt_driver_info s_rmt_driver_info[2] = {}; |
||||||
|
static OneWireBus * sBuses[2] = {}; |
||||||
|
static DS18B20_Info *sDevs[2] = {}; |
||||||
|
|
||||||
|
volatile int16_t gTempSensors[2] = {}; |
||||||
|
volatile bool tempSensorsOk = false; |
||||||
|
|
||||||
|
static void owtask(void *dummy) { |
||||||
|
while (1) { |
||||||
|
int16_t a = 0, b = 0; |
||||||
|
int rv = read_onewires(&a, &b); |
||||||
|
tempSensorsOk = (rv == 0); |
||||||
|
|
||||||
|
ESP_LOGI(TAG, "t1 %d, t2 %d Cx10", a, b); |
||||||
|
gTempSensors[0] = a; |
||||||
|
gTempSensors[1] = b; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void onewires_setup() |
||||||
|
{ |
||||||
|
sBuses[0] = owb_rmt_initialize(&s_rmt_driver_info[0], CONFIG_PIN_1WIRE_1, RMT_CHANNEL_1, RMT_CHANNEL_0); |
||||||
|
sBuses[1] = owb_rmt_initialize(&s_rmt_driver_info[1], CONFIG_PIN_1WIRE_2, RMT_CHANNEL_3, RMT_CHANNEL_2); |
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) { |
||||||
|
owb_use_crc(sBuses[i], true); |
||||||
|
sDevs[i] = ds18b20_malloc(); |
||||||
|
ds18b20_init_solo(sDevs[i], sBuses[i]); |
||||||
|
ds18b20_use_crc(sDevs[i], true); |
||||||
|
ds18b20_set_resolution(sDevs[i], DS18B20_RESOLUTION_12_BIT); |
||||||
|
} |
||||||
|
|
||||||
|
xTaskCreate(owtask, "1w", ONEWIRES_TASK_STACK, NULL, ONEWIRES_TASK_PRIO, NULL); |
||||||
|
} |
||||||
|
|
||||||
|
int read_onewires(int16_t *a, int16_t *b) |
||||||
|
{ |
||||||
|
for (int i = 0; i < 2; i++) { |
||||||
|
ds18b20_convert_all(sBuses[i]); |
||||||
|
} |
||||||
|
|
||||||
|
float readings[2] = { 0 }; |
||||||
|
DS18B20_ERROR errors[2] = { 0 }; |
||||||
|
|
||||||
|
ds18b20_wait_for_conversion(sDevs[0]); |
||||||
|
vTaskDelay(pdMS_TO_TICKS(10)); // to be sure its done
|
||||||
|
|
||||||
|
for (int i = 0; i < 2; i++) { |
||||||
|
errors[i] = ds18b20_read_temp(sDevs[i], &readings[i]); |
||||||
|
} |
||||||
|
|
||||||
|
if (errors[0] != DS18B20_OK || errors[1] != DS18B20_OK) { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
*a = (int16_t) roundf(readings[0] * 10); |
||||||
|
*b = (int16_t) roundf(readings[1] * 10); |
||||||
|
return 0; |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
/**
|
||||||
|
* Reading onewire sensors |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef ONEWIRES_H |
||||||
|
#define ONEWIRES_H |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
|
||||||
|
void onewires_setup(); |
||||||
|
|
||||||
|
int read_onewires(int16_t *a, int16_t *b); |
||||||
|
|
||||||
|
extern volatile int16_t gTempSensors[2]; |
||||||
|
extern volatile bool tempSensorsOk; |
||||||
|
|
||||||
|
#endif //ONEWIRES_H
|
Loading…
Reference in new issue