為了加強 ESP8266 D1 mini SG90 舵機超聲波測距掃描器可讀性,筆者希望在 OLED 屏上顯示一個半圓形,並且根據舵機轉動方向角度,用圓點表示出超聲波測距的距離位置,好像雷達(Radar)測距的效果。
ESP8266 D1 mini SG90 舵機 + 超聲波測距器雷達 |
// ESP8266 D1 mini GPIO15=D8
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U,
FUNC_GPIO15);
// Ultrasonic US100 Echo
(Input) GPIO12 I/O Definit (D6)
#define us100_echo_MUX PERIPHS_IO_MUX_MTDI_U
#define us100_echo_FUNC FUNC_GPIO12
#define us100_echo_PIN 12
// Ultrasonic US100 Trig (Output) GPIO13 I/O
(D7)
#define us100_trig_MUX PERIPHS_IO_MUX_MTCK_U
#define us100_trig_FUNC FUNC_GPIO13
#define us100_trig_PIN 13
|
ESP8266 D1 mini SG90 + 超聲波測距器雷達掃描程式:
// RTOS Task
void LED_Blink_Task (void
*pvParameters)
{
while(1)
{
vTaskDelay (200/portTICK_RATE_MS);
if (led == 0){
//
MG995 Clockwise = 500us = 0.5ms in 20ms Def=23
GPIO_OUTPUT_SET(GPIO_ID_PIN(15),1);
os_delay_us(500);
GPIO_OUTPUT_SET(GPIO_ID_PIN(15),0);
cw_time
++;
}
else {
//
MG995 Counterclockwise = 2500us = 2.5ms in 20ms Def=23
GPIO_OUTPUT_SET(GPIO_ID_PIN(15),1);
os_delay_us(2500);
GPIO_OUTPUT_SET(GPIO_ID_PIN(15),0);
ccw_time
--;
}
// Ultrasonic
timer_count=0;
us100_send();
timer_count=us100_recv();
sprintf(dsp_buffer, "%dmm ",
timer_count/15);
oled_Print(0, 0, dsp_buffer, 1);
timer_count = timer_count /1000;
if (timer_count>56) timer_count=56;
if(cw_time
> 0) {draw_halfradar(cw_time,
timer_count, 1, 1, 0);}
if(ccw_time < 15)
{draw_halfradar(ccw_time, timer_count, 1, 1, 0);}
if(cw_time>14){
cw_time=0;
ccw_time=15; led=1;
oled_ClearGddram(1);
oled_WriteScreen(0,7);
}
if(ccw_time < 1){
ccw_time=15;
cw_time=0; led=0;
oled_ClearGddram(1);
oled_WriteScreen(0,7);
}
} // End While
}
|
ESP8266 D1 mini SG90 舵機 + 超聲波測距器雷達 |
ESP8266 D1 mini SG90 舵機 + 超聲波測距器雷達顯示 |
ESP8266 D1 mini SG90 舵機 + 超聲波測距器雷達 5-Pin 接線 |
2018年 9月 12日 天氣報告
氣溫:28.0度 @ 20:20
相對濕度:百分之 73%
天氣:微雨
※ 熱帶風暴百里嘉,距離香港西南偏南 162公里,中心風力每小時 85 公里,三號熱帶氣旋警告信號現正生效
沒有留言:
張貼留言