123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #include "CH2O.h"
- #include "iot_adc.h"
- #include "iot_errno.h"
- #include "iot_gpio.h"
- #include "iot_gpio_ex.h"
- #include "iot_pwm.h"
- #include <math.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #define CAL_PPM 20
- #define RL 1
- #define WIFI_IOT_IO_NAME_GPIO_8 8
- #define WIFI_IOT_PWM_PORT_PWM1 1
- #define WIFI_IOT_IO_FUNC_GPIO_8_PWM1_OUT 5
- #define SAFE_LED_GPIO 14
- #define WARN_LED_GPIO 7
- static float R0;
- void BoardInit(void)
- {
- IoTGpioInit(SAFE_LED_GPIO);
- IoTGpioSetFunc(SAFE_LED_GPIO, IOT_GPIO_FUNC_GPIO_14_GPIO);
- IoTGpioSetDir(SAFE_LED_GPIO, IOT_GPIO_DIR_OUT);
- IoTGpioInit(WARN_LED_GPIO);
- IoTGpioSetFunc(WARN_LED_GPIO, IOT_GPIO_FUNC_GPIO_7_GPIO);
- IoTGpioSetDir(WARN_LED_GPIO, IOT_GPIO_DIR_OUT);
- IoTGpioInit(WIFI_IOT_IO_NAME_GPIO_8);
- IoTGpioSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_PWM1_OUT);
- IoTGpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, IOT_GPIO_DIR_OUT);
- IoTPwmInit(WIFI_IOT_PWM_PORT_PWM1);
- }
- static float GetVoltage(void)
- {
- unsigned int ret;
- unsigned short data;
- ret = IoTAdcRead(5, &data, IOT_ADC_EQU_MODEL_8, IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
- if (ret != IOT_SUCCESS)
- {
- printf("ADC Read Fail\n");
- }
- return (float)data * 1.8 * 4 / 4096.0;
- }
- int GetMQ2PPM(float* ppm)
- {
- unsigned int ret;
- unsigned short data;
- float voltage, RS;
- ret = IoTAdcRead(6, &data, IOT_ADC_EQU_MODEL_8, IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
- if (ret != 0) {
- printf("ADC Read Fail\n");
- return -1;
- }
- voltage = (float)data * 1.8 * 4 / 4096.0;
- printf("voltage:%2.2fV\n",voltage);
- RS = (5 - voltage) / voltage * RL;
- *ppm = 613.9f * pow(RS / R0, -2.074f);
- return 0;
- }
- void MQ2PPMCalibration(void)
- {
- float voltage = GetVoltage();
- float RS = (5 - voltage) / voltage * RL;
- R0 = RS / pow(CAL_PPM / 613.9f, 1 / -2.074f);
- }
- void BeepStatusSet(SwitchStatus status)
- {
- if (status == ON) {
- IoTPwmStart(WIFI_IOT_PWM_PORT_PWM1, 50, 4000);
- }
- if (status == OFF) {
- IoTPwmStop(WIFI_IOT_PWM_PORT_PWM1);
- }
- }
- void LedSafeStatusSet(SwitchStatus status)
- {
- if (status == ON) {
- IoTGpioSetOutputVal(SAFE_LED_GPIO, 1);
- }
- if (status == OFF) {
- IoTGpioSetOutputVal(SAFE_LED_GPIO, 0);
- }
- }
- void LedWarnStatusSet(SwitchStatus status)
- {
- if (status == ON) {
- IoTGpioSetOutputVal(WARN_LED_GPIO, 1);
- }
- if (status == OFF) {
- IoTGpioSetOutputVal(WARN_LED_GPIO, 0);
- }
- }
|