Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:24f25fea5f95, committed 2015-02-21
- Comitter:
- Sosx
- Date:
- Sat Feb 21 04:49:49 2015 +0000
- Parent:
- 1:fc4305740d67
- Commit message:
- Documentation for processing control updated to describe the entirety of the code
Changed in this revision
| Processing.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Processing.cpp Wed Nov 12 00:09:41 2014 +0000
+++ b/Processing.cpp Sat Feb 21 04:49:49 2015 +0000
@@ -6,13 +6,13 @@
//PROCESSING CODE, COPY AND PASTE ON PROCESSING
//Preferably on 32 bit version, even if your computer is 64bit
-import procontroll.*;
+import procontroll.*; //Importa librerias
import java.io.*;
import processing.serial.*;
-Serial myPort;
+Serial myPort; //inicia puerto serial
-ControllIO controll;
+ControllIO controll; //Requisitos de procontroll, los primeros inician el control, sliders son el joystick y button son botones (obviamente).
ControllDevice device;
ControllSlider sliderX;
ControllSlider sliderY;
@@ -20,48 +20,49 @@
ControllButton button2;
void setup(){
- size(400,400);
+ size(400,400); //codigo standard de processing, se tiene que crear una ventana nueva
- controll = ControllIO.getInstance(this);
+ controll = ControllIO.getInstance(this); //Aqui lee los controles conectados, mouses, teclados, controles, joysticks, lo que sea
- device = controll.getDevice("Controller (XBOX 360 For Windows)");
- device.setTolerance(0.05f);
+ device = controll.getDevice("Controller (XBOX 360 For Windows)"); //Aqui escribes el nombre del control que vas a usar, lo lees de una lista en processing
+ device.setTolerance(0.05f); //Otro requerimiento de procontroll, para que el joystick sea mas preciso (lee la libreria)
- sliderX = device.getSlider(1);
- sliderY = device.getSlider(0);
- button = device.getButton(0);
- button2 = device.getButton(1);
+ sliderX = device.getSlider(1); // Toma valores de slider y botones
+ sliderY = device.getSlider(0); //Los sliders pueden ser de 0 a x numero o de -x a x (lee las librerias)
+ button = device.getButton(0); //Los botones son booleanos
+ button2 = device.getButton(1); //Los 1 y 0 en los parentesis se refieren a que boton es cual, no es booleano, hay mas argumentos (0,1,2,3...)
- String portName = Serial.list()[1];
- myPort = new Serial(this, portName, 9600);
+ String portName = Serial.list()[1]; //Lee el puerto serial 1, si tienes conectados mas aparatos seriales pasas argumento 1,2,3 etc, si solo hay 1 es 0 o 1
+ myPort = new Serial(this, portName, 9600); //Inicia serial (ya deberias saber esto, si no lee el serial de arduino)
- fill(0);
- rectMode(CENTER);
+ fill(0); //Color del fondo del cuadro, realmente no importa por ahora, luego probablemente si.
+ rectMode(CENTER); //Otras cosas de la ventana, lee la documentacion de processing, esta chida.
}
void draw(){
- background(255);
- int vel = 0;
- float rightM = 0;
- float leftM = 0;
- float right = 6;
- float left = 6;
+ background(255); //Mas colores... Esta parte es el void loop() de arduino.
+ int vel = 0; // variables del programa, si te preguntas por que estan aqui y no arriba, seguro hay una razon.
+ float rightM = 0; //vel es la velocidad de los motores
+ float leftM = 0; //leftM y right M son los valores que se envian, por lo tanto son valores que se interpretaran como ASCII
+ float right = 6; //Por calculos que no quiero explicar y en pro de usar numeros mas normales y manejables estas variables son con las que
+ float left = 6; //se controla la direccion y velocidad de cada rueda (left y right) (no estoy seguro de por que empiezan en 6, muevanle)
while(true){
- if(button.pressed()){
- if(vel < 6){
+ if(button.pressed()){ // Lee la condicion de A para ver si esta presionado, si la velocidad es menor a un valor semi arbitrario 6, este acelera
+ if(vel < 6){
vel = vel +1;
}
}
- if(button2.pressed()){
- if(vel > -4){
- vel = vel -1;
+ if(button2.pressed()){ // Lo mismo pero al contrario para el boton B para que vaya en reversa, la velocidad es 4 porque se me antojo que de
+ if(vel > -4){ //reversa no deberia de poder ir tan rapido, no tiene mucho que ver con las capacidades del motor o el numero limitado
+ vel = vel -1; //de caracteres que poseemos para mandar la informacion.
}
}
- if(vel == 0){
- rightM = 0;
- leftM = 0;
- }
+ if(vel == 0){ //Esta parte del codigo y hasta donde marque se asegura de que si el coche esta en movimiento y no se aprieta ningun
+ rightM = 0; //boton, este frene solo, hay mecanismos mas refinados que poner muchos ifs para cada caso, aunque sea pude poner un case,
+ leftM = 0; //pero el momento de usar el codigo estaba cerca y era la forma mas facil ya que el otro codigo no daba resultados
+ } //que me dejaran satisfecho, invito al lector a corregir esta parte del codigo y diseñar un mejor algoritmo de frenado.
+
if(button.pressed() == false && button2.pressed() == false && vel == 3){ // positivos
vel = vel -3;
}
@@ -91,27 +92,27 @@
}
if(button.pressed() == false && button2.pressed() == false && vel== -4){ //negativos
vel = vel +2;
- }
+ } //Este es el ultimo caso para que el coche frene solo.
- else{
- float y = sliderX.getValue()*5;
+ else{ //#Nota: estoy casi seguro que este else no solo hace nada sino que traba el codigo, revisandolo no tengo ni idea
+ float y = sliderX.getValue()*5; //de por que lo puse y voy a probar borrandolo y hacer el commit sin el lo antes posible, lo importante esta dentro
if(y>=0){
- rightM = (right - y) * vel;
- leftM = left * vel;
- }
- if(y<=0){
- y = -y;
- leftM = (left - y) * vel;
+ rightM = (right - y) * vel; //la funcion que toma el valor lateral del joystick tiene diferentes formas, en este caso hacia un lado es positiva
+ leftM = left * vel; //y hacia otro lado negativa, las hay que dan valores absolutos y diferentes rangos, invito al lector a revisarlas
+ } //lo que hace esta parte del codigo es ver hacia donde gira, restarselo a la velocidad del lado al que gira y
+ if(y<=0){ //multiplicarlo por el factor de velocidad, asi si se gira a la derecha, la seccion derecha del auto ira un poco
+ y = -y; //mas lento (y) que la parte izquierda, el factor de conversion y los demas valores se tomaron pensando en que
+ leftM = (left - y) * vel; //todos los numeros de velocidad deben poder ser valores ASCII
rightM = right * vel;
}
}
- if(rightM <0){
- rightM = (rightM * (-1)) + 60;
- leftM = (leftM * (-1)) + 60;
+ if(rightM <0){ //Como se puede ver en esta parte del codigo, para diferenciar los valores de derecha o izquierda se modifico el
+ rightM = (rightM * (-1)) + 60; //punto medio de valores 0, antes -60 a 60 y el nuevo punto medio es 60, para tener un rango de valores 60 - 120
+ leftM = (leftM * (-1)) + 60; //(valores ASCII) la programacion del robot debe estar al tanto de este desplazamiento para decidir movimiento.
}
- myPort.write(int(rightM));
+ myPort.write(int(rightM)); //Se imprimen los valores a enviar
myPort.write(int(leftM));
- myPort.clear();
- delay(200);
+ myPort.clear(); //Se limpia el puerto serial, puede que esta linea se pueda remover
+ delay(200); //Se da un delay de 200ms, puede que esta linea tambien sea removible
}
}
\ No newline at end of file