• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Не могу разобраться с внешним прерыванием

roman_b

New member
Всех приветствую,я новичок в esp8266 ,помогите разобраться с внешним прерыванием,прописал все вроде правильно,скеч компилируеться без ошибок,на пин подключал светодиод ,но прирывания нет .

#include "MIDI.h"
#include "pitches.h"
#include "noteList.h"
#define ISR_SPEED 445700
#define MAX_POLYPHONY 10
uint32_t tone_counter[MAX_POLYPHONY]={0};
uint32_t tones[MAX_POLYPHONY]={0};
byte notes[MAX_POLYPHONY]={0};
#define GPIO2_H // (GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, 1<<2))
#define GPIO2_L // (GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, 1<<2))
#define GPIO2(x) // ((x)?GPIO2_H:GPIO2_L)
void handleNoteOn(byte inChannel, byte inNote, byte inVelocity)
{
for(int i=0;i<MAX_POLYPHONY;i++) {
if(!tones) {
tones = ISR_SPEED/sNotePitches[inNote];
notes=inNote;
break;
}
}
}
void handleNoteOff(byte inChannel, byte inNote, byte inVelocity)
{
for(int i=0;i<MAX_POLYPHONY;i++) {
if(notes==inNote) {
notes=0;
tones=0;
tone_counter=0;
GPIO2_L;
break;
}
}
}
void interrupter(void) {
for(int i=0;i<MAX_POLYPHONY;i++) {
if(tones) tone_counter++;
if(tone_counter==5) {
GPIO2_L;
}
if(tone_counter>tones) {
tone_counter=0;
GPIO2_H;
}
}
timer0_write(ESP.getCycleCount()+100);
}
void setup() {
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
pinMode(2, OUTPUT);
MIDI.setHandleNoteOn(handleNoteOn);
MIDI.setHandleNoteOff(handleNoteOff);
MIDI.begin(1);
Serial.begin(115200);
noInterrupts();
timer0_isr_init();
timer0_attachInterrupt(interrupter);
timer0_write(ESP.getCycleCount()+500);
interrupts();
}
void loop() {
MIDI.read();
}
 
Сверху Снизу