1 /*
2 * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <stdio.h>
17 #include <unistd.h>
18 #include <iot_pwm.h>
19 #include "ohos_init.h"
20 #include "cmsis_os2.h"
21 #include "iot_i2c.h"
22 #include "app_demo_environment.h"
23 #include "app_demo_multi_sample.h"
24 #include "app_demo_aht20.h"
25 #include "app_demo_mq2.h"
26 #include "app_demo_config.h"
27
28 static unsigned short g_hi3861BoardLedTest = 0;
29
30 #define FLAG_TRUE (1)
31 #define FLAG_FALSE (0)
32
ReturnAllModeEnumSample(void)33 void ReturnAllModeEnumSample(void)
34 {
35 static unsigned char currentMode = 0;
36 currentMode = GetKeyStatus(CURRENT_MODE);
37 while (1) {
38 if (currentMode != GetKeyStatus(CURRENT_MODE)) {
39 currentMode = GetKeyStatus(CURRENT_MODE);
40 break;
41 }
42 TaskMsleep(SLEEP_1_MS);
43 }
44 }
45
46 /* environment menu display */
ShowAllEnvironmentValue(void)47 void ShowAllEnvironmentValue(void)
48 {
49 unsigned short combustibleMainMenuGasValueStr[10] = {0};
50 unsigned short temperatureStr[6] = {0};
51 unsigned short humidityStr[6] = {0};
52 static unsigned char currentMode = 0;
53
54 currentMode = GetKeyStatus(CURRENT_MODE);
55 IoTI2cInit(0, HI_I2C_IDX_BAUDRATE); /* baudrate: 400000 */
56 IoTI2cSetBaudrate(0, HI_I2C_IDX_BAUDRATE);
57 while (1) {
58 (void)GetAht20SensorData();
59 Mq2GetData();
60 (void*)FloatToString(GetAhtSensorValue(AHT_TEMPERATURE), temperatureStr);
61 (void*)FloatToString(GetAhtSensorValue(AHT_HUMIDITY), humidityStr);
62 (void*)FloatToString(GetCombuSensorValue(), combustibleMainMenuGasValueStr);
63
64 OledShowStr(OLED_X_POSITION_18, OLED_Y_POSITION_5,
65 temperatureStr, OLED_DISPLAY_STRING_TYPE_1); /* 18, 5, xx, 1 */
66
67 OledShowStr(OLED_X_POSITION_81, OLED_Y_POSITION_5,
68 humidityStr, OLED_DISPLAY_STRING_TYPE_1); /* 18, 5, xx, 1 */
69
70 if (!GetCombuSensorValue()) {
71 OledShowStr(OLED_X_POSITION_48, OLED_Y_POSITION_6,
72 "0.00 ", OLED_DISPLAY_STRING_TYPE_1); /* 48, 6, x.xx, 1 */
73 } else {
74 OledShowStr(OLED_X_POSITION_48, OLED_Y_POSITION_6,
75 combustibleMainMenuGasValueStr, OLED_DISPLAY_STRING_TYPE_1); /* 48, 6, x.xx, 1 */
76 }
77 if (currentMode != GetKeyStatus(CURRENT_MODE)) {
78 currentMode = GetKeyStatus(CURRENT_MODE);
79 break;
80 }
81 TaskMsleep(SLEEP_100_MS); // 10ms
82 }
83 }
84
EnvironmentAllMode(void)85 void EnvironmentAllMode(void)
86 {
87 OledFillScreen(OLED_CLEAN_SCREEN); // clean screen
88 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_0,
89 "WiFi-AP ON U:1", OLED_DISPLAY_STRING_TYPE_1); /* 0, 0, x.xx, 1 */
90 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_1,
91 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 1, x.xx, 1 */
92 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_2,
93 " Environment ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 2, x.xx, 1 */
94 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_3,
95 " Monitoring ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 3, x.xx, 1 */
96 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_4,
97 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
98 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
99 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
100 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
101 "T: C H: % ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 5, x.xx, 1 */
102 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_6,
103 "C_Gas:00 ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 6, x.xx, 1 */
104 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_7,
105 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 7, x.xx, 1 */
106 ShowAllEnvironmentValue();
107 }
108
EnvironmentTemperatureMode(void)109 void EnvironmentTemperatureMode(void)
110 {
111 OledFillScreen(OLED_CLEAN_SCREEN); // clean screen
112 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_0,
113 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 0, x.xx, 1 */
114 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_1,
115 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 1, x.xx, 1 */
116 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_2,
117 " Temperature ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 2, x.xx, 1 */
118 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_3,
119 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 3, x.xx, 1 */
120 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_4,
121 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
122 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
123 " T: C ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 5, x.xx, 1 */
124 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_6,
125 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 6, x.xx, 1 */
126 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_7,
127 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 7, x.xx, 1 */
128 ShowTemperatureValue();
129 }
130
EnvironmentHumidityMode(void)131 void EnvironmentHumidityMode(void)
132 {
133 OledFillScreen(OLED_CLEAN_SCREEN); // clean screen
134 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_0,
135 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 0, x.xx, 1 */
136 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_1,
137 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 1, x.xx, 1 */
138 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_2,
139 " Humidity ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 2, x.xx, 1 */
140 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_3,
141 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 3, x.xx, 1 */
142 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_4,
143 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
144 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
145 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
146 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
147 " H: % ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 5, x.xx, 1 */
148 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_6,
149 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 6, x.xx, 1 */
150 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_7,
151 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 7, x.xx, 1 */
152 ShowHumidityValue();
153 }
154
EnvironmentCombustibleGasMode(void)155 void EnvironmentCombustibleGasMode(void)
156 {
157 OledFillScreen(OLED_CLEAN_SCREEN); // clean screen
158 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_0,
159 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 0, x.xx, 1 */
160 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_1,
161 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 1, x.xx, 1 */
162 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_2,
163 " C_Gas ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 2, x.xx, 1 */
164 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_3,
165 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 3, x.xx, 1 */
166 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_4,
167 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
168 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
169 " C_Gas: ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 5, x.xx, 1 */
170 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_6,
171 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 6, x.xx, 1 */
172 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_7,
173 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 7, x.xx, 1 */
174 ShowCombustibleGasValue();
175 }
176
EnvironmentReturnMode(void)177 void EnvironmentReturnMode(void)
178 {
179 OledFillScreen(OLED_CLEAN_SCREEN); // clean screen
180 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_0,
181 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 0, x.xx, 1 */
182 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_1,
183 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 1, x.xx, 1 */
184 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_2,
185 "Return Menu ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 2, x.xx, 1 */
186 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_3,
187 " Environment ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 3, x.xx, 1 */
188 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_4,
189 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 4, x.xx, 1 */
190 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_5,
191 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 5, x.xx, 1 */
192 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_6,
193 " ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 6, x.xx, 1 */
194 OledShowStr(OLED_X_POSITION_0, OLED_Y_POSITION_7,
195 "Continue ", OLED_DISPLAY_STRING_TYPE_1); /* 0, 7, x.xx, 1 */
196 ReturnAllModeEnumSample();
197 }
198
EnvironmentDisplay(void)199 void EnvironmentDisplay(void)
200 {
201 while (HI_ERR_SUCCESS != OledInit()) {
202 if (g_hi3861BoardLedTest == FLAG_FALSE) {
203 g_hi3861BoardLedTest = FLAG_TRUE;
204 /* test HiSpark board */
205 FACTORY_HISPARK_BOARD_TEST("-----------HiSpark board check----------");
206 }
207 TaskMsleep(SLEEP_1S);
208 }
209 /* 按键中断初始化 */
210 TestGpioInit();
211 while (1) {
212 switch (GetKeyStatus(CURRENT_MODE)) {
213 case ENV_ALL_MODE:
214 EnvironmentAllMode();
215 break;
216 case ENV_TEMPERATURE_MODE:
217 EnvironmentTemperatureMode();
218 break;
219 case ENV_HUMIDITY_MODE:
220 EnvironmentHumidityMode();
221 break;
222 case COMBUSTIBLE_GAS_MODE:
223 EnvironmentCombustibleGasMode();
224 break;
225 case ENV_RETURN_MODE:
226 EnvironmentReturnMode();
227 break;
228 default:
229 break;
230 }
231 }
232 }
233