Инкрементальный энкодер EC11 и миди

kentforth
Offline
Зарегистрирован: 28.12.2015

Народ всех приветствую!

имеется код, он прекрасно работает. Это инкрементальный энкодер, который передает миди сообшения. Когда крутишь ,передает миди сообщение с первым каналом, а когда нажимаешь на кнопку, которая находится в этом же энкодере передает другое сообщение с другим каналом. Все прекрасно работает, но интересует такая штука.Я знаю,что в этой строке 

MIDI.sendControlChange(104, (1 - value) * 127, 1);

 

(1-value) это получится либо 127, либо 0, так устроена передача данных по миди. Но не могу понять как  и из чего складывается эта сумма? то есть откуда берётся 127 либо 0 в этой строке?

#include <Encoder.h>

Encoder enc_one(2, 3);
int value; 

long enc_one_previous  = -999;
byte button_previous; 

void setup() {
  pinMode(23, INPUT_PULLUP); 
}

void loop() {
  value = enc_one.read();
  if(value > 127) {    enc_one.write(127);   }
  else if(value < 0) {    enc_one.write(0);  } 
  
  value = constrain(value, 0, 127);
  if (value != enc_one_previous) {    enc_one_previous = value;    usbMIDI.sendControlChange(1, value, 1);  }
  
  value = digitalRead(23); 
  if(value != button_previous) {    button_previous = value;    usbMIDI.sendControlChange(2, (1 - value) * 127, 1);    delay(3);  }
}

 

andryn
Offline
Зарегистрирован: 08.06.2018

kentforth пишет:

Но не могу понять как  и из чего складывается эта сумма? то есть откуда берётся 127 либо 0 в этой строке?

Если речь идет о 22-й строке, то value - это состояние пина 23. Оно может быть 0 или 1. Соответственно выражение "(1 - value) * 127" будет равно либо 0, либо 127. Арифметика, 3-й класс.

kentforth
Offline
Зарегистрирован: 28.12.2015

andryn пишет:

kentforth пишет:

Но не могу понять как  и из чего складывается эта сумма? то есть откуда берётся 127 либо 0 в этой строке?

Если речь идет о 22-й строке, то value - это состояние пина 23. Оно может быть 0 или 1. 

Как можно узнать,что состояние этого пина может быть либо единица либо ноль?

 

IVAN222
Offline
Зарегистрирован: 19.04.2017

Прикрепите светодиод к 23 пину либо выведете на монитор порта состояния 23 пина.

kentforth
Offline
Зарегистрирован: 28.12.2015

Благодарю за ответы!

andryn
Offline
Зарегистрирован: 08.06.2018

kentforth пишет:

Как можно узнать,что состояние этого пина может быть либо единица либо ноль?

DigitalRead возвращает либо 0 либо 1.

http://arduino.ru/Reference/DigitalRead

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

kentforth пишет:

Как можно узнать,что состояние этого пина может быть либо единица либо ноль?

Никак. Это символ веры. В это либо верят, либо нет. Истинно верующие, да спасутся.