Salve, ho da poco acquistato un Arduino Uno e parecchi componenti per realizzare una footcontroller MIDI per gestire Multieffetti Rack.
Dato che per mestiere sono un programmatore Cad-Cam mi sono disegnato il progetto:
Vi metto il link dove ho caricato il rendering del progetto:
https://plus.google.com/photos/104025063528945292989/albums/5861939625544980081?authkey=CNitkLSXn4TKQA
Componenti Acquistati:
Arduino Store
- 1 x Arduino Duemilanove w/ Atmega328 (A000001) = €15.00
- 1 x Getting Started With Arduino 2nd Edition (B000001) = €16.00
- 1 x The Arduino Starter Kit (K000007) = €79.90
- 3 x ATMega328 - Microprocessore (A000048) = €12.00
Ho letto il Libro di Sciamanna "Arduino", "Getting Started With Arduino" e quello dello Starter Kit, eseguendo parecchi degli esempi illustrati all'interno.
Vorrei iniziare con un progetto terra terra vi elenco le caratteristiche:
- 2 Push Button (rispettivamente Preset P1 e P2)
- 2 Led (che si accendono ogni volta che premi o P1 oppure P2)
- MIDI Output (che invia un Program Change)
es:
- quando premo P1, invia un ProgrmChange 10 su Canale10.
- quando premo P2, invia un ProgrmChange 2 su Canale10.
Le prove che ho fatto questa mattina non hanno dato i risultati sperati.
Questo è grosso modo il progetto:
Questo è il codice che ho usato:
#include <Bounce.h>
/*
Prova 1
Inviare ProgramChange tramite Push Button e Relativi Led.
Componenti:
2 Push Button
2 Led
1 Presa Femmina MIDI 5 pin
*/
#include <MIDI.h>
const int BUTTON1 = 8; // il numero del pin del pushbutton_1
const int BUTTON2 = 9; // il numero del pin del pushbutton_2
const int LED1 = 3; // il numero del pin del Led_1
const int LED2 = 2; // il numero del pin del Led_2
// variabili:
int buttonState1 = 0; // variabile che legge lo stato del pushbutton_1
int buttonState2 = 0; // variabile che legge lo stato del pushbutton_2
Bounce bouncer1 = Bounce( BUTTON1,5 );
Bounce bouncer2 = Bounce( BUTTON2,5 );
void setup() {
Serial.begin(31250); // Imposta MIDI baud rate:
pinMode(LED1, OUTPUT); // imposta i pin dei Led1 come output:
pinMode(LED2, OUTPUT); // imposta i pin dei Led1 come output:
pinMode(BUTTON1, INPUT); // imposta i pin dei pushbutton1 come input:
pinMode(BUTTON2, INPUT); // imposta i pin dei pushbutton2 come input:
}
void loop(){
// Update and monitor a change of input
if ( bouncer1.update() ) {
// Get the state of the button
int value1 = bouncer1.read();
// Toggle the LED if the button is held
if ( value1 == HIGH) {
digitalWrite(LED1, HIGH);
MIDI.send(ProgramChange,10,0,10);
// Make the button retrigger in 500 milliseconds
bouncer1.rebounce(500);
}
else {
// spegni il LED:
digitalWrite(LED1, LOW);
}
}
// Update and monitor a change of input
if ( bouncer2.update() ) {
// Get the state of the button
int value2 = bouncer2.read();
// Toggle the LED if the button is held
if ( value2 == HIGH) {
digitalWrite(LED2, HIGH);
MIDI.send(ProgramChange,2,0,10);
// Make the button retrigger in 500 milliseconds
bouncer2.rebounce(500);
}
else {
// spegni il LED:
digitalWrite(LED2, LOW);
}
}
}
Oggi, ho fatto diverse prove con il codice citato nel post precedente e ho monitorato tutto con il programma midiox:
il program change veniva recepito ma andava in continuazione come se lo inviassi di continuo.
Inoltre ho provato a inviare lo stesso Program Change tramite una master keyboard per vedere cosa veniva visualizzato nel Midiox, in questo caso, come c'era da aspettarsi, veniva inviata una sola riga di comando contenente il program change voluto.
Suggerimenti? =(