ZBLOG

// 读取当前编码器引脚状态 bool a_state = digitalRead(E1A); bool b_state = digitalRead(E1B); // 检查状态变化 if (a_state != a_last_state) { if (b_state) { // A相先于B相变化,且B相为高,表示一个特定方向 position--; ...

这是一段代码片段,但似乎存在一些错误和遗漏的部分。以下是修正后的代码:

// 声明变量
bool a_last_state = false;
bool b_last_state = false;
int position = 0;

void loop() {
    // 读取当前编码器引脚状态  
    bool a_state = digitalRead(E1A);  
    bool b_state = digitalRead(E1B);  
    
    // 检查状态变化  
    if (a_state != a_last_state) {  
        if (b_state) {  
            // A相先于B相变化,且B相为高,表示一个特定方向  
            position--;  
        } else {  
            // A相先于B相变化,且B相为低,表示另一个方向  
            position++;  
        }  
        
        // 更新最后状态  
        a_last_state = a_state;  
        b_last_state = b_state;  
  
        // 假设 current_speed 是基于 position 计算的
        float current_speed = calculateSpeed(position); // 需要你实现这个函数  

        // 使用PID控制
        float target_speed = 100.0;
        float pwm_value = pid_control(current_speed, target_speed);
        SetPWM(1, (int)pwm_value); // 假设控制电机A

     	// ... 其他逻辑 ...
    }

    delay(100); // 延迟一段时间以降低频率
    
    Serial.print("Position: ");
    Serial.println(position);

  	// 使用u8g2库提供的函数将转速信息显示在OLED屏幕上
    u8g2.firstPage();
    do {
        u8g2.setFont(u8g2_font_helvR08_tf); // 设置字体
        u8g2.setCursor(0, 10); // 设置光标位置
        u8g2.print("Position: ");
        u8g2.print(position);
    } while (u8g2.nextPage());
}

// 需要实现这个函数来根据位置计算速度  
float calculateSpeed(int position) {  
    // 这里应该是基于位置和时间差来计算速度的逻辑  
    // 注意:这只是一个示例,你需要根据你的编码器和应用来编写  
    return 0.0; 
}

请注意,以上修正只针对给出的代码片段,并假设其他相关变量和函数已正确定义。如果还有其他问题或需求,请提供更多信息。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=16993

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?