-
Notifications
You must be signed in to change notification settings - Fork 2
/
Hat_8Servos1.1_M5StickCPlus.ino
92 lines (87 loc) · 2.96 KB
/
Hat_8Servos1.1_M5StickCPlus.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
*******************************************************************************
* Copyright (c) 2022 by M5Stack
* Equipped with M5StickCPlus sample source code
* 配套 M5StickCPlus 示例源代码
* Visit for more information: https://docs.m5stack.com/en/hat/hat_8servos_1.1
* 获取更多资料请访问: https://docs.m5stack.com/zh_CN/hat/hat_8servos_1.1
*
* Product: 8Servos HAT v1.1.
* Date: 2022/07/12
*******************************************************************************
Control the running and release of the servo.
控制伺服机的运行和释放
*/
#include <M5GFX.h>
#include <M5StickCPlus.h>
#include "Hat_8Servos.h"
M5GFX display;
M5Canvas canvas(&display);
Hat_8Servos drive;
bool release = false;
void btn_task(void *arg) {
while (1) {
if (M5.BtnA.wasPressed()) {
release = !release;
}
M5.update();
vTaskDelay(20);
}
}
void setup() {
M5.begin();
display.begin();
if (display.isEPD()) {
display.setEpdMode(epd_mode_t::epd_fastest);
display.invertDisplay(true);
display.clear(TFT_BLACK);
}
display.setRotation(1);
canvas.setTextColor(BLUE);
canvas.createSprite(display.width(), display.height());
canvas.setTextSize((float)canvas.width() / 160);
while (!drive.begin(&Wire, 0, 26, 0x36)) {
canvas.drawString("Connect Error", 40, 40);
canvas.pushSprite(0, 0);
vTaskDelay(100);
}
canvas.drawString("8SERVO HAT", 40, 20);
canvas.drawString("Click Btn A", 40, 40);
canvas.drawString("for release Servo", 40, 60);
canvas.pushSprite(0, 0);
xTaskCreate(btn_task, /* Task function. */
"btn_task", /* String with name of task. */
8096, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
1, /* Priority of the task. */
NULL); /* Task handle. */
}
void loop() {
if (release) {
drive.enableServoPower(0);
canvas.fillRect(0, 80, 240, 95, BLACK);
canvas.drawString("SERVO RELEASE", 40, 80);
canvas.pushSprite(0, 0);
vTaskDelay(100);
} else {
canvas.fillRect(0, 80, 240, 95, BLACK);
canvas.drawString("SERVO RUNNING", 40, 80);
canvas.pushSprite(0, 0);
// drive.setServoAngle(0, 0);
// drive.setServoAngle(0, 180);
// drive.setServoPulse(0, 500); 0deg
// drive.setServoPulse(0, 2500); 180deg
// drive.setAllServoAngle(0);
// drive.setAllServoAngle(180);
// drive.setAllServoPulse(500); 0deg
// drive.setAllServoPulse(2500); 180deg
drive.enableServoPower(1);
vTaskDelay(100);
drive.setAllServoAngle(180);
Serial.println(String(drive.getServoAngle(0)));
vTaskDelay(600);
drive.setAllServoAngle(0);
Serial.println(String(drive.getServoAngle(0)));
vTaskDelay(600);
}
}