首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在路障和编码后,对Teensy没有响应

在路障和编码后,对Teensy没有响应
EN

Stack Overflow用户
提问于 2020-09-21 06:44:37
回答 1查看 101关注 0票数 0

我刚接触Arduino和电子产品,最近我买了一台Teensy 3.2来做MIDI控制器。我用Teensy将三个按钮和一个滑盖锅连接到了一个面板上;修改了在线上的一些代码;并且已经将USB类型改为MIDI,端口改为Teensy。但对我的产品没有反应。我可以问一下我的错误在哪里吗?非常感谢!

下面是我的代码和板卡的连接:

代码语言:javascript
复制
#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

int buttonApin = 1;
int buttonBpin = 2;
int buttonCpin = 3;

int analogslide = A8;

int analogslideOld = 0;
int analogslideNew = 0;

#define analogslideCC 54

void setup() {
  MIDI.begin ();

  pinMode(buttonApin, INPUT_PULLUP);
  pinMode(buttonBpin, INPUT_PULLUP);
  pinMode(buttonCpin, INPUT_PULLUP);
  pinMode(analogslide, INPUT);

  Serial.begin(9600);
}

void loop() {

  static bool buttonAvalueOld = HIGH;
  static bool buttonBvalueOld = HIGH;
  static bool buttonCvalueOld = HIGH;

  bool buttonAvalueNew = digitalRead(buttonApin);
  bool buttonBvalueNew = digitalRead(buttonBpin);
  bool buttonCvalueNew = digitalRead(buttonCpin);

  if (buttonAvalueNew != buttonAvalueOld) {
    if (buttonAvalueNew == LOW) {
      MIDI.sendNoteOn(60, 127, 1);
    } else {
      MIDI.sendNoteOff(60, 0, 1);
    }
    buttonAvalueOld = buttonAvalueNew;
  }

  if (buttonBvalueNew != buttonBvalueOld) {
    if (buttonBvalueNew == LOW) {
      MIDI.sendNoteOn(64, 127, 1);
    } else {
      MIDI.sendNoteOff(64, 0, 1);
    }
    buttonBvalueOld = buttonBvalueNew;
  }

  if (buttonCvalueNew != buttonCvalueOld) {
    if (buttonCvalueNew == LOW) {
      MIDI.sendNoteOn(65, 127, 1);
    } else {
      MIDI.sendNoteOff(65, 0, 1);
    }
    buttonCvalueOld = buttonCvalueNew;
  }

  int slide = analogRead(A8);
  int analogslideNew = analogRead(A8);

  if (analogslideNew - analogslideOld >= 35 || analogslideOld - analogslideNew >= 35) {
    analogslideOld = analogslideNew;
    analogslideNew = (map(analogslideNew, 1023, 0, 0, 120));
    analogslideNew = (constrain(analogslideNew, 0, 120));
    MIDI.sendControlChange(analogslideCC, analogslideNew, 1);
  }
  delay(25);
}

My breadboard picture

EN

回答 1

Stack Overflow用户

发布于 2020-11-29 08:00:35

硬件

注意您的电路板电源总线(顶部的两个条纹)。红色和蓝色的线条之间有一个间隙,这意味着你必须用一些电线将它们连接起来。在其当前电路状态下,红色按钮和电位器处于浮动状态,即未连接到接地和/或VCC。

此外,请密切关注Joel提到的有关电压的内容。切勿超过3.3V连接到您的模拟引脚(数字引脚是5V tolerant -请阅读Paul Stoffregen的解释-),否则您可能会损坏单片机。我将使用3.3V输出为按钮和电位器供电,而不是将GND跳到GND,VCC跳到VCC,从底部到顶部导轨(作为预防措施,以防您想要添加更多项目)

固件

关于主loop()的这一部分

代码语言:javascript
复制
  static bool buttonAvalueOld = HIGH;
  static bool buttonBvalueOld = HIGH;
  static bool buttonCvalueOld = HIGH;

为什么要在循环中声明和初始化这些变量?您试图保留旧值,但每次迭代都会丢失旧值。将它们放在外部,并将它们的值更新到它们各自的条件中

类似于这些vars::

代码语言:javascript
复制
  bool buttonAvalueNew = digitalRead(buttonApin);
  bool buttonBvalueNew = digitalRead(buttonBpin);
  bool buttonCvalueNew = digitalRead(buttonCpin);

在外部声明它们,并在循环内更新它们。

最后,您的代码没有任何去抖动或chattering消除的方法。为了克服这个问题,我强烈建议您使用Bounce library,它非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63984339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档