当前位置:网站首页>Bionic caterpillar robot source code
Bionic caterpillar robot source code
2022-07-31 21:37:00 【CAMlive】
Bionic caterpillar robotArduino源码
The operator isblinker
esp32通信
前后两个电机,一个舵机
Mainly related to motor speed regulation, Servo control angle
没有多线程, Mainly rely on interrupt handlers
以下代码仅供参考
#include <ServoESP32.h>
#define BLINKER_WIFI
#include <Blinker.h>
#include <Arduino.h>
#define MOTOR1_STEPPIN 19
#define MOTOR1_DIRPIN 18
#define MOTOR2_STEPPIN 5
#define MOTOR2_DIRPIN 17
#define SERVO_PIN 16
#define MOTOR1_PWM 2
#define MOTOR2_PWM 0
char auth[] = "***";
char ssid[] = "***";
char pswd[] = "****";
int Speed1=0;
int Speed2=0;
int power=0;
int speed_direction=1;
int ANGLE = 90;
int UPPER_HIGH = 20;
// 新建组件对象
BlinkerButton Servo_state1("btn-servo1");
BlinkerButton Servo_state2("btn-servo2");
BlinkerButton Servo_state3("btn-servo3");
BlinkerButton switch_power("switch_power");
BlinkerButton speed_dir("speed_dir");
BlinkerSlider Slider_speed1("Slider_speed1");
BlinkerSlider Slider_speed2("Slider_speed2");
BlinkerSlider Slider_angle("Slider_angle");
Servo myservo;
bool setServoPos(char cmd){
int pos;
if(cmd == '0'){
pos=90-ANGLE;
}else if(cmd == '1'){
pos=90;
}else if(cmd == '2'){
pos=90+ANGLE;
}else{
return false;
}
myservo.write(pos);
delay(5);
return true;
}
// 按下按键即会执行该函数
void Servo_state1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="tap"&&setServoPos('0')){
Servo_state1.print("Servo_state1 set success");
}else{
Servo_state1.print("Servo_state1 set failed");
}
}
void Servo_state2_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="tap"&&setServoPos('1')){
Servo_state2.print("Servo_state2 set success");
}else{
Servo_state2.print("Servo_state2 set failed");
}
}
void Servo_state3_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if (state=="tap"&&setServoPos('2')){
Servo_state3.print("Servo_state3 set success");
}else{
Servo_state3.print("Servo_state3 set failed");
}
}
void Speed1_set_callback(int s){
Speed1 = s;
Slider_speed1.print(s);
}
void Speed2_set_callback(int s){
Speed2 = s;
Slider_speed2.print(s);
}
void switch_power_callback(const String & state){
if(state=="tap"){
power=(power+1)%2;
if(power){
switch_power.print("power on");
if(speed_direction){
digitalWrite(MOTOR1_DIRPIN, HIGH);
digitalWrite(MOTOR1_STEPPIN, LOW);
digitalWrite(MOTOR2_DIRPIN, HIGH);
digitalWrite(MOTOR2_STEPPIN, LOW);
}else{
digitalWrite(MOTOR1_STEPPIN, HIGH);
digitalWrite(MOTOR1_DIRPIN, LOW);
digitalWrite(MOTOR2_STEPPIN, HIGH);
digitalWrite(MOTOR2_DIRPIN, LOW);
}
}else{
switch_power.print("power off");
digitalWrite(MOTOR1_DIRPIN, LOW);
digitalWrite(MOTOR1_STEPPIN, LOW);
digitalWrite(MOTOR2_DIRPIN, LOW);
digitalWrite(MOTOR2_STEPPIN, LOW);
}
}
}
void speed_dir_callback(const String & state){
if(state=="tap"){
speed_direction=(speed_direction+1)%2;
if(speed_direction){
speed_dir.print("direction 1");
}else{
speed_dir.print("direction 0");
}
}
if(speed_direction){
digitalWrite(MOTOR1_DIRPIN, HIGH);
digitalWrite(MOTOR1_STEPPIN, LOW);
digitalWrite(MOTOR2_DIRPIN, HIGH);
digitalWrite(MOTOR2_STEPPIN, LOW);
}else{
digitalWrite(MOTOR1_STEPPIN, HIGH);
digitalWrite(MOTOR1_DIRPIN, LOW);
digitalWrite(MOTOR2_STEPPIN, HIGH);
digitalWrite(MOTOR2_DIRPIN, LOW);
}
}
void Slider_angle_callback(int a){
ANGLE = a;
Slider_angle.print(a);
}
void setup() {
// 初始化串口
Serial.begin(115200);
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
pinMode(MOTOR1_STEPPIN, OUTPUT);
pinMode(MOTOR2_STEPPIN, OUTPUT);
pinMode(MOTOR1_DIRPIN, OUTPUT);
pinMode(MOTOR2_DIRPIN, OUTPUT);
ledcAttachPin(MOTOR1_PWM, 3);
ledcAttachPin(MOTOR2_PWM, 2);
ledcSetup(3, 12000, 8);
ledcSetup(2, 12000, 8);
Blinker.begin(auth, ssid, pswd);
//Three states of the servo
myservo.attach(SERVO_PIN);
Servo_state1.attach(Servo_state1_callback);
Servo_state2.attach(Servo_state2_callback);
Servo_state3.attach(Servo_state3_callback);
switch_power.attach(switch_power_callback);
speed_dir.attach(speed_dir_callback);
Slider_speed1.attach(Speed1_set_callback);
Slider_speed2.attach(Speed2_set_callback);
Slider_angle.attach(Slider_angle_callback);
}
void loop() {
Blinker.run();
for(int i=0;i<UPPER_HIGH;i++){
if(power){
ledcWrite(3,150+Speed1);
delay(20);
ledcWrite(2,150+Speed2);
}else{
ledcWrite(1,0);
ledcWrite(2,0);
}
}
}
边栏推荐
- Realize serial port receiving data based on STM32 ring queue
- uni-app中的renderjs使用
- ThreadLocal
- AI automatic code writing plugin Copilot (co-pilot)
- 信息学奥赛一本通 1941:【07NOIP普及组】Hanoi双塔问题 | 洛谷 P1096 [NOIP2007 普及组] Hanoi 双塔问题
- Go1.18 upgrade function - Fuzz test from scratch in Go language
- Implementing a Simple Framework for Managing Object Information Using Reflection
- PCB stackup design
- [PIMF] OpenHarmony Thesis Club - Inventory of the open source Hongmeng tripartite library [3]
- In Golang go-redis cluster mode, new connections are constantly created, and the problem of decreased efficiency is solved
猜你喜欢
关注!海泰方圆加入《个人信息保护自律公约》
Redis Overview: Talk to the interviewer all night long about Redis caching, persistence, elimination mechanism, sentinel, and the underlying principles of clusters!...
统计UTF-8字符串中的字符函数
Memblaze released the first enterprise-grade SSD based on long-lasting particles. What is the new value behind it?
How can we improve the real yourself, become an excellent architect?
高效并发:Synchornized的锁优化详解
嵌入式开发没有激情了,正常吗?
How to debug TestCafe
广汽本田安全体验营:“危险”是最好的老师
Structure of the actual combat battalion module eight operations
随机推荐
[Open class preview]: Research and application of super-resolution technology in the field of video image quality enhancement
Returns a zero-length array or empty collection, do not return null
-xms -xmx(information value)
Financial profitability and solvency indicators
MATLAB program design and application 2.4 Common internal functions of MATLAB
multithreaded lock
The principle of ReentrantLock (to be continued)
Short-circuit characteristics and protection of SiC MOSFETs
Apache EventMesh distributed event-driven multi-runtime
登录业务实现(单点登录+微信扫码+短信服务)
Arduino框架下STM32全系列开发固件安装指南
Thymeleaf是什么?该如何使用。
角色妆容的实现
rj45对接头千兆(百兆以太网接口定义)
One thing to say, is outsourcing company worth it?
PCB叠层设计
Golang - from entry to abandonment
一款国外开发的高质量WordPress下载站模板主题
NVIDIA已经开始测试AD106和AD107 GPU核心的显卡产品
sqlite3 simple operation