gpt4 book ai didi

arduino - 无需移动即可连接Arduino伺服器

转载 作者:行者123 更新时间:2023-12-01 03:46:24 24 4
gpt4 key购买 nike

我正在使用 Arduino ServoTimer2库(因为我还需要在同一个草图中使用 VirtualWire 库。我不知道这个问题是否也存在于常规的 Servo 库中,但我认为值得一提。

任何时候我打电话 servo.attach(pin) ,伺服从其当前位置移动到其范围的确切中间位置(1500 微秒)。这是一个问题,因为我的 Arduino 需要定期连接和分离伺服器并重新设置回中心违背了我的项目的目的。

我读到那个电话 servo.write(xxxx)紧接在 servo.attach(pin) 之前会导致它默认为 xxxx 而不是 1500,但这似乎对我不起作用(我什至不明白如果没有连接引脚会如何工作......)。有任何想法吗?

*

编辑:
我的解决方案

感谢 djUniversal 的回答,我得到了它的工作,这样伺服器在连接时不会移动。如果其他人也想做同样的事情,我所做的就是进入 ServoTimer2.cpp并注释掉 initISR 的前 3 行方法。现在看起来像这样:

static void initISR()
{
// for(uint8_t i=1; i <= NBR_CHANNELS; i++) { // channels start from 1
// writeChan(i, DEFAULT_PULSE_WIDTH); // store default values
// }
servos[FRAME_SYNC_INDEX].counter = FRAME_SYNC_DELAY; // store the frame sync period

Channel = 0; // clear the channel index
ISRCount = 0; // clear the value of the ISR counter;

/* setup for timer 2 */
TIMSK2 = 0; // disable interrupts
TCCR2A = 0; // normal counting mode
TCCR2B = _BV(CS21); // set prescaler of 8
TCNT2 = 0; // clear the timer2 count
TIFR2 = _BV(TOV2); // clear pending interrupts;
TIMSK2 = _BV(TOIE2) ; // enable the overflow interrupt

isStarted = true; // flag to indicate this initialisation code has been executed
}

一旦我这样做并重新编译,伺服器在连接时立即停止移动,现在仅在写入时移动。

最佳答案

ServoTimer2 定义了一个起始脉冲:

#define DEFAULT_PULSE_WIDTH  1500

在 .h 文件中。每次伺服对象初始化时,它都用作 channel 的起点。常规伺服库具有相同的机制。

如果你想做你想做的事情,你需要修改库文件以满足你的需要,否则这是不可能的。

为什么需要不断分离 Helm 机?有什么可以改变的吗?

关于arduino - 无需移动即可连接Arduino伺服器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com