电路板和编码后未响应Teensy

问题描述

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

这是我的代码与电路板的连接:

#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,1);
    }
    buttonAvalueOld = buttonAvalueNew;
  }

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

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

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

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

My breadboard picture

解决方法

硬件

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

此外,请特别注意Joel提到的有关电压的内容。切勿将超过3.3V的电压连接到Teensy 模拟引脚(数字引脚为5V tolerant-请阅读Paul Stoffregen的说明-),否则可能损坏MCU。我会使用3.3V来为按钮和电位器供电 我会从底部到顶部将GND跳到GND,将VCC跳到VCC(以防万一,如果您想添加更多项目)

固件

关于主要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);

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...