• Система автоматизации с открытым исходным кодом на базе 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();
}
 
Сверху Снизу