Offline
Newbie
Karma: 0
Posts: 36
|
 |
« on: May 01, 2012, 06:49:01 am » |
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); //================================== }
|