首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的阿迪诺在使用中继板时结冰了?

为什么我的阿迪诺在使用中继板时结冰了?
EN

Stack Overflow用户
提问于 2014-04-07 16:50:05
回答 1查看 4.5K关注 0票数 2

我正在做一个项目,我用midi音符来用Arduino Uno转换8盏旧灯。我已经为Arduino建造了一个带有8个墙壁插座的箱子,这些插座连接到一个中继板上。我正在使用无毛midi串联电桥通过USB发送midi笔记到Arduino。

这一切都有效,直到我把电源放在插座上我的尤诺。大约5~10秒后,Arduino结冰。继电器屏蔽保持在当前状态,串行通信指示灯停止闪烁。当没有220伏特通过继电器,这一切都工作得很好。

(我的原理图在下面。)Arduino是通过USB供电的。我还尝试用5V和500‘t的额外适配器为Arduino供电,但这并没有什么不同。

代码:

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

byte incomingByte=0;
byte notebyte=0;
byte velocitybyte=0;
byte statusbuffer=0;
byte NOTE_ON = 144;
byte NOTE_OFF = 128;
boolean arp_triggernext=false;
boolean firstbyte;
void MIDI_Poll(){
  if (Serial.available() > 0) {
    do {
      // read the incoming byte:
      incomingByte = Serial.read();
      if (incomingByte>247) {
        // this is where MIDI clock stuff is done
        switch (incomingByte){
        }
      }
      else if (incomingByte>240) {
        statusbuffer = 0;
        //sysex stuff done here
      }
      else if (incomingByte>127) {
        statusbuffer = incomingByte;
        firstbyte = true;
        notebyte = 0;
        velocitybyte = 0;
      }
      else if (statusbuffer!=0) {
        if (firstbyte == true) {
          // must be first byte
          notebyte = incomingByte;
          firstbyte = false;
        }
        else {
          // so must be second byte then
          velocitybyte = incomingByte;
          //process the message here
          if (statusbuffer == NOTE_ON && velocitybyte != 0) {
            switch (notebyte) {
               case 60:
               digitalWriteFast2(2, HIGH);
               break;
               case 61:
               digitalWriteFast2(3, HIGH);
               break;
               case 62:
               digitalWriteFast2(4, HIGH);
               break;
               case 63:
               digitalWriteFast2(5, HIGH);
               break;
               case 64:
               digitalWriteFast2(6, HIGH);
               break;
               case 65:
               digitalWriteFast2(7, HIGH);
               break;
               case 66:
               digitalWriteFast2(8, HIGH);
               break;
               case 67:
               digitalWriteFast2(9, HIGH);
               break;
            }
          }
          else if (statusbuffer == NOTE_OFF || (statusbuffer == NOTE_ON && velocitybyte == 0)) {
            switch (notebyte){
               case 60:
               digitalWriteFast2(2, LOW);
               break;
               case 61:
               digitalWriteFast2(3, LOW);
               break;
               case 62:
               digitalWriteFast2(4, LOW);
               break;
               case 63:
               digitalWriteFast2(5, LOW);
               break;
               case 64:
               digitalWriteFast2(6, LOW);
               break;
               case 65:
               digitalWriteFast2(7, LOW);
               break;
               case 66:
               digitalWriteFast2(8, LOW);
               break;
               case 67:
               digitalWriteFast2(9, LOW);
               break;
            }
          }
          //now clear them for next note
          notebyte = 0;
          velocitybyte = 0;
          firstbyte = true;        
        }
      }
    } while (Serial.available() > 0);
  }
}

void setup() {      

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  MIDI_Poll();
}

它基于我找到的处理串行midi的代码。

我真的很困惑为什么会发生这种事。我想知道为什么我的Arduino和继电器板在220伏特通过继电器时会冻结。

材料:

EN

回答 1

Stack Overflow用户

发布于 2014-04-16 10:29:45

正如我在这里看到的一些电路问题,所以我将解释它们,1,1,你不应该直接运行继电器从Arduino引脚,所以使用适当的电路与晶体管运行继电器和使用arduino引脚作为水槽,而不是源将更好。2.使用带继电器线圈的随动二极管。3.在Rx和Tx使用光隔离器。

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

https://stackoverflow.com/questions/22918439

复制
相关文章

相似问题

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