Arduino: problema con botones

dinnergore
#1 por dinnergore el 27/09/2015
buenas noches desde Chile, quería consultarles sobre códigos :S sucede de que me estoy armando un controlador midi con potenciometros y botones , estoy aprendiendo con esto, los potenciometros ya no son problema, los botones hacen atados. quiero hacer que un botón active una función del kontakt y al volver a presionarlo apague esa función tipo "on/off" hasta ahora solo logro encender, aquí el código que estoy usando:

int buttonPin = 2;
boolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state

void setup(){
pinMode(buttonPin, INPUT);//this time we will set the pin as INPUT
Serial.begin(9600);//initialize Serial connection
}

void loop(){
currentState = digitalRead(buttonPin);
if (currentState == HIGH && lastState == LOW){//if button has just been pressed
MIDImessage(176,1,buttonPin);//turn note 60 on with 127 velocity
delay(2);//crude form of button debouncing
} else if(currentState == LOW && lastState == HIGH){
MIDImessage(176,1,buttonPin);//turn note 60 on with 127 velocity
delay(10);//crude form of button debouncing
}
lastState = currentState;
}

//send MIDI message
void MIDImessage(byte command, byte data1, byte data2) {
Serial.write(command);
Serial.write(data1);
Serial.write(data2);
}

cualquier vídeo tutorial , pagina o su propia sapiencia sera de mucha ayuda :)
Subir
OFERTASVer todas
  • -8%
    Behringer X Air XR18
    645 €
    Ver oferta
  • -26%
    AKAI MPC Key 61
    1.290 €
    Ver oferta
  • -40%
    ¡Precio mínimo histórico! AKAI MPK 261
    298 €
    Ver oferta
vagar
#2 por vagar el 27/09/2015
Tal como está programado, cuando aprietas el botón lanza un mensaje y cuando lo sueltas lanza otro. Si quieres que funcione como dices necesitas una tercera variable booleana que te almacene el estado de la conmutación.

boolean maschineState = false;

Cuando el botón pase de off a on conmutas esta variable y, según su estado, mandas un mensaje u otro:

maschineState = !maschineState;

if(maschineState) {
enviar comando encendido
} else {
enviar comando apagado
}
Subir
dinnergore
#3 por dinnergore el 28/09/2015
muchas gracias :) el problema es que solo entiendo la mitad de eso :/ la parte de conmutar no entiendo :/ si sabes de una pagina que explique tales procedimientos te lo agradecería y mucho mas si tu mismo me ilustras :)
Subir
vagar
#4 por vagar el 28/09/2015
Conmutar es pasar de un estado a otro. Lo que necesitas es entonces aprender a programar, lo cual ya te aviso que no es sencillo ni se hace en dos días, supone un cambio en la forma de pensar para ponerte en el lugar de una máquina ignorante que necesita que se lo expliquen todo de forma exacta e inequívoca.

Busca recusos de programación en lenguaje C, algo como esto:

http://www.prometec.net/intro-programacion/

O algún curso online:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-087-practical-programming-in-c-january-iap-2010/

Si puedes permitírtelo, mejor ir a una escuela con un profesor que te guíe y te corrija los errores.
Subir
litan
#5 por litan el 08/10/2015
En este vídeo creo que te explica bien lo qué quieres hacer:

https://www.youtube.com/watch?v=7ob8CDEmExs

Saludos!
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo