Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Hacer un “Detector de Mentiras” – Capitulo 2 Software

Por Félix Maocho 
11/6/2014

Continúo el post anterior explicando el software que hay que escribir para que funcione nuestra Detector de Mentiras cuyo Hardware ya explicamos.

En el libro “30 proyectos con Arduino encontramos dos recuadros con el software necesario para nuestro Detector de mentiras.

Lo primero que deben saber, es que el texto de las dos cajas va seguido es decir que la linea que continúa a la última de la primera caja ({ ) y la primera de la segunda caja ( int gar = analogRead (sensorPIN); ) va una a continuación de otra sin que haya entre ellas ningún tipo de separación especial, que se ha hecho asi por necesidades del enmaquetado del libro.

Así pues un programa para Arduino es un columna de instrucciones situadas una debajo de otra aunque a veces por su longitud puede venir una misma instrucción escrita en dos líneas, Una instrucción ,siempre acaba con el caracte “;” que es el caracter que indica a la máquina que se ha acabado la instruccion que tiene que ejecutar a continuación.

arduino-Maquina Verdad  Primera partePor otra parte cualquier programa (sketch) de Arduino tiene las siguiente áreas (que en algunos casos quedan vacías)

                        •  Zona de declaración de parámetros y variables
                        • Función setup
                        • Función loop
                        • Zona de definición funciones llamadas desde las zonas anteriores.

Zona de declaración de parámetros y variables

En esta zona se definen los nombres de los parámetros y variables así como su naturaleza, (numéricos, alfanuméricos, vectores, matrices etc. y el valor que recibirán inicialmente.

En todos los caso esta zona se extiende desde la primera línea a la linea anterior a la que tiene el texto “void setup () “ que indica el comienzo de la siguiente zona.

La ventaja de definir en esta parte del programa un parámetro o una variable es que son admitidas en cualquier parte del programa, siempre que su nombre no ccoincida con los de una variable local.

En cualquier parte que nos refiramos a “redPin“ la máquina entenderá que se trata de la variable “redPin” que aparece aquí y que tiene el valor que tenía la última vez que se utilizo, mientras que si se definen dentro de una función, solo tienen validez dentro de esa funciona, (parámetros y variables locales), pero no son reconocidas fuera de esa función. Esto lo veremos mas adelante con el uso de variables locales en la función “setColor

En este caso hemos definido:

Cuatro parámetros numéricos enteros cortos (int) valores fijos numéricos enteros y pequeños) que se llaman reedPin, greenPin, bluePin que adquieren los valores 9, 10, y 11 que serán el número que corresponden a los pines digitales que gobernarán el que a se encienda del color adecuado el LED tricolor y el parámetro buzzerPin que corresponde al pin digital que maneja el zumbador que se le da el valor 7

 

Igualmente definimos como de tipo int otros dos parámetros que utilizaremos con los pines analógico A0 y A1 a los que “bautizamos” como potPin y sensorPin con los calores 0 y 1arduino-Maquina Verdad  segunda parte

Definimos otros tres valores pero estos de tipo long o sea que valen para almacenar números largos en el rango de -2,147,483,648 hasta 2,147,483,647, o bien como en este caso números hexadecimales en base dieciséis. En este caso los caracteres válidos son del 0 al 9, y las letras desde la A hasta la F, que tendrán los valores en base decimal  A el valor de 10, B es 11, C es 12, D es 13, E es 14, y la F, es 15. Los valores hexadecimales se indican con el prefijo “0x”. Los valores de la A a la F, pueden ser escritos en mayúscula o minúscula.

Así que en nuestro caso definimos las variables red, green y blue con un número hexadecimal que representa el color en el código RGB (read, grreen y blue) que da cada color por la intensidad entre 0 = (00) y 255 =(FF) de los colores básicos. (En este caso se ha elegido para el color azul no el azul intenso (que sería el 0x0000FF) por un azul más pálido mas o menos 1/3 de intensidad (o sea el 0x000080) para los otros dos colores se toma el valor más intenso

Por último definimos un parámetro que va a ser la banda de fluctuación que permitimos a los voltajes de prueba y de comparación para considerarlos iguales. Cambien vamos a utilizar el tipo int puesto que le vamos a dar un valor entero y pequeño el nombre del parámetro es band y le vamos a asignar un valor 10

Consideraciones sobre los parámetros

La diferencia entre parámetros y variables, es solo conceptual, parámetros son aquellos valores que no van a cambiar a lo largo de todo el programa, variables son aquellos valores que cambian con motivo de los cálculos que se realizan en el programa, en este caso concreto no hay variables que se usen universalmente  lo que no es lo normal.

Al no cambiar los parámetros, no haría falta definir parámetros, pues podríamos sustituir en cualquier punto del programa el parámetro por su valor y poner por ejemplo 9 donde pone redPin, y el programa funcionaria exactamente igual.

La ventaja de utilizar parámetros es doble, por un lado ayudan a documentar el programa, pues donde ponga redPin sabemos que nos estamos refiriendo al pin que controla el color rojo, lo cual a la hora de modificar el programa y más como en este caso, si lo ha hecho otra persona, facilita bastante el trabajo.

Pero es que además tiene la ventaja de permitir te separar la lógica o software del aparato o hardware , Supongamos que a la hora de probar la maquina descubrimos que la banda de valor diez es muy grande, basta cambiar el valor de “band” a 5 para que la banda admitida sea la mitad en todo el programa.

Igual pasaría si decubrieéamos que hemos conectado mal los pin de diodo y que quien realmente cuando queremos que se encienda rojo sale verde y viceversa, bastaría intercambiar el valor de ambos parámetros par que todo funcionara correcto sin necesidad de cambiara ni los cables ni el programa.

En un programa como este, la cosa no presentaría excesiva complicación si en donde se use habitamos puesto 10 en vez de band, porque es muy corto, pero en un programa complejo que tenga diferentes páginas, donde este parámetro no este ni claro donde se usa, un número no destaca, nada, quizá lo cambiáramos en un sitio y se nos pasara cambiarlos en cinco, en cambo cambiando band de 10 a 5 automáticamente cambiamos el valor a lo largo de todo el programa.

 Función setup

La función setup junto la función loop son dos funciones que obligatoriamente ha de tener un programa de Arduino porque son por defecto las que el programa manda realizar cuando se pone en marcha, eso no quiere decir que pueden no contener nada, (estar vacías), pero la función si ha de existir indicando su principio (siempre igual, para la setup void setup (), un corchete que abre {y su final con un corchete que cierra} y para la loop algo similar (void loop () continua con un corchetes que abre { y finaliza con uno que cierra })

La funciona setup es lo primero que se ejecuta al poner en marcha Arduino y contiene toda la información para que la placa Arduino se configure internamente como a nosotros nos interesa.

Aunque aparentemente a la placa Arduino no cambia, internamente si padece muchos cambios, nosotros tendremos que definir los pines van a ser de salida OUTPUT o de entrada INPUT, y también otras cosas que en este caso no son necesarias, como cual es el protocolo de comunicación que van a utilizar para comunicarse con otros aparatos por cable o a distancia (infrarrojos, wifi etc,), por ejemplo habra que especificar a cuantos baudios(bites por segundo, se va a hacer la transmision de datos, para que amas máquinas se entiendan. Como indico en este caso solo le defeniremos como ha de utilizar los pines, que en nuestro caso son:

  1. Arduino_Esquema_VerdadDos pines dos analógicos 0 y 1 informado por los parámetros potPin y sensorPin) en modo INPUT. pues deben recibir las lecturas
  2. Tres pines digitales que además son del tipo PWM (que pueden modular una onda de impulsos) llamados redPin, greenPin y bluePin que manejarán los colores del Led tricolor que se abren en modo OUTPUT porque van a alimentar el Led
  3. Un pin digital buzzerPin de OUPUT que va a dar energia al zumbador

¡OJO! En este punto hay una clara diferencia entre lo pintado en el esquema del aparato en el que la entrada al LED tricolor procede de una fuente de 5 Voltios y acaba en los pin por lo que deduje en su momento que los pin eran de nitrada (INPUT) y lo que señala el programa, A mi juicio ha sido que han pintado el LED triple cambiado especularmente, es decir lo que queda a la izquierda deberia quedar a la derecha, pues el LED es un diodo y no permite el paso de la corriente más que en un sentido el que marca la flecha Interna. Ese esquema contien pues claramente un error

Mi opio es que el montaje correcto es el que indica el sketch y no el esquema, como por ejemplo se ve en este video en el que claramente la salida del LED es a bus GMD. Modificaré el texto anterior para no llevar a confusión.

Función loop

Como la función setup es llamada automáticamente nada más acabar la función setup, pero a diferencia de la anterior que solo se ejecuta una vez, esta función se ejecuta ininterrumpidamente en un bucle sin fin como si nombre indica, así por lo tanto el skech de Arduino es lo que haya dentro de esta función, pero si a lo largo de la ejecución de un bucle cambiamos algun valor de lo que contienen, a la siguiente vuelta, actuará de acuerdo con el cambio realizado en la vuelta anterior, por eso es posible repetir y repetir el mismo programa pero que lo que haga el objeto que controlamos con Arduino sea muy variado..

Esta función se inicia con la instrucción void loop (), se continua con un corchete que abre { y acaba con un corchete que cierra } como la anterior

En nuestro caso hace lo siguiente:

Leer la tensión del pin potencial (potpin) y del pin sensor (sensorPin). Comparar los valores y si la diferencia supera el valor de la banda si el voltaje del sensor es superior enciende la luz roja y pita el zumbador, si es menor enciende la luz azul y si son sensiblemente iguales enciende la verde,

y vuelve a repetir el ciclo desde el principio otra vez. Lo vamos a ver con detalle.

Comienza loop definiendo dos variables enteras nuevas gar y pot que recibirán el valor de la lectura de los sensores analógicos (analogRead(sensorPin) y analogRead(potPin) son variables locales por tanto solo son reconocidas dentro de la funcion loop pero no en otras que pueda llamar

A continuación

Mira si (if) el valor de “gar” es mayor ( >) que el de “pot + band” (Si se sale por arriba de la banda prevista)

Si es cierto :

Llama a la función setColor con el parámetro “red” que encenderá la luz que diga el parámetro en este caso la roja y a la función beep que no necesita que le pasen ningún parámetro para hacer sonar el zumbador

En caso de que no sea verdad (else)

Mira si (if) el valor de “gar” es menor (<) que el de “pot – band” (Si no llega a la banda prevista)

Si es cierto :

Llama a la función setColor con el parámetro “blue” que encenderá la luz azul en este caso

Si no es cierto

Es que ambos están dentro de la banda son aproximadamente iguales y llama a la función setColor con el parámetro “green” que encenderá la luz verde

En todos los casos lo que las funciones if y else tienen que hacer se delimita abriendo ({) y cerrando (}) corchetes.

Para no liarse en exceso el contenido entre dos corchetes se indenta un poco, para facilitar la lectura indicando lo que entra dentro de cada para de corchetes, pero se hace por facilitar la lectura no por que la máquina lo precise.

Zona de definición funciones llamadas desde las zonas anteriores.

Las funciones son rutinas que se llaman muchas veces desde un programa bien en el mismo ciclo bien en ciclos sucesivos,, Podían eliminarse escribiéndolas dentro de la función que la llama en nuestro caso la función loop pero es más practico escribirlas fuera por dos motivos.

  • El primero es de órden practico, se intenta aislar las instrucciones que hacen determinada acción en un grupo independiente, pues al hacer las pruebas falla la accion sabremos fácilmente en que conjunto de líneas tenemos que buscar el fallo.
  • En segundo lugar a medida que programemos mas cosas nos iremos haciendo con una libreria de funciones, de modo que cuando vayamos en otro programa a hacer lo p mismo o algo muy parecido podamos copiar y pegar de un programa a otro las inastrucciones que llevana acabo la acción, adquiriendo de este modo mayor rapidez y fiabilidad en los programas

Cada función comienza con una primera linea que contiene en el orden de izquierda a derecha “los parámetro de salida”, “el nombre de la función” a continuación entre paréntesis los “parámetros de entrada” y en la siguiente linea, el consabido corchete de apertura { y acaba la función con el corchete de cerrar }, que por cierto, se escribe pisando “ALT Gr” y las teclas a la derecha de la fila inferior del teclado la de la dieeresis ¨ y la c cedilla Ç

En eso no difieren a las dos estudiadas por ejemplo en la función setup escribimos “void” como parámetro de salida que quiere decir que no hay parámetro de salida el nombre “setup” y como no hay parámetros de entrada acabaos con los paréntesis sin nada en medio (). Veamos nuestras funciones setColor y beep

Función setColor

Después de estudiar concienzudamente esta función, he de reconocer tres cosas, no la entiendo, es innecesariamente complicada y además a m juicio no funciona como debería. Total un desastre

Digo esto, por los siguientes motivos:

  • Organiza un follón innecesario con el unos de número hexadecimales, que aparte de ser de difícil comprensión como los maneja, hasta el punto de no encontrar en los manuales oficiales explicación de lo que hace, es un procedimiento excesivamente rebuscado para trasmitir el valor a unas variables cuando hay otros medios más sencillos de hacer lo mismo.
  • Ademas, salvo que las funciones que no entiendo hagan algo inesperado, creo que lo hace mal, porque en mi opinión encienden los colores exactamente al revés de como debían.

(aunque esto puede no ser cierto, pues mi experiencia practica en el uso de Leds de tres colores es nula).

Por todo ello voy a tratar de explicar en la medida que yo se lo que hacen y luego daré la solución que yo habría buscado.

En primer lugar. está claro que esta función solo trata de encender el color que corresponde en función del parámetro con el que se la llame a saber , “red”, “green,” o “blue” y ademas en caso que el parámetro sea “red” hará sonar un zumbador. Esta función no hace nada mas.

Tal como yo entiendo que actuá en los tres primeros parámetros carga en unas variables locales que además par mayor confusión también se llaman “red”, “green” y “blue” , con parte del parámetro de entrada y con los valores cargados, manda salir enriar por pines PWM una intensidad de corriente que produzca el color que deseemos en el led tricolor por mezcla de los tres colores básicos,

La primera linea de setColor nos informa que no hay parámetros de salida “void” pero que si tiene un parámetro de entrada que es de tipo long y lo va a llamar “rgb”. Como sabemos de la función “loop”, los únicos posibles valores que vamos a pasar son solo tres posibles definidos (long) como números hexadecimales , red = 0x FF0000. green = 0x00FF00, o blue = 0x000080

Pasado el corchete de apertura { nos encontramos tres sentencias que son bastantee más difíciles de explicar, pero que por fuerza intentan dividir el parámetro de entrada de entrada que le han pasado que dentro de la función se llama “rgb” en tres trozos y cargar dichos trozos en tres variables locales definidas como enteros cortos (int) llamadas (para su uso dentro de la función por se variables locales) “red”, “green! y “blue”, lo que quiere decir que dentro de esta función excepcionalmente y por tener el mismo nombre, “no existen”, ( no actúan),  los parámetros de tipo long que definimos al principio del programa y que hemos utilizado como parámetros de entrada al invocar a esta función. Analicemos las líneas una a una.

La primera linea dice “int red = rgb >> 16 ;”, o lo que es lo mismo la variable entera corta (int) que llamamos “red” adquiere el valor “=” de “rgb >> 16” donde rgb es el parámetro con el que se llama a la función y que por fuerza tiene que ser uno de los tres posible parámetros de tipo long que definimos al principio del programa  red = 0xFF0000. green = 0x00FF00, o blue = 0x000080, pero el operador “>> 16” indica desplazado a la derecha 16 posiciones, ¿Que quiere decir esto?

Desplazar hacia la derecha >> o hacia la izquierda <<  indica que los bits que se guardan del operando del lado izquierdo en muerto caso “rgb” son desplazados a la derecha o a la izquierda el número de posiciones especificadas por el operando derecho, en nuestro caso 16

¿Pues sigo sin entender que quiere decir? – Pues, a mi no me extraña, tratare de explicarlo más claro. Lo que ocurre es que definamos las variables y parámetros como las definamos, al final, todo se guardan en la memoria del ordenador en esta en base 2, pues es solo con “1” y “0”·con lo que funciona el ordenador, (que por eso se llama máquina digital). Cada carácter del número hexadecimal, ocupa realmente cuatro espacios relleno de ceros o unos en la memoria de Arduino. Así 0 es en realidad “0000” y 3 “0011” y F que es 15 se escribe en el disco duro como “1111”, o lo que es lo mismo 2 elevado a 3=8 mas 2 elevado a 2=4, mas 2 elevado a 1=2 mas 1 (8+4+2+1) = 15. Desplazar 16 bits, es por tanto despreciar los 4 números de la derecha del número hexadecimales. O sea que:

Primera linea – int red = rgb >> 16 ;

  • Si el parámetro de entrada fue: red = 0xFF0000, se queda solo para “red” en FF (en base 16) o sea 15×16+15 = 255 en base decimal, de forma semejante a 99 que en base 10 es 9×10+ 9.  El valor de la variable local “red” = 265 cuando el parámetro de entrada es 0xFF0000
  • Si el parámetro de entrada fue: green = 0x00FF00, se queda solo para “red” en 00 (en base 16), por tanto el valor de la variable local “red” = 0 cuando el parámetro de entrada es 0x00FF00,
  • Si el parámetro de entrada fue: blue = 0x000080, se queda solo para “red” en 00 (en base 16), por tanto el valor de la variable local “red” = 0 cuando el parámetro de entrada es 0x000080.

Hasta aquí lo que sé con seguridad, el resto lo deduzco porque realmente no lo se.,

Segunda línea – int green = rgb >> 8 ɠ 0xFF ;

La primera parte la entendemos sin problema el entero corto “green” va a recibir el valor desplazado 8 bites es decir los 2 últimos dígitos de la derecha ¿pero que quiere decir lo que viene a continuación? – Pues ni lo se, ni lo he encontrado en el manual, es más por no saber no se ni como reproducir el símbolo que aparece en el listado, pero deduzco de lo que tiene que hacer, que pretende que si el parámetro de entrada es “green” =0x00FF00 adquiera el valor 255 y en otro caso se quede a 0, Por lo tanto deduzco (no lo se con toda seguridad) que la extraña coletilla de esta instrucción corta de alguna manera la parte izquierda que nos sobra del del hexadecimal y selecciona así los números 3 y 4 para dar valor a “green”, por tanto:

  • Si el parámetro de entrada fue: red = 0xFF0000, se queda solo para “gren” en 00 (en base 16), por tanto el valor de la variable local “green” = 0 cuando el parámetro de entrada es 0xFF0000.
  • Si el parámetro de entrada fue:green= 0x00FF00, se queda para “green” en FF (en base 16), por tanto el valor de la variable local “green” = 255 cuando el parámetro de entrada es 0xFF0000.
  • Si el parámetro de entrada fue: blue = 0x000080, se queda solo para “gren” en 00 (en base 16), por tanto el valor de la variable local “green” = 0 cuando el parámetro de entrada es 0x00FF00.

 

 

Tercera linea – int blue = rgb ɠ 0xFF ;

En este caso no hay desplazamiento y de alguna forma corta los cuatro dígitos de la izquierda del numero hexadecimal

  • Si el parámetro de entrada fue red = 0xFF0000. El valor de la variable local “blue”· que valga 0 deduzco que esa misteriosa función elimina la dos caracteres iniciales quedando solo 00, por lo que en este caso “blue” vale 0
  • Si el parámetro de entrada fue: green = 0x00FF00.bEl valor de la variable local “blue” después de desplazar bits y quitar las FF sera 0, por lo que en este caso “blue” vale 0
  • Si el parámetro de entrada fue: blue = 0x000080. El valor de la variable local “blue” será (8×16)=128 o sea la mitad que en el caso anterior.

Entramos ahora en las lineas siguientes donde encontramos tres mandatos analogWrite o sea escribir analógico en el pin que se indica en ni nuestro caso los pines que indican los parámetros que definimos al principio del programa “redPin = 9”, “greenPin = 10 “ y “bluePin = 11” y con un parámetro más que es 255 menos el valor de la variable local que calculamos antes.

El mandato analogWrite permite mandar por determinados pines marcados con ~ una corriente en impulsos como se explica en este post, lo que a los efectyos actúa en algunos aparatos como Leds que es nuetro caso o motores electricos, actuar como si recibieran  menor voltaje aunque solo pasa que hay impulsos siempre a 5 voltios seguidos de impulsos a 0voltios.

La sintaxis del mandato “analogWreite” es analogWrite(pin, valor) donde pin, es el el pin en el cual se quiere generar la señal PWM y valor, un valor comprendido entre 0 (siempre apagado) y 255 (siempre encendido).

Calculo que hay un erro

Es aquí donde encuentro que hay un error en esta rutina, pues tal como viene escrita, al poner en cada linea para el parámetro “valor la expresión ( 255 – red), (255 – geen) y (233- blue), a mi juicio y creo no equivocarme, o al menos no me equivoco para el color rojo, la cosa funciona exactamente al revés de como estaba previsto. Es decir que por ejemplo si el parámetro con el que llamamos la función correspondía al red=OxFF0000, entonces las variables locales toman los siguientes valores red=255, geen=0 y blue=0, pero lo que ocurre es que el color que veremos no es rojo sino la mezclade verde y azul que si no me equivoco es marrón.

Mi solución para esta función

Puesto que lo único que se pretende con setColor es encender un led tricolor con un solo color puro, comenzaría por no utilizar pines digitales como analógicos sino solo como digitales es decir que están encendidos o apagados y pasaría un parámetro sencillo que me informara únicamente que pin necesito encender.

Por tanto en la zona de definición de variables cambiaría las variables hexadecimales por numéricas cortas quedando el resto igual y estas quedarían  así, (la primera linea es un comentario y no será tenido en cuenta por el programa, solo vale para documentarlo):

// Indicadores del color a encender
30px;”>int red = 1 ;
30px;”>int green = 2 ;
30px;”>int blue = 3

En la función setup y loop no hay que cambiar nada pero la función setColor quedaría como sigue

 // Función setColor enciende el pin que produce el color deseado
// recibe un parámetro de entrada entero corto que puede tener
// los siguientes valores red =1 , green =2 o blue = 3
void setColor (int rgb)
{
// apagamos los tres pin que vamos a utilizar
digitalWrite(redPin, LOW);  // apagamos el color rojo
digitalWrite(greenPin, LOW);  // apagamos el color verde
digitalWrite(bluePin, LOW);  // apagamos el color azul
// encendemos el que nos indique el parámetro de entrada

          if (1=rgb)
{
digitalWriter(redPn, HIHG);  // encendemos el color rojo
}
if (2=rgb)
{
digitalWrite(greenPin, HIGH; // encendemos el color verde
}
if (3=rgb)
{
digitalWrite(bluePin, HIGH); //encendemos el color azul
}

}

No pretendo como programador de Arduino dar lecciones a nadie, pues tengo muy claro que soy un principiante, Lo que sospecho que ha pasado es que ha utilizado una función diseñada para producir cualquier color mezclando proporcionalmente los tres colores básicos pero lo ha hecho un poco alocadamente y no se ha fijado en los parámetros que pasaba. De todas formas mi solución para este caso particular, con toda humildad, me parece mas sencilla y eficaz.

Función beep

Esta función no tiene ni parámetros de salida (void) ni de entrada ()

Esta función enciende y apaga rápidamente el zumbador para que vibre a una frecuencia de 5 kilohercios para ello hace un bucle (tipo for) que se repite 1000 veces las instrucciones encender (HIGH) el pin 7 (buzerPin, (HIGH), detiene 100 microsegundos (delayMicroseconds(100), apaga el pin (LOW) y vuelve a detener 100 microsegundos.

Con ello va lanzando 1000 impulsos cada 200 microsegundos es decir 50 por segundo, el zumbido durara por lo tanto 200000 microsegundos o sea 200 segundos algo mas de tres minutos lo que me parece excesivo para que dure menos basta que rebajemos el número de ciclos que se realizan

La única duda que puede presentar esta función es la instrucción “for (int i = 0; i < 1000; i ++)”,

Traducido al castellano esto se leería ·ejecutar lo que hay entre corchetes ({ }) desde que (for) definimos la variable i como es entera corta y damos valor inicial 0 (int i = 0), mientras la variable i tenga un valor menor que 1000 ( i < 1000) incrementando uno en cada bucle (i++). Por tanto parara cuando alcance el color 1000 y habrá dado exactamente 1000 vestal.

Bien cero que ha quedado todo absolutamente claro, pero como yo también fui principiante absoluto, se perfectamente que muchas cosas que un, (medianamente), experto da por sabidas, dejan a un principiante sumido en un mar de dudas. No se corte, todos hemos sido algunavez principiantes. Preguntame, bien con un comentario en este mismo post, o escribiendo a mi email  fmaocho@gmail  las dudas que se le presenten.

Saludos y suerte

Félix Maocho

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12 junio 2014 - Posted by | Robotica | , ,

2 comentarios »

  1. Pero hombre esto o mas bien cosas de hoy y no hechas con C, se lo pone la policia a asesinos, para averiguar donde enterro a la victima, y resulta que da positivo, se gastan millones de euros en desenterrar, y nada, el tio se rie de la maquinita… mas vale que no estos experimentos porque luego dice que llega la “desmotivacion por la tecnologia” a los jovenes y con cosas asi no es para menos … hay que poner cosas ya que no es posible que su manufactura haga ganar un monton de dinero al que las consiga, que seria lo ideal, al menos que no desmotiven y logre que la gente, los chaval, pase de estas cosas y las aborrezca

    Comentario por Garepubaro | 12 junio 2014 | Responder

    • Seria de agradecer que te esforzaras un poco más en la redacción. Frases como “Pero hombre esto o mas bien cosas de hoy y no hechas con C,”, ” hay que poner cosas ya que no es posible que su manufactura haga ganar un monton de dinero al que las consiga”. No llego a entender que tesis sustentas, ¿Qué las “maquinas de la verdad” son una tontería? ¿Que hay que programarlas en C?. Claro está. si no se si preguntas o das una opinión y tampoco queda clara tu posición al respecto, no se bien como contestar. Aunque supongo que será contraria a la tecnología, pero eso lo se por otras de tus intervenciones, no por que se deduzcan de esta.

      Gracias por intervenir. A pesar de todo, tu intención enriquece el post.

      Comentario por felixmaocho | 13 junio 2014 | Responder


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: