Sebastian Sosa / Mbed 2 deprecated MbedProcessingCar

Dependencies:   mbed

Files at this revision

API Documentation at this revision

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