неправильно написал код на 6 кнопок
- Войдите на сайт для отправки комментариев
Ср, 05/04/2017 - 16:15
Народ, всем привет!
Делаю миди-контроллер на 6 кнопок
-Имеется 6 тактовых кнопок и 6 светодиодов.
Видимо из-за того,что я неправильно написал код светодиоды неправильно срабатывают. К примеру, как я хочу сделать: нажал на кнопку1 и отпустил-загорелся светодиод1, нажал ещё раз на кнопку1 и отпустил, светодиод1 погас. Каждая кнопка не джолжная влиять на другие светодиоды и их состояние. Сейчас же в этом скетче у меня одна кнопка влияет на светодиоды других кнопок.
Помогите разобраться в скетче
#include <MIDI.h> // INclude MIDI library
#include <midi_Defs.h>
#include <midi_Message.h>
#include <midi_Namespace.h>
#include <midi_Settings.h>
MIDI_CREATE_DEFAULT_INSTANCE();
int buttonPin1 = 2;
int buttonPin2 = 3;
int buttonPin3 = 4;
int buttonPin4 = 5;
int buttonPin5 = 6;
int buttonPin6 = 7;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
int buttonState6 = 0;
int ledPin1 = 8;
int ledPin2 = 9;
int ledPin3 = 10;
int ledPin4 = 11;
int ledPin5 = 12;
int ledPin6 = 13;
boolean currentState1 = LOW;
boolean currentState2 = LOW;
boolean currentState3 = LOW;
boolean currentState4 = LOW;
boolean currentState5 = LOW;
boolean currentState6 = LOW;
boolean lastState1 = LOW;
boolean lastState2 = LOW;
boolean lastState3 = LOW;
boolean lastState4 = LOW;
boolean lastState5 = LOW;
boolean lastState6 = LOW;
boolean on=false;
void setup() {
Serial.begin(31250);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
pinMode(buttonPin6, INPUT);
MIDI.begin();
}
void loop() {
buttonState1 = digitalRead(buttonPin1);
currentState1 = digitalRead(buttonPin1);
if (currentState1 == HIGH && lastState1 == LOW) {
MIDI.sendNoteOn(36,127,1);
delay(20);
MIDI.sendNoteOff(36,0,1);
}
if (buttonState1 == HIGH) {
if(on==true){
on=false;
} else{
on=true;
}
}
if (on == true) {
digitalWrite(ledPin1, HIGH);
}
else if (currentState1 == LOW && lastState1 == HIGH) {
digitalWrite(ledPin1, LOW);
MIDI.sendNoteOff(36,0,1);
}
lastState1 = currentState1;
buttonState2 = digitalRead(buttonPin2);
currentState2 = digitalRead(buttonPin2);
if (currentState2 == HIGH && lastState2 == LOW) {
MIDI.sendNoteOn(37,127,1);
delay(20);
MIDI.sendNoteOff(37,0,1);
}
if (buttonState2 == HIGH) {
if(on==true){
on=false;
} else{
on=true;
}
}
if (on == true) {
digitalWrite(ledPin2, HIGH);
}
else if (currentState2 == LOW && lastState2 == HIGH) {
digitalWrite(ledPin2, LOW);
MIDI.sendNoteOff(37,0,1);
}
lastState2 = currentState2;
buttonState3 = digitalRead(buttonPin3);
currentState3 = digitalRead(buttonPin3);
if (currentState3 == HIGH && lastState3 == LOW) {
MIDI.sendNoteOn(38,127,1);
delay(20);
MIDI.sendNoteOff(38,0,1);
}
if (buttonState3 == HIGH) {
if(on==true){
on=false;
} else{
on=true;
}
}
if (on == true) {
digitalWrite(ledPin3, HIGH);
}
else if (currentState3 == LOW && lastState3 == HIGH) {
digitalWrite(ledPin3, LOW);
MIDI.sendNoteOff(38,0,1);
}
lastState3 = currentState3;
buttonState4 = digitalRead(buttonPin4);
currentState4 = digitalRead(buttonPin4);
if (currentState4 == HIGH && lastState4 == LOW) {
MIDI.sendNoteOn(39,127,1);
delay(20);
MIDI.sendNoteOff(39,0,1);
}
if (buttonState4 == HIGH) {
if(on==true){
on=false;
} else{
on=true;
}
}
if (on == true) {
digitalWrite(ledPin4, HIGH);
}
else if (currentState4 == LOW && lastState4 == HIGH) {
digitalWrite(ledPin4, LOW);
MIDI.sendNoteOff(39,0,1);
}
lastState4 = currentState4;
buttonState5 = digitalRead(buttonPin5);
currentState5 = digitalRead(buttonPin5);
if (currentState5 == HIGH && lastState5 == LOW) {
MIDI.sendNoteOn(40,127,1);
delay(20);
MIDI.sendNoteOff(40,0,1);
}
if (buttonState5 == HIGH) {
if(on==true){
on=false;
} else{
on=true;
}
}
if (on == true) {
digitalWrite(ledPin5, HIGH);
}
else if (currentState5 == LOW && lastState5 == HIGH) {
digitalWrite(ledPin5, LOW);
MIDI.sendNoteOff(40,0,1);
}
lastState5 = currentState5;
buttonState6 = digitalRead(buttonPin6);
currentState6 = digitalRead(buttonPin6);
if (currentState6 == HIGH && lastState6 == LOW) {
MIDI.sendNoteOn(41,127,1);
delay(20);
MIDI.sendNoteOff(41,0,1);
}
if (buttonState6 == HIGH) {
if(on==true){
on=false;
} else{
on=true;
}
}
if (on == true) {
digitalWrite(ledPin6, HIGH);
}
else if (currentState6 == LOW && lastState6 == HIGH) {
digitalWrite(ledPin6, LOW);
MIDI.sendNoteOff(41,0,1);
}
lastState6 = currentState6;
delay(200);
}
if (button[0].event_click_Up) {digitalWrite(10, !digitalRead(10));} //........... if (button[9].event_click_Up) {digitalWrite(19, !digitalRead(19));}#367
!!! с этим delay(); работать не будет
перменная "on" - одна на все каналы?
перменная "on" - одна на все каналы?
я не знаю вообще как она работает эта переменная, мне нужно было,чтоб при нажатии на кнопку-загорался светодиод, а когда нажимаю в след раз светодиод гас, увидел где-то в другом проекте и тупо скопировал. Если знаете как это по-другому реализовать, напишите пожалуйста
if (button[0].event_click_Up) {digitalWrite(10, !digitalRead(10));} //........... if (button[9].event_click_Up) {digitalWrite(19, !digitalRead(19));}#367
!!! с этим delay(); работать не будет
Где вы это взяли? у меня нет этого в коде
я не знаю вообще как она работает эта переменная,.... увидел где-то в другом проекте и тупо скопировал.
Это печалька :( Ну если не хотите/можете осознать как это работает , то просто размножьте "on" на "on1".."on6", аналогично другим переменным соответсвенно каналу.
я не знаю вообще как она работает эта переменная,.... увидел где-то в другом проекте и тупо скопировал.
Это печалька :( Ну если не хотите/можете осознать как это работает , то просто размножьте "on" на "on1".."on6", аналогично другим переменным соответсвенно каналу.
в этом и есть видимо проблема, а можете написать код для этой перменной on для двух кнопок? остальные я додумаю как сделать
... а можете написать код для этой перменной on для двух кнопок? остальные я додумаю как сделать
Так написал же - "размножить аналогично другим переменным"
Раздел форума "Программирование" для тех, кто пытается познать и сделать сам. Можем обсудить что у Вас не получается в реализации совета данного в #5. Только так. Только вперед по дороге ЗНАНИЯ.
Если написать за Вас - то это в "ищу исполнителя".
... а можете написать код для этой перменной on для двух кнопок? остальные я додумаю как сделать
Так написал же - "размножить аналогично другим переменным"
Раздел форума "Программирование" для тех, кто пытается познать и сделать сам. Можем обсудить что у Вас не получается в реализации совета данного в #5. Только так. Только вперед по дороге ЗНАНИЯ.
Если написать за Вас - то это в "ищу исполнителя".
Я не программист, и вообще далек от этого,скорее музыкант. Но как я пойму как должно быть,если изначально не знаю как должна строиться эта переменная,должно ли что-то в шапке написано,кроме того,что написано в секции loop, если я хочу использовать эту переменную на несколько кнопок,а не на одну?
,скорее музыкант.
музыка это прекрасно. как и программирование. попробуйте раз используете. Эх...
На каждый канал так:
в шапке:
boolean on1= false;
в loop в соответствующих местах:
if (on1==true){ on1=false;}
else {on1=true;}
Следующий ответ только по предоставлению кода в котором Вы пытались.
Решение найдено! сделал так как вы мне посоветовали, все кнопки работают так как мне нужно. Благодарю за ответ!
Где вы это взяли? у меня нет этого в коде
пристрелите пианиста.