MOUNTAINBOARD + BLUETOOTH + ANDROID

Hola Compañeros.

He utilizado MOBO BT Car de Android para gobernar mi mountainboar via Bluetooth y me esta funcionando bastante bién, para lo cual necesito manejar:

Una tensión de 0 a 5 voltios para controlar al velocidad del motor eléctrico de arraste de mi patín, dicha tensión la aumento o disminuyo en función de si pulso la tecla ADELANTE para subir revoluciones y TURBO para bajar de revoluciones en el aplicativo para Android MOBO BT CAR.
Consiguiendo que cuando lo reconoce mi arduino el comando FORWARD ponemos el pin 12 en estado 1 y lo unimos con la entrada digital inputPin1 consiguiendo en el ledpin9 que aumente progresibamente de 0 a 5 voltios. Según mi parte final de mi programa....
Por el contrario cuando pulsamos TURBO en el aplicativo android, recalcar que he ultilizado TURBO para disminuir de intensidad y ir decrementando de 5 a 0 voltios el ledpin (pin 9), para lo cual hemos procedido como antes pero esta vez cuando hemos tenido un 1 en el pin 8 lo hemos unido al inpuntPin2 que es el que comanda la bajada de tensión de 5 a 0 voltios según la parte del programa que he añadido a MOBO BT Car al final de todo el programa.

Lo he probado y funciona de maravilla....

Hasta ahora todo bien, incluso probado ya instalado en mi mountainboard.

Mi pregunta es la siguiente, a ver si alguien me puede ayudar ya que he probado varias combinaciones de código y no he conseguido lo que os propongo.

Necesito ya que utilizare un servomotor el cual cuando recibe un 1 de algunas de las salidas digitales este se activa, y comanda una pinza de disco de freno, como las de bicicletas y que hará la función de freno.

Mi problema es que cuando utilizo REVERSE como freno consigo ese estado lógico que me activa mi freno pero en ese preciso momento tengo que dejar la tensión del ledPin 9 independientemente en el estado que este en 0 para parar el motor y dejar solo funcionando al freno.

Comentaros que cuando dejo de pulsar REVERSE el servofreno vuelve solo a su estado actual...

Alguien me puede ayudar a como dejer en estado lógico 0 cuando pulso REVERSE el ledpin9 ??????????????

Gracias amigos...

p1=digitalRead(inputPin1); //===================================
p2=digitalRead(inputPin2); //===================================
if (p1 == HIGH) { value--; } //==================================
else if (p2 == HIGH) { value++; } //==================================
value = constrain(value, 0, 255); //==================================
analogWrite(ledPin, value);

MOUNTAINBOARD + BLUETOOTH + ANDROID

int ledPin = 9; //=================================================================
int inputPin1 = 2; // pulsador 1 ======================================================
int inputPin2 = 3; // pulsador 2 ======================================================
int p1; //==================================================================
int p2; //==================================================================
int value = 0; //===================================================================

int forward = 12; // Pin 12 - Forward
int reverse = 11; // Pin 11 - Reverse
int left = 10; // Pin 10 - Left
int right = 13; // Pin 9 - Right
int turbo = 8; // Pin 8 - Turbo
int short_lights = 7; // Pin 7 - Short Lights
int long_lights = 6; // Pin 6 - Long Lights
int back_lights = 5; // Pin 5 - Back Lights
int reverse_lights = 4; // Pin 4 - Reverse Lights

char val; // Variable to receive data from the serial port

void setup() {

// initialize the digital pins as output
pinMode(forward, OUTPUT);
pinMode(reverse, OUTPUT);
pinMode(left, OUTPUT);
pinMode(right, OUTPUT);
pinMode(turbo, OUTPUT);
pinMode(short_lights, OUTPUT);
pinMode(long_lights, OUTPUT);
pinMode(back_lights, OUTPUT);
pinMode(reverse_lights, OUTPUT);

pinMode(ledPin, OUTPUT); //===================================================
pinMode(inputPin1, INPUT); //===================================================
pinMode(inputPin2, INPUT); //===================================================

Serial.begin(9600); // Start serial communication at 9600bps
}

