forked from xiaozhi/xiaozhi-esp32
* otto v1.4.0 MCP 1.使用MCP协议控制机器人 2.gif继承lcdDisplay,避免修改lcdDisplay * otto v1.4.1 gif as components gif as components * electronBot v1.1.0 mcp 1.增加electronBot支持 2.mcp协议 3.gif 作为组件 4.display子类 * 规范代码 1.规范代码 2.修复切换主题死机bug * fix(ota): 修复 ottoRobot和electronBot OTA 升级崩溃问题 bug * 1.增加robot舵机初始位置校准 2.fix(mcp_sever) 超出范围异常捕获类型 bug * refactor: Update Electron and Otto emoji display implementations - Removed GIF selection from Kconfig for Electron and Otto boards. - Updated Electron and Otto bot versions to 2.0.4 in their respective config files. - Refactored emoji display classes to utilize EmojiCollection for managing emojis. - Enhanced chat label setup and status display functionality in both classes. - Cleaned up unused code and improved initialization logging for emoji displays. * Rename OTTO_ICON_FONT.c to otto_icon_font.c * Rename OTTO_ICON_FONT.c to otto_icon_font.c * refactor: Update Otto emoji display configurations and functionalities - Changed chat label text mode to circular scrolling for both Otto and Electron emoji displays. - Bumped Otto robot version to 2.0.5 in the configuration file. - Added new actions for Otto robot including Sit, WhirlwindLeg, Fitness, Greeting, Shy, RadioCalisthenics, MagicCircle, and Showcase. - Enhanced servo sequence handling and added support for executing custom servo sequences. - Improved logging and error handling for servo sequence execution. * refactor: Update chat label long mode for Electron and Otto emoji displays - Changed chat label text mode from wrap to circular scrolling for both Electron and Otto emoji displays. - Improved consistency in chat label setup across both implementations. * Update Otto robot README with new actions and parameters
91 lines
2.9 KiB
C++
91 lines
2.9 KiB
C++
//--------------------------------------------------------------
|
|
//-- Oscillator.pde
|
|
//-- Generate sinusoidal oscillations in the servos
|
|
//--------------------------------------------------------------
|
|
//-- (c) Juan Gonzalez-Gomez (Obijuan), Dec 2011
|
|
//-- (c) txp666 for esp32, 202503
|
|
//-- GPL license
|
|
//--------------------------------------------------------------
|
|
#ifndef __OSCILLATOR_H__
|
|
#define __OSCILLATOR_H__
|
|
|
|
#include "driver/ledc.h"
|
|
#include "esp_log.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
#define M_PI 3.14159265358979323846
|
|
|
|
#ifndef DEG2RAD
|
|
#define DEG2RAD(g) ((g) * M_PI) / 180
|
|
#endif
|
|
|
|
#define SERVO_MIN_PULSEWIDTH_US 500 // 最小脉宽(微秒)
|
|
#define SERVO_MAX_PULSEWIDTH_US 2500 // 最大脉宽(微秒)
|
|
#define SERVO_MIN_DEGREE -90 // 最小角度
|
|
#define SERVO_MAX_DEGREE 90 // 最大角度
|
|
#define SERVO_TIMEBASE_RESOLUTION_HZ 1000000 // 1MHz, 1us per tick
|
|
#define SERVO_TIMEBASE_PERIOD 20000 // 20000 ticks, 20ms
|
|
|
|
class Oscillator {
|
|
public:
|
|
Oscillator(int trim = 0);
|
|
~Oscillator();
|
|
void Attach(int pin, bool rev = false);
|
|
void Detach();
|
|
|
|
void SetA(unsigned int amplitude) { amplitude_ = amplitude; };
|
|
void SetO(int offset) { offset_ = offset; };
|
|
void SetPh(double Ph) { phase0_ = Ph; };
|
|
void SetT(unsigned int period);
|
|
void SetTrim(int trim) { trim_ = trim; };
|
|
void SetLimiter(int diff_limit) { diff_limit_ = diff_limit; };
|
|
void DisableLimiter() { diff_limit_ = 0; };
|
|
int GetTrim() { return trim_; };
|
|
void SetPosition(int position);
|
|
void Stop() { stop_ = true; };
|
|
void Play() { stop_ = false; };
|
|
void Reset() { phase_ = 0; };
|
|
void Refresh();
|
|
int GetPosition() { return pos_; }
|
|
|
|
private:
|
|
bool NextSample();
|
|
void Write(int position);
|
|
uint32_t AngleToCompare(int angle);
|
|
|
|
private:
|
|
bool is_attached_;
|
|
|
|
//-- Oscillators parameters
|
|
unsigned int amplitude_; //-- Amplitude (degrees)
|
|
int offset_; //-- Offset (degrees)
|
|
unsigned int period_; //-- Period (miliseconds)
|
|
double phase0_; //-- Phase (radians)
|
|
|
|
//-- Internal variables
|
|
int pos_; //-- Current servo pos
|
|
int pin_; //-- Pin where the servo is connected
|
|
int trim_; //-- Calibration offset
|
|
double phase_; //-- Current phase
|
|
double inc_; //-- Increment of phase
|
|
double number_samples_; //-- Number of samples
|
|
unsigned int sampling_period_; //-- sampling period (ms)
|
|
|
|
long previous_millis_;
|
|
long current_millis_;
|
|
|
|
//-- Oscillation mode. If true, the servo is stopped
|
|
bool stop_;
|
|
|
|
//-- Reverse mode
|
|
bool rev_;
|
|
|
|
int diff_limit_;
|
|
long previous_servo_command_millis_;
|
|
|
|
ledc_channel_t ledc_channel_;
|
|
ledc_mode_t ledc_speed_mode_;
|
|
};
|
|
|
|
#endif // __OSCILLATOR_H__
|