/* 深圳市普中科技有限公司(PRECHIN 普中)
在线视频:https://space.bilibili.com/2146492485/video
技术支持:www.prechin.net
实验名称:舵机实验
接线说明:SG90舵机模块-->ESP32 IO
橙色(信号线)-->(17)
红色(电源正)-->(5V)
褐色(电源负)-->(GND)
实验现象:程序下载成功后,SG90舵机循环以45°步进从0°旋转到180°
注意事项:需要在软件中选择"项目"-->"导入库"-->"添加一个.ZIP库..."-->选择到本实验目录下的1个压缩文件包“ESP32-ESP32S2-AnalogWrite-main.zip”安装即可。
该库使用方法可参考:压缩包解压后可查看examples使用。
*/
#include "public.h"
// #include "Servo.h"
#include "SSD1306Wire.h"
#include <ESP32Servo.h>
#include "led.h"
// Servo myservo = Servo();
Servo servo;
//舵机控制引脚
#define servo_pin 17
#define SIG_PIN 4
#define SCL 21
#define SDA 47
SSD1306Wire display(0x3c, SDA, SCL);
u16 g_duty_value = 0;
u8 g_fx = 1;
void setup() {
Serial.begin(115200);
// myservo.write(servo_pin, 90);//设置初始位置角度
display.init();//初始化UI
// display.flipScreenVertically();//垂直翻转屏幕设置
display.setFont(ArialMT_Plain_10);
display.display();
/*
pwm_init(LED_RED, 1000, 10);
pwm_init(LED_GREEN, 1000, 10);
*/
servo.attach(servo_pin, 500, 2400);
}
void loop() {
static int value = 2048;
char buffer[100] = {0};
// int horz = analogRead(HORZ_PIN);
int val = analogRead(SIG_PIN);
if (val != value) {
display.clear();
value = val;
int degree = map(val, 0, 4095, 0, 180);
sprintf(buffer, "V: %d", val);
display.drawString(0, 0, buffer);
sprintf(buffer, "D: %d", degree);
display.drawString(0, 15, buffer);
// myservo.write(servo_pin, degree);
servo.write(degree);
int delta = val - 2048;
int duty = map(abs(delta), 0, 2048, 0, 1000);
sprintf(buffer, "%04d / %04d", delta, duty);
display.drawString(0, 45, buffer);
/*
if (delta > 0) {
pwm_set_duty(LED_GREEN, duty);
pwm_set_duty(LED_RED, 0);
} else {
pwm_set_duty(LED_RED, duty);
pwm_set_duty(LED_GREEN, 0);
}*/
display.display();
}
/*
if (g_fx == 1) {
g_duty_value += 10;
if (g_duty_value>1010) g_fx = 0;
} else {
g_duty_value -= 10;
if (g_duty_value<10) g_fx = 1;
}
pwm_set_duty(LED_RED, g_duty_value);
pwm_set_duty(LED_GREEN, g_duty_value);
*/
delay(10);
}Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1