// Fordward action
void go_forward() {
digitalWrite(forward, HIGH);
digitalWrite(turbo, LOW);
digitalWrite(reverse, LOW);
}

// Stop Forward action
void stop_go_forward() {
digitalWrite(forward, LOW);
}

// Reverse action
void go_reverse() {
digitalWrite(reverse, HIGH); //---------------------------------REVERSE-----ATRAS
digitalWrite(forward, LOW);
digitalWrite(turbo, LOW);
digitalWrite(reverse_lights, HIGH);
digitalWrite(ledPin, LOW);
}

// Stop Reverse action
void stop_go_reverse() {
digitalWrite(reverse, LOW);
digitalWrite(reverse_lights, LOW);
}

// Turbo action
void go_turbo() {
digitalWrite(turbo, HIGH);
digitalWrite(forward, LOW);
digitalWrite(reverse, LOW);
}

// Stop Turbo action
void stop_go_turbo() {
digitalWrite(turbo, LOW);
}

// Left action
void go_left() {
digitalWrite(left, HIGH);
digitalWrite(right, LOW);
}

// Right action
void go_right() {
digitalWrite(right, HIGH);
digitalWrite(left, LOW);
}

// Stop turn action
void stop_turn() {
digitalWrite(right, LOW);
digitalWrite(left, LOW);
}

// Stop car
void stop_car() {
digitalWrite(forward, LOW);
digitalWrite(reverse, LOW);
digitalWrite(turbo, LOW);
digitalWrite(right, LOW);
digitalWrite(left, LOW);
digitalWrite(reverse_lights, LOW);
}

// Short Lights ON
void lights_on() {
digitalWrite(short_lights, HIGH);
digitalWrite(back_lights, HIGH);
}

// Short Lights OFF
void lights_off() {
digitalWrite(short_lights, LOW);
digitalWrite(back_lights, LOW);
}

// Long Lights ON
void long_lights_on() {
digitalWrite(long_lights, HIGH);
}

// Long Lights OFF
void long_lights_off() {
digitalWrite(long_lights, LOW);
}

// Reverse Lights ON
void back_lights_on() {
digitalWrite(reverse_lights, HIGH);
}

// Reverse Lights OFF
void back_lights_off() {
digitalWrite(reverse_lights, LOW);
}

// Read serial port and perform command
void performCommand() {
if (Serial.available()) {
val = Serial.read();
}
if (val == 'f') { // Forward
go_forward();
} else if (val == 'z') { // Stop Forward
stop_go_forward();
} else if (val == 'b') { // Backward
go_reverse();
} else if (val == 'y') { // Stop Backward
stop_go_reverse();
} else if (val == 't') { // Turbo
go_turbo();
} else if (val == 'x') { // Stop Turbo
stop_go_turbo();
} else if (val == 'l') { // Right
go_right();
} else if (val == 'r') { // Left
go_left();
} else if (val == 'v') { // Stop Turn
stop_turn();
} else if (val == 's') { // Stop
stop_car();
} else if (val == 'a') { // Short Lights
lights_on();
} else if (val == 'c') { // Stop Short Lights
lights_off();
} else if (val == 'd') { // Long Lights
long_lights_on();
} else if (val == 'e') { // Stop Long Lights
long_lights_off();
}

}

void loop() {
performCommand();

p1=digitalRead(inputPin1); //===================================
p2=digitalRead(inputPin2); //===================================
if (p1 == HIGH) { value--; } //==================================
else if (p2 == HIGH) { value++; } //==================================
value = constrain(value, 0, 255); //==================================
analogWrite(ledPin, value); //==================================
delay(10); //==================================
}

COMO MOOOOOOLAAAAA!!!!!!

Mira chaval, lo del código lo tienes casi resuelto, no creo que necesites mucha ayuda.

En cambio me planteo muchas preguntas al ver el montaje que has hecho, como ¿que controlador has utilizado para alimentar ese motor? o ¿que baterías utilizas?. ¿Tienes mas fotos? ¿Vas a publicar un tuto?

muy interesante, yo estoy muy interesado, dado que tengo un skate electrico y quisiera integrar arduino leonardo, para que me diga el nivel de bateria y demas datos del skate