Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - @synthesize

#136
http://foro.elhacker.net/electronica/arduino_encender_y_apagar_led-t295171.0.html

Como contiene código en C, posteo el enlace... ^^ A ver que opinan.
#137
Electrónica / Arduino: Encender y apagar Led
31 Mayo 2010, 03:51 AM
He creado un pequeño proyecto para encender y apagar un led conectado a Arduino, a través de un ejecutable escrito en C bajo GNU/Linux.

Códigos;

Archivo para GNU/Linux;

#include <stdio.h>
#include <string.h>

char ruta[13];

FILE *fp;

int pedirNum();
void abrir();

int main(void)
{
int op, var;
strncpy(ruta, "/dev/ttyUSB0", 13);

if ((fp=fopen(ruta, "a"))==NULL)
{
fprintf(stdout, "No se puede abrir el archivo\n");
return 0;
}

fcloseall();

do
{
fprintf(stdout, "Introduce valor (0 para salir)\n");
var =pedirNum();
if (var==0)
{
abrir(); putc(0, fp); fclose(fp);
break;
}

else
{
switch(var)
{
case 1: abrir(); putc(1, fp); fclose(fp); break;
case 2: abrir(); putc(2, fp); fclose(fp); break;
case 3: abrir(); putc(3, fp); fclose(fp); break;
}
}
} while (1);

return 0;
}

int pedirNum()
{
int valor;
do
{
scanf("%d", &valor);
} while (valor<0 || valor>3);
return valor;
}

void abrir()
{
if ((fp=fopen(ruta, "w"))==NULL)
{
fprintf(stdout, "Imposible abrir el archivo\n");
}
}


Archivo para Arduino;

int var;
int ledPin =13;

void setup()
{
 Serial.begin(9600);
 pinMode (ledPin, OUTPUT);
 var =0;
}

void loop()
{
 if (Serial.available() >0)
 {
   var =Serial.read();
   
   outtext(var);
   
   if (var==0)
   {
     Serial.print("End.\n");
     offLeds();
   }
   
   if (var==1)
   {
     digitalWrite(ledPin, HIGH);
   }
   
   if (var==2)
   {
     digitalWrite(ledPin, LOW);
   }
   
   if (var==3)
   {
     parpadea();
   }
 }
}

void outtext (int valor)
{
 if (valor==1)
   Serial.println("State 1 - ON");
 if (valor==2)
   Serial.println("State 2 - OFF");
 if (valor==3)
   Serial.println("State 3 - BLINK");
}

void parpadea()
{
 int cont;
 for (cont=0;cont<10;cont++)
 {
   digitalWrite(ledPin, HIGH);
   delay(250);
   digitalWrite(ledPin, LOW);
   delay(250);
 }
}

void offLeds()
{
 digitalWrite(ledPin, LOW);
}





Versión actual: 0.2
* Añadida función Blink
* Añadido State 0; END.

Out Serial;

CitarState 1 - ON

State 2 - OFF

State 3 - BLINK

End.





Como podéis ver, el Led está conectado a la salida digital 13, la cual incluye resistencia propia.

Vídeo de funcionamiento; (v. 0.1)
[youtube=425,350]
http://www.youtube.com/watch?v=AqlVs2kUcyg[/youtube]




Quién quiera usar el código en otros sistemas operativos, solo tiene que cambiar la ruta del archivo de Arduino. Creo que no habría que cambiar mas, pues he usado funciones estándar ^^.

Si alguien quiere mejorar el code, o solamente opinar, ya sabéis, para eso estamos ^^.
#138
Electrónica / Arduino: Cronómetro
31 Mayo 2010, 02:34 AM

int seg =0;
int mix =0;
int hor =0;
int b;

void setup()
{
  Serial.begin(115200);
 
  hor =17;  // Actual
  mix =58;
  seg =45;
  b=1000;
}

void loop()
{

  int a =millis();
 
  if (a==b)
  {
    b+=1000;
    seg++;
   
 
    if (seg==60)
    {
      seg =0;
      mix++;
    }
 
    if (mix==60)
    {
      mix =0;
      hor++;
    }
 
    if (hor==23)
    {
      hor =0;
      mix =0;
      seg =0;
    }
    Serial.flush();
    mostrar(hor, mix, seg);
  }
}

void mostrar (int hox, int mixx, int sex)
{
  Serial.print(hox);
  Serial.print(";");
  Serial.print(mixx);
  Serial.print(";");
  Serial.print(sex);
  Serial.print("\n");
}


¿Alguien me ayuda a mejorarlo? XD
#139
Foro Libre / Echo room
30 Mayo 2010, 01:30 AM
[youtube=425,350]http://www.youtube.com/watch?v=vkxXkX6NNL0[/youtube]

Por Chuck que vergüenza... XDDD Si, eso soy yo.
#141
Científicos japoneses anuncian que serán capaces de multiplicar 1.000 veces la capacidad de almacenamiento de un Blu-Ray simplemente con aplicar al DVD tradicional una capa metálica especial. El Blu-Ray parecía el dispositivo idóneo para sustituir al vetusto disco de 4.7 GB pero la guerra no estaba ganada. Cuando llegue al mercado, este super DVD de 25 TB no necesitará nuevos lectores, así que conviene esperar y ver como se desarrollan los acontecimientos antes de jubilar nuestro viejo reproductor.

La ciencia no cesa de asombrarnos a cada momento. Lo mismo crea vida artificial, que obtiene energía de cualquier parte o se lanza a la conquista de las estrellas. En el ámbito de la informática es donde se producen las sorpresas más interesantes, sobre todo porque nos afectan muy directamente en nuestro quehacer diario. Ahora le ha tocado a los sistemas de almacenamiento. Cuando parecía que los DVD estaban muertos, los japoneses nos demuestran con sus últimas investigaciones que el clásico DVD no sólo no está acabado sino que aún le queda mucho por ofrecer. Más incluso que su teórico sucesor, el Blu-Ray.

En nuestro viejo reproductorShin-ichy Ohkoshi, el profesor de química de la Universidad de Tokio que lidera el proyecto, explicó que pintando una capa de un material que es variante del óxido de titanio en el DVD se puede conducir la electricidad o no, dependiendo de la exposición a la luz de este compuesto. De esta manera, se puede ampliar la capacidad del DVD tradicional hasta 1.000 veces la de un Blu-Ray. Estamos hablando de unos ¡25.000 GB!, en un disco que podríamos utilizar desde nuestros viejos reproductores y sin tener que realizar adaptaciones extrañas ni cambios de formato.

Además, Ohkoshi asegura que el óxido de titanio que necesitan para estos Mega DVD cuesta la centésima parte del compuesto de germanio-antimonio-telurio que utilizan los Blu-Ray regrabables e incluso los DVD de ahora. La única pega que cita el científico es que el proyecto se encuentra en fase muy temprana y al producto final le costará unos años llegar al circuito comercial. De todos modos, se encuentran en conversaciones con empresas del ramo para producir estos nuevos DVD, una vez que hayan concluido las pruebas pertinentes para poder darle el visto bueno al producto.

No todo son ventajas. Los sistemas ópticos son delicados y se rayan con mirarlos.

Citar fuente de la noticia

LEER REGLAS : https://foro.elhacker.net/noticias/la_info_hay_que_documentarla_leer_antes_de_postear-t30203.0.html
#142
Foro Libre / CF de Win Vista
28 Mayo 2010, 23:03 PM


Sé que es viejo, pero me he reído bastante XD
#143
Foro Libre / Supertramp
28 Mayo 2010, 15:34 PM
Para los amantes de la buena música, como to (ESto va a causar polémica XDD recuerden que es broma, cada cual a sus gustos)

http://www.palaciodedeportes.com/eventos_detalle.php?id=274




El grupo norteamericano ha confirmado su 70-10 TOUR, celebrando los cuarenta años desde que salió su primer álbum "Supertramp" en 1970.

Junto a Rick Davies (fundador, cantante y teclista) estarán los legendarios miembros de Supertramp John Anthony Helliwell (saxos y flautas) y Bob Siebenberg (batería). Otros veteranos miembros del grupo en pasadas giras como Jesse Siebenberg (voces guitarras y percusión), Cliff Hugo (bajo), Carl Verheyen (guitarras) y Lee Thornburg (vientos) completarán el grupo.

Rick Davies, junto a Michael Brian Duncan (diseñador del escenario y de luces) está desarrollando toda una nueva producción escénica que conseguirá que el público tenga una experiencia total de Supertramp, toda una maravilla para oídos y ojos. En estos momentos, se están desarrollando los ensayos en Nueva York y durante las más de dos horas y media de concierto, el grupo tocará clásicos de sus 40 años de carrera, temas como Bloody Well Right, Dreamer, From Now On, Goodbye Stranger, The Logical Song, Rudy y muchos muchos más.

40 años de Supertramp nos esperan este 15 de septiembre en nuestro escenario.
#144
Me sale el siguiente error al tratar de editar mi post "Librería" en el subforo de C/C++. También me ha salido al intentar responder con un mensaje nuevo.


CitarForbidden

You don't have permission to access /post2.html;start=0;board=49 on this server.
Apache Server at foro.elhacker.net Port 80
#145
Foro Libre / Juicio final cuanto antes
26 Mayo 2010, 22:03 PM
www.juiciofinalcuantoantes.com


Wyoming y su equipo vuelven a triunfar xD




Jódete Buenafuente, esto si es humor inteligente. xDDDDDDDDDDDDDD (Es broma, los 2 me caen bien ^^)




POR QUÉ FIRMAR

La cadena COPE ha puesto en marcha una campaña de recogida de firmas para pedir el adelanto de las elecciones. Según la cadena de los obispos es la única manera de salir de la crisis económica.El Intermedio cree que adelantar las elecciones es solo poner un parche.

Por eso proponemos una solución definitiva a todos nuestros problemas: adelantar el JUICIO FINAL.Si los obispos piden a la sociedad española que vote por un adelanto electoral, nosotros les pedimos a los obispos que adelanten el JUICIO FINAL.En esta situación de emergencia la Iglesia tiene que ser valiente. Necesitamos que la Conferencia Episcopal se ponga a trabajar.

Necesitamos que llegue el juicio que la Iglesia siempre nos ha prometido. Si la lentitud de la justicia española es desesperante, lo de la justicia divina ya no tiene nombre. Necesitamos que Dios se moje, que dé la cara, que decida por fin quiénes son los malos y quiénes los buenos. ¿Quién tiene razón? ¿Los curas de izquierdas o los de derechas? ¿Los curas que votan al PP, o los curas que votan al PSOE?

¡Dios, ten misericordia y danos esa pista!¡Participa en nuestra iniciativa! Tú decides qué es más importante: que se adelanten las elecciones como dice la COPE, o el JUICIO FINAL, como dice El Intermedio.El Intermedio le echa un pulso a la COPE. ¿Por qué? Porque nos gusta perder pulsos.

^^
#146
Foro Libre / Follonero
25 Mayo 2010, 04:50 AM
Me aburro, así que dedico el post al follonero, me encanta ^^

[youtube=425,350]http://www.youtube.com/watch?v=gBTQTwBIChA&feature=related[/youtube]

[youtube=425,350]http://www.youtube.com/watch?v=97v5TtnDY7w&feature=related[/youtube]

[youtube=425,350]http://www.youtube.com/watch?v=-qve5N1NwEg&feature=related[/youtube]

[youtube=425,350]http://www.youtube.com/watch?v=Bbaor3Joc1w&feature=related[/youtube]

[youtube=425,350]http://www.youtube.com/watch?v=quKqM66fMOU&feature=related[/youtube]
#147
Electrónica / Arduino y sensor
23 Mayo 2010, 00:39 AM
Me explico: Estoy aprendiendo a programar un Arduino:http://www.arduino.cc/es/ Y mi problema es el siguiente:

Intento hacer un sensor de movimiento, reciclado, con esto: http://www.gutefrage.net/media/fragen/bilder/brise-sense-and-spray/0_big.jpg
(Un Brise Sensor)

El circuito del sensor envía una señal a un motor, el cual se mueve (Activando así el Brise).

Lo que intento hacer es conectar los cables del sensor al arduino, y si este detecta movimiento, que haga sonar un speaker como alarma (Eso ya lo tengo programado)

He probado con interrupciones, y me han dicho de probar con digitalRead()

¿Alguna idea?
#148
Programación C/C++ / Librería
23 Mayo 2010, 00:33 AM
ATS.H

ATS es un proyecto de librería para el lenguaje de programación C. ATS significa "Alternative to Standard" (Alternativa al estándar) y tiene como propósito recoger algunas funciones útiles y sencillas, pero pesadas a la hora de ser escritas.




Colaboradores:


  • Creador: GNU_López (Sergio López)
  • Colaborador: nicolas_cof
  • Colaborador: Didacso
  • Colaborador: eagle17
  • ...

Discursiones sobre Funciones y procedimientos:

atsInNum() http://foro.elhacker.net/programacion_cc/atsinnum-t295749.0.html

/**********************************************/

Si quieres colaborar, envíame un MP y te añadiré a la lista.




¿Qué va a ser ats?

Mi idea es crear un archivo de cabecera libre para el lenguaje de programación C, que ofrezca varias funciones nuevas, y la sustitución de algunas estándar para poder darlas un mayor uso. Cualquier persona puede colaborar, tanto aportando ideas, como aportando código, corrigiendo fallos, escribiendo archivos de ayuda, etc.

¿Qué funciones podré usar?

(Esta explicación va a variar dependiendo del desarrollo de la cabecera) Lo ideal es ofrecer una lista de funciones matemáticas, y de entrada y salida de datos.




Página en SourceForge:

http://atshead.sourceforge.net/

Prototipo:

http://sourceforge.net/projects/atshead/files/prototype.c/download




Especificaciones de Diseño: (Escribiendo...)

En este documento es especifica la forma en la que se debe escribir funciones
para la cabecera ats. Esto es necesario para que no se mezclen todos los estilos
de programación de todos los colaboradores que escriban código; De esta forma,
se mantendrá un orden interno en cuanto a la estructura.

1. Comentarios

* Se debe especificar en cada prototipo de función, con un comentario, la utilidad
 de la misma. En caso de ser una función muy grande/usada dentro de la cabecera,
 el comentario debe especificar también la forma de usar los parámetros, el trabajo
 interno, y los valores de retorno.

* Es aconsejable también comentar en las variables muy usadas o importante, explicado
 para que las usamos.

* Es conveniente también que los comentarios estén en inglés, pues es el idioma mas usado
 en la programación, aunque, no estaría de mas que estuviera tanto en Castellano como en Inglés,
 siendo aśi de fácil lectura para un grupo mas grande de usuarios.

2. Identificadores

* Es conveniente usar identificadores que no puedan ser usados por otras librerías, por
 ello es recomendable seguir este modelo:

- Ejemplo de prototipo de función:

       int ats_pedir_enteros(int a, int b)


 Nótese el uso de 'ats_' al principio, y que el nombre de la función describe también el
 funcionamiento de la misma.

3. Funciones

* Todas las funciones usadas deben ser estándar, así como tienen optimizadas para ser usadas
 en la mayor cantidad de compiladores/sistemas. Es necesario no usar funciones como system
 o fflush.

4. Diseño

* La cabecera tendrá la siguiente forma:

Inicio
|
|_ Cabeceras estándar (#include...)
|_ Definidos (#define...)
|
|
|_ Preámbulo
|
|
|_ Prototipos de función
|_ Comentarios de funciones importantes
|
|
|_ Funciones
|
|
|_ Referencia para programadores (Explicación sencilla sobre el uso de ats)
|
|_ EOF

5. Algunos consejos

* Es conveniente no usar, bajo ningún concepto, bucles infinitos o descontrolados,
 así como intentar optimizar el código al máximo,de tal forma que intentemos ahorrar
 código y mejorar la funcionalidad. Así mismo, es importante intentar no usar recursividad,
 identificadores de variables repetidos, o funciones con semejante funcionamiento.

 Escrito y corregido por: Sergio L, Nicolás.




Proyecto


Preámbulo de la cabecera:

Citar
/*
* ATS.h
* Alternative to Standard Head
*
* ats es una cabecera libre (Bajo licencia GPLv3)
* la cual provee varias funciones. La idea
* principal, es que estas funciones sean matemáticas
*  y de entrada/salida, bajo plataformas
* GNU/Linux.
*
* Se puede seguir su desarrollo en elhacker.net
* y en sourceforge.net.
*
* Creada inicialmente por: Sergio López
*
* sergiolopezsanz@hotmail.es
*
* http://atshead.sourceforge.net/
*
* 24 de Mayo, 2010
*
*/




El contenido del post puede variar, acorde al desarrollo de la cabecera ATS. Los archivos de ATS están bajo licencia pública GPLv3.
#149
Foro Libre / Tu pequeño secreto
19 Mayo 2010, 03:28 AM
Llevo unos días meditando, y he descubierto que cada persona, tiene su propio secreto para ser, o intentar ser, feliz.

Tras pensar eso, me animé a pensar en mi Secreto, y lo acabo de encontrar. ¿Queréis compartir vuestros secretos con los demás y así ser felicidad=+1?

El mío es "Haz las cosas porque puedes, no porque quieres"

Lo he descubierto en el metro de Madrid, acostumbro a ir por las escaleras tradicionales en vez de las mecánicas, y me preguntaron que por qué iba por esas.. Y contesté... "Porque puedo" Y, sin querer, empecé a sonreír.
#150
GNU/Linux / CentOS 5.5
16 Mayo 2010, 06:49 AM
¿Alguien ha probado la 5.5? ¿Qué trae nuevo o mejorado? Yo estoy descargando para probar, la verdad, me quedé encantado con la 5.3, la 5.4 no la usé...
#151
Foro Libre / Web ridícula
16 Mayo 2010, 05:59 AM
Me acaban de pasar esto...
Es mi imaginación, ¿O parece que lo a escrito un niño de 5 años?  :silbar:
#152
Bueno, como ya sabéis, escribo, siempre que puedo, un pequeño tutorial para los que se inician en el mundo de la programación C. Yo hace pocos meses que me inicié, así que no soy precisamente el indicado para instruir a otros novatos.. Así que, quién quiera, que opine sobre lo que llevo escrito y queda por escribir, que me digan fallos, sugerencias... Lo que sea, yo y todos los lectores del post estaremos agradecidos  :P

Comentad aquí y no en el post del tutorial, please, que me rompéis el hilo ^^




Post: http://foro.elhacker.net/programacion_cc/tutorial_c-t291084.0.html




Temario actual:

   1. Intro ()
   2. Teoría programas y pseudocódigo ()
   3. Inicios con Arduino ()
   4. Compilando nuestro 1º programa ()
   5. Sintaxis básica de C ()
   6. stdio.h y PWM ()
   7. Variables y tipos de datos (Escribiendo...)


#153
Vale mas una imagen...



Tengo el TC instalando en una máquina virtual Windows XP SP3. Y para mas info, solo intentaba compilar un Hi world, con la librería stdio.h.
#154
Diseño Gráfico / Nuevas ^^
5 Mayo 2010, 07:22 AM
#155
Foro Libre / Cambiando perfil
4 Mayo 2010, 02:26 AM
¿No os aburre tener siempre el mismo perfil? XD Yo estoy de reformas ^^
#156
Foro Libre / Libros de ingeniería
2 Mayo 2010, 23:17 PM
Estoy intentando reunir libros que se dan el la carrera de ingeniería informática, mas que nada, por que todavía me quedan algunos años para poder entrar y quiero empezar por mi parte, si alguien es tan amable de recomendarme los lirbos que usan o similar, estaría eternamente agradecido ^^

Pd, ahora mismo estoy leyendo "Sistemas Operativos, diseño e implementación"
#157
Foro Libre / Catedral Justo Gallego
1 Mayo 2010, 22:21 PM
Por si a alguien le apetece la catedral de Justo Gallego.. (Soy completamente anarcoateo, pero hay que reconocer que está bastante bien la catedral, y el esfuerzo sobrehumano de Justo gallego.



http://es.wikipedia.org/wiki/Catedral_de_Justo
[youtube=425,350]
http://www.youtube.com/watch?v=GnQCtZinvF8&feature=related[/youtube]

;-)

Pd. La catedral está en mi pueblo  :xD
#158
Foro Libre / Tenía necesidad de postearlo
29 Abril 2010, 02:36 AM
[youtube=425,350]http://www.youtube.com/watch?v=7t96m2ynKw0[/youtube]

;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
#159
Programación C/C++ / Tutorial C
20 Abril 2010, 04:07 AM
Bueno, me animaron a hacer un mini-tutorial sobre el lenguaje de programación C.  ;-)

Primero decir, está pensado para novatos en programación pero con algo de conocimientos informáticos, tanto Windows (Al que me gusta llamar winnoobs o windrugs) y tanto GNU/Linux,

También voy a trabajar en 2 plataformas, PC y Arduino. Intentaré poner ejemplos con código, y explicar todo lo mejor posible.

Tened en cuenta de que yo aprendo C poco a poco, pondré cosas adecuadas a mi nivel, claro.




Índice de temas

   1. Intro ()
   2. Teoría programas y pseudocódigo ()
   3. Inicios con Arduino ()
   4. Compilando nuestro 1º programa ()
   5. Sintaxis básica de C ()
   6. stdio.h y PWM ()
   7. Variables y tipos de datos ()
   8. Funciones y programas modulares ()
   9. Estructuras de control: if - else ()

Software

   Compiladores

       GCC: http://gcc.gnu.org/
       Dev C++: http://www.bloodshed.net/devcpp.html
       Borland C++: https://downloads.embarcadero.com/free/c_builder (NO aconsejo su uso, pues no es Libre)
       Arduino: http://www.arduino.cc/en/Main/Software (Solo para Hardware Arduino)

   Editores texto

       Gedit: http://projects.gnome.org/gedit/
       Notepad++: http://notepad-plus.sourceforge.net/es/site.htm

   Sistemas

       GNewSense: http://www.gnewsense.org/ (Basado en Ubuntu, 100% Libre)
       CentOS: http://www.centos.org/modules/tinycontent/index.php?id=15 (Basado en Red Hat)

   IDE's

       Geany: http://www.geany.org/
       Codeblocks: http://www.codeblocks.org/


1. Intro

C es un lenguaje de programación, orientado a la implementación de Sistemas operativos, creado en el año 1972. Es un lenguaje de Nivel medio, aunque muchas de las características que posee es el trabajo a Bajo Nivel.




Propiedades

   * Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
   * Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).
   * Un sistema de tipos que impide operaciones sin sentido.
   * Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.
   * Acceso a memoria de bajo nivel mediante el uso de punteros.
   * Interrupciones al procesador con uniones.
   * Un conjunto reducido de palabras clave.
   * Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
   * Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.
   * Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").

Carencias


   * Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.
   * Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C.
   * Encapsulación.
   * Funciones anidadas, aunque GCC tiene esta característica como extensión.
   * Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación genérica.
   * Soporte nativo para programación multihilo y redes de computadores.

Fuente: WikiPedia




Es un lenguaje portable, pues puede ser compilado tango en GNU/Linux, como en Windows y en Mac, además de ser bastante adecuado para desarrollo de aplicaciones para plataformas como Arduino.




Compiladores

Compilador para GNU/Linux: GCC (Recomendable usar con Geany)
Compilador Windows DevC, Borland
Compilador Mac: (Por favor, envíenme el nombre del algún buen compilador)
Compilador Arduino: Arduino




Hi World

Hi world es el primer programa que se suele crear el empezar a programar. A continuación voy a exponer 2 ejemplos, uno clásico para GCC, otro para Borland y otro para Arduino. La explicación entrará a partir de la 2ª entrega del tutorial, pues esto solo es para familiarizarse con el código.

GCC:


#include <stdio.h>

int main()
{
       printf("Hola Mundo\n");
       return 0;
}


Borland:


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
       printf("Hola mundo\n");
       system("pause");
       return 0;
}



Arduino;

En esta plataforma el Hola mundo típico no es un mensaje, si no hacer parpadear un Led. Por lo tanto, conectamos un Led en el puerto digital 13 de nuestro Arduino (Duemilanove) (Recuerden, polo positivo) Este puerto cuenta con una resistencia propia, por lo que no fundiremos el Led.



int ledPin =  13;

void setup()  
{                
 pinMode(ledPin, OUTPUT);    
}

void loop()                    
{
 digitalWrite(ledPin, HIGH);
 delay(1000);                  
 digitalWrite(ledPin, LOW);    
 delay(1000);              
}


Fuente: Arduino




Las explicaciones de la sintaxis y el funcionamiento, en la siguiente entrega, saludos.




Referencias:

GCC: http://es.wikipedia.org/wiki/Gcc
Borland: http://es.wikipedia.org/wiki/C%2B%2BBuilder
Arduino: http://es.wikipedia.org/wiki/Arduino





2. Teoría programas y pseudocódigo

Ya vimos una pequeña introducción al Lenguaje C, ahora toca empezar con la teoría. En este capítulo voy a hacer una breve introducción al Pseudocódigo (Vital) y a la teoría de los programas, osea, el modo que tienen de funcionar de forma estándar.




Pseudocódigo


El pseudo (Lo voy a abreviar así a partir de ahora) es una forma de describir un algoritmo, con lenguaje natural (Osea, explicar, por ejemplo, el funcionamiento de un programa, de una forma exacta, con una descripción de todo lo que vaya a hacer, de una forma que cualquier otra persona lo pueda entender)

No existe una referencia exacta del pseudo, pues cada programador acaba usando el "lenguaje" que mas le conviene.

Un ejemplo aplicado a la vida real es:

Inicio
    enciendo el PC
    carga el sistema operativo
    introduzco mis datos de inicio de sesión
         si la contraseña en verdadera, entro al sistema
         si la contraseña es falsa, vuelve a pedir datos
    abro un programa
Fin

* Los algoritmos (Aplicados al pseudo) deben de ser claros y concisos, y deben ser finitos.

Existen varios tipos de pseudo, varias formas de clasificarlo, eso lo explicaré en el siguiente post.

¿Para qué sirve el pseudo?

Normalmente, antes de escribir un buen programa, suele ser necesario plantearlo antes sobre un cuaderno, escribiéndolo en pseudo, así a la hora de escribir el programa en el PC, te será mas sencillo, lo tendrás todo mas organizado y probablemente será mas eficiente.




Programas

A la hora de escribir un programa seguimos unas pautas, y es necesario mencionar lo más básico, la E/S (Entrada/Salida)

Cuando ejecutamos un programa, queremos obtener, generalmente, un resultado a partir d euna entrada.

Por ejemplo, queremos obtener el resultado de una multiplicación. Tenemos datos de entrada, por ejemplo, 5 y 5.

Entrada = 5, 5

Los queremos procesar, eso es la multiplicación

Proceso= *

Resultado = 5 * 5

Ya tenemos hecha la operación, los datos de salida son iguales al procesamiento de los datos de entrada.

Resultado=5*5

salida = procesamiento de la entrada




Esto lo vamos a usar en el siguiente capítulo, por ahora, es una buena base para continuar.




3. Inicios con Arduino


Una buena forma de practicar el lenguaje C es con Arduino, pero antes debemos saber qué es, para qué se usa. También decir que conseguirlo puede ser algo complicado, pero no imposible.

¿Qué es Arduino?

(WikiPedia) Arduino es una plataforma de hardware libre basada en una sencilla placa de entradas y salidas simple y un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring. Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador (por ejemplo: Macromedia Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.

Las plataformas Arduino están basadas en los microcontroladores Atmega168, Atmega328, Atmega1280, ATmega8 y otros similares, chips sencillos y de bajo coste que permiten el desarrollo de múltiples diseños.

Al ser open-hardware, tanto su diseño como su distribución es libre. Es decir, puede utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia.




Arduino es programable en C, gracias al compilador que se puede descargar desde la página oficial. La sintaxis del lenguaje cambia un poco, pero se usa de igual forma que un ordenador.

¿Para qué se usa?

En mi caso, para aprender algo de electrónica y aplicar la programación. En cuanto a la placa, el único límite es tu capacidad de programación: Puedes pasar de iluminar Led's a controlar robots autonómicos, por eso veo interesante integrar el uso de Arduino al manual de C.




Página Arduino: http://www.arduino.cc/es/
Referencia lenguaje: http://arduino.cc/en/Reference/Extended
Descarga compilador (Multiplataforma): http://arduino.cc/en/Main/Software




Ejecutando el programa BLINK en mi Arduino


(Código fuente en post 5)


[youtube=425,350]http://www.youtube.com/watch?v=qk8DnRzEnx0[/youtube]

4. Compilando nuestro 1º programa

Una vez sabemos algo de pseudocódigo (Poco, muy poco, pero lo justo para aplicarlo a Hi worlds) llega la hora de compilar nuestros primero programas. Para ello es importante saber como el el proceso de creación de software, como es la compilación y como es la ejecución. Así mismo, debemos de ser capaces de observar nuestro código (Para lo cual es esencial que esté bien presentable), dejar comentarios para tratar de ayudar a cualquier otro programador, o para dejarnos notas a nosotros mismos, y de corregir los errores que nos muestre el compilador o que detectemos nosotros mismos.

Para esta primera práctica voy a usar el compilador libre de GNU, GCC, bajo el Sistema Operativo GNU/Linux Ubuntu 9.10.




   A. Análisis de requisitos

Es importante saber que a la hora de programar no solo es importante el Ordenador, si no que antes debemos plantear lo que queremos, para tenerlo claro a la hora de escribir nuestros programas. Realmente, en programas pequeños como el que vamos a hacer aquí no es necesario pues no son complejos, pero a la hora de hacer programas mas grandes con mas funciones, es aconsejable plantear todo en un folio, y tener las ideas bien claras.

Como 1º ejemplo, vamos a hacer el programa Hi World (Hola mundo), pues es lo primero que se suele hacer al aprender cualquier lenguaje de programación.

El pseudocódigo de este es bastante sencillo, teniendo en cuenta de que debemos tener siempre un principio, un fin, y debe de ser corto y conciso.


Inicio
  Declaro librerías
  Declaro función principal
  Imprimo mensaje
  Retorno salida
Fin.


Eso sería un pseudocódigo (Bastante exagerado) de un Hi world. Pero normalmente, se suele escribir con la misma sintaxis que usa un lenguaje de programación, para facilitar su lectura, así que:


Inicio
  Declaro librerías
  Función principal()
  {
     Imprimo mensaje;
     Retorno salida;
  }
Fin.


Así es mas entendible a ojos de cualquier programador, sobretodo cuando el pseudo se complica. La sintaxis de C estará expuesta en alguno de los siguientes post.

   B. Escritura del programa

Trabajando con GNU/Linux Ubuntu, vamos a usar el editor de texto plano Gedit (http://projects.gnome.org/gedit/)

Imagen: http://i39.tinypic.com/qq8q4x.png

Vamos a dividir el programa en 2 Partes: Declaración de librerías y función principal (Evidentemente a medida que que nuestros programas crezcan, las partes crecerán)

Debemos indicar al compilador (En nuestro caso GCC) las librerías donde están declaradas las funciones que vamos a usar. En nuestro caso vamos a usar la llamada stdio.h (Standard In/Out, E/S Estándar) con la cual podremos usar una función llamada printf, la cual se usa para imprimir datos en la pantalla.

Otro dato, las lineas de texto de este estilo " //comentario " " /* comentario de varias lineas */" como bien indico son comentarios, no son procesados por el compilador, y son necesarios para comentar distintas partes del programa.



#include <stdio.h> //Declaramos las librerías necesarias

int main() //Función principal del programa
{
   printf("Hola mundo\n"); //Imprimo el mensaje
   return 0; // Retorno sin errores
}



Como veis, es parecido al pseudocódigo. En el siguiente post empezaré a explicar la sintaxis básica de C, por ahora nos basta con saber como escribir y compilar programas. Una vez escrito esto en gedit, procedemos a guardar el archivo como "algo.c" Evidentemente, lo podéis dar el nombre que queráis, siempre que la extensión sea .c (o .cpp para C++)

Imagen: http://i44.tinypic.com/14v4pe9.png

   C. Compilación

Una vez hemos guardado el código de nuestro programa, llega la hora de ejecutarlo. Para esto necesitamos el ya mencionado GCC. En primer lugar, debemos abrir un terminal. Una vez abierto, debemos dirigirnos al directorio donde esté guardado nuestro código (Por ejemplo, en caso de estar guardado en /home/pepe/Escritorio , introducimos la orden cd /home/pepe/Escritorio).

Una vez estamos (Podemos comprobar el directorio activo con la orden "pwd") debemos invocar a GCC, pasándole a la vez el nombre de nuestro archivo con el código, para que este sea compilado. La forma de hacerlo es bastante sencilla, en nuestro caso: gcc algo.c (Si le has puesto otro nombre, evidentemente, escribe el nombre que le has puesto)

Imagen: http://i40.tinypic.com/28tg7l3.png

Como podemos ver, GCC no nos ha devuelto ningún error. En caso de hacerlo, nos devolvería algo parecido a esto (Dependiendo del error)

Imagen: http://i39.tinypic.com/vmxhlx.png

Como el compilador indica, tenemos un fallo en la función principal (main), pues se nos olvido poner ; justo antes de return. Esto ya lo estudiaremos en la parte de sintaxis, por ahora solo quiero mostrar la forma de los errores.

Una vez tenemos compilador el código sin errores, GCC nos genera automáticamente un archivo "a.out" en el mismo directorio donde tenemos el código. Solo debemos invocar el archivo desde la consola, con el comando " ./a.out " (En el caso de que se encuentre en otro directorio, basta con ./directorio/a.out)

Como vemos, nos muestra la impresión que hicimos en nuestro programa:

Imagen: http://i43.tinypic.com/k51v5y.png




Ya hemos creado y compilado nuestro primer programa, así mismo, sabemos que forma tienen los mensaje de error al compilar códigos incorrectos bajo GCC. El procedimiento es muy similar en otros compiladores y en otros sistemas, una de las razones por las que C es tan portable.

En el próximo post, sintaxis básica de C.


5. Sintaxis básica de C

Ya conocemos la mecánica esencial de como compilar un programa sencillo. Ahora debemos ser capaces de entender línea a línea lo que hace el programa.




Vamos a analizar y explicar, línea a línea un ejemplo de Hi world en C, y un ejemplo de Blink para Arduino.

   C:

#include <stdio.h> //Declaramos las librerías necesarias

int main() //Función principal del programa
{
   printf("Hola mundo\n"); //Imprimo el mensaje
   return 0; // Retorno sin errores
}



Estructura básica de un programa:

1 Declaración de librerías y constantes
2 Prototipos de función (Lo explicaré mas adelante)
3 Función principal del programa
4 Funciones o procedimientos (Lo explicaré mas adelante)
Librería:(Wiki) En ciencias de la computación, una biblioteca (o librería) es un conjunto de subprogramas utilizados para desarrollar software. Las bibliotecas contienen código y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de éstos.

La librería que usamos en nuestro programa, stdio.h, nos proporciona funciones ÉStandar de entrada y salida de datos.

int main: Es la función principal de nuestro programa. Los programas siempre tienen una función como mínimo, que esta. Al empezar la ejecución del programa, se ejecutarán todo lo que esté dentro de ella.

{ y } : Entre corchetes va el código dentro de las funciones, es importante mantenerlo semrpe alineado para mantener una buena presentación

printf("...");: printf es una rutina declarada dentro de stdio.h, que se encarga de mostrar una cadena con formato a través de la pantalla. la cadena se define entre (" y ").

; (punto y coma): se usa para indicar que se ha terminado de usar una función (por ejemplo, printf("Hola mundo"); )

El \n que está dentro de printf, indica que hacemos un salto de línea. Si pusiéramos "\n\n",  hacemos 2 saltos de línea.

Con esto, ya conocemos la forma básica de estructurar nuestros pequeños programas. Como he visto que muchos novatos (Entre los que me incluyo por ahora) no saben poner bien el código, voy a poner algunos consejos sobre como hacerlo mas entendible a los ojos de otros programadores.

Estructura: Es importante organizar los elementos en una forma jerárquica, siendo las librerías y constantes lo mas importante, por lo cual, lo primero en nuestro código.


#include <stdio.h>
#define MAX 1000


(#define lo expondré mas adelante)

Después viene el resto del programa, tanto prototipado de funciones, como la función principal y los procedimientos.



int protitipo(int a, b);

int main(void)
{
   programa();
}


Los corchetes, es recomendable mantenerlos alineados, para agrupar bien las funciones dentro de otras funciones o procedimientos. Por ejemplo;


int main(void)
{
   funcion()
   {
        otras_funciones()
   }
}


Una de las cosas mas importantes es comentar el código, tanto para recordarnos a nosotros mismos lo que hace cierto procedimiento, o como para indicar errores, u otros datos a otros programadores.


int main()
{
/* Esto es
un comentario
de varias
lineas */
   printf("Hola"); // Esto muestra por pantalla el mensaje "Hola"
   return 0;
}


Como vemos, hay 2 tipos de comentarios:

// Comentario de 1 sola línea

/* Comentario de
varias lineas */


   Arduino

El formato de C para Arduino es algo distinto. No tenemos la función principal (main) ni tenemos que declarar (Por ahora) librerías. Veamos el ejemplo;



/* Arduino
Código fuente del programa Blink
*/

int ledPin =  13;    // LED conectado al puerto 13

void setup()  
{                
 pinMode(ledPin, OUTPUT);    
}

void loop()                    
{
 digitalWrite(ledPin, HIGH);  
 delay(1000);                
 digitalWrite(ledPin, LOW);  
 delay(1000);              
}


Como vemos tenemos 2 funciones distintas, setup() y loop(). También tenemos una declaración antes que setup, en la cual, declaramos el puerto que vamos a usar. En nuestro caso, el 13, el cual incluye una resistencia propia, así no tendremos que añadir una al circuito. int, tanto en C para Arduino como en PC, significa que es Entero. Esto lo estudiaremos mas adelante. ledPin es el nombre de la variable (También estudiaremos mas adelante).

Dentro del setup, declaramos los modos para los pines, como los vamos a inicializar. loop es el programa que se ejecutará, tras declarar todo, y en el va el código que deseemos. En nuestro caso diferenciamos 2 funciones distintas, delay y digitalWrite. La función delay, valida también en C estándar, se encarga de "esperar" el tiempo que la indiques dentro de los paréntesis. En nuestro caso, 1 segundo. digitalWrite se encarga de asignar el valor de salida HIGH o el valor de salida LOW (Lo que entendemos como encendido, apagado).

Como podemos suponer, este programa al estar en ejecución, con un led conectado, con el ánodo en el puerto digital de salida 13, hará que nuestro led parpadeé.




En el próximo capítulo aprenderemos a usar algunas funciones básicas de stdio.h y aprenderemos algo de electrónica con Arduino.

6. stdio.h y PWM

Ya es hora de empezar a crear aplicaciones algo mas avanzadas, pues ya sabemos la estructura principal de un programa básico. Voy a explicar algunas funciones la librería stdio.h de C, y el qué es y como usar PWM en nuestro Arduino.




   stdio.h

stdio.h es una librería estándar de C, compatible tanto en sistemas *x (Unix, GNU/Linux,..) como en Windows. SE encarga de operaciones básicas de Entrada/Salida.

Para definirla en nuestro programa, solo necesitamos lo siguiente;

#include <stdio.h>

Y ya podemos usar las funciones que nos ofrece. A continuación, voy a explicar las básicas de entrada y salida, printf y scanf.

printf: Su función es mostrar una cadena con formato. Por ejemplo,

printf("Esto es una cadena");

scanf: Analiza entrada de datos con formato, y carga el resultado en los argumentos. Esto ahora es un poco difícil de entender, si eres nuev@, pero mas adelante cuando explique variables, lo entenderás mejor.

Ejemplo:

scanf("%d", &num);

Esto se encargaría de guardar un entero dentro de una variable llamada "num". El uso de variables y tipos de datos, se dará en el siguiente post.


Ejemplo de printf y scanf:


#include <stdio.h>

int main(void)
{
   int num_edad =0; //Declaración e inicio de la variable num_edad
   printf("¿Cuántos años tienes?\n"); //Imprimir en pantalla la pregunta
   scanf("%d", &num_edad); //Guardar la respuesta que introduzca el usuario
   printf(" Tienes %d años\n", num_edad); //Imprimir el número guardado en num_edad
   return 0;
}


El resultado al compilar desde GCC es el siguiente:
http://i42.tinypic.com/jk97yc.jpg

   PWM En Arduino

(WikiPedia) La modulación por ancho de pulsos (MAP o PWM, siglas del inglés Pulse-Width Modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una sinusoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.

En Arduino, tenemos varios puertos PWM, veamos y analicemos el siguiente código:



int ledPin = 11;

void setup()  
{                
   pinMode(ledPin, OUTPUT);
}

void loop()                    
{
   analogWrite(ledPin, 10);
   analogWrite(ledPin, 50);
   analogWrite(ledPin, 150);
   analogWrite(ledPin, 250);
}



analogWrite es la función que utilizamos para controlar el PWM. Tiene 2 parámetros, (pin, potencia) en Pin, seleccionamos el pin PWM que vamos a usar, y en potencia, un número de 0 a 255. Evidentemente, 255 será la máxima potencia. En el ejemplo, encenderíamos poco a poco un LED si le tuviéramos conectado al puerto 11. Como problema, esto sería bastante difícil de observar, pues se produciría el cambio a gran velocidad. Mas adelante aprenderemos a manejar mejor el PWM.

7. Variables y tipos de datos

Las variables son estructuras de datos, que, al ser 'Variables', pueden cambiar de contenido a lo largo de la ejecución de un programa. Una variable corresponde a un área reservada en la memoria principal del ordenador.

Estas tienen que ser declaradas antes de usarlas. Para declararlas, necesitamos el Tipo, el identificador y el contenido.

Ejemplo:



int mi_primera_variable =1;



Podemos observar el tipo (int, entero) el identificador (El nombre que usaremos para llamar a la variable) y el contenido, en este caso, 1.

Si declaramos la variable de arriba, y la queremos mostrar en un programa, hacemos lo siguiente:


int mi_primera_variable =1;
printf(" El valor de mi primera variable es: %d", mi_primera_variable);


Observamos que usamos la función printf, para imprimir cadenas formateadas. Tenemos un texto, y aparece '%d'. Con esto indicamos que vamos a imprimir en esa posición un dato, el cual luego llamamos después de ' ", ', a nuestra variable.

Si tenemos varias variables y las queremos imprimir, podemos hacer así:



int variable1 =5;
int variable2 =7;

printf("La variable 1 es: %d, y la variable 2 es %d", variable1, variable2);



Como veis, el %d se sustituye por el contenido de la variable, mostrando este mensaje:

CitarLa variable 1 es: 5, y la variable 2 es 7

Es importante inicializar siempre las variables, para evitar que se comporten de un modo extraño. Inicializar significa que la damos un valor antes de usarlas, generalmente 0. Podemos hacerlo como ya he indicado arriba, o podemos separar la declaración de la incialización.


int variable;  //Esto es la declaración
variable =1;  //Esto es la inicialización

int variable2 =1;  //Declaración e inicialización conjunta



El identificador de la variable (Su nombre, para entendernos) no debe contener caracteres de espacio, ni Ñ's ni símbolos raros. por ejemplo, el identificador 'mi variable' no sería válido. También es importante decir que se distinguen mayúsculas de minúsculas, por lo cual, 'miVariable' no es lo mismo que 'mivariable'... Son 2 variables distintas.

   Tipos de datos:

Cada variable (Y funciones que luego estudiaremos) tienen que tener definido un tipo de datos, para saber el valor que se debe almacenar.

Por ejemplo, int indica que la variable es de tipo Entero (Puede almacenar números enteros, con y sin signo)

Por ejemplo, 1234 es un número entero, adecuado para almacenarlo en una variable tipo int.

También tenemos el tipo char, el cual almacena caracteres (O cadenas como veremos mas adelante).

Para declarar una variable char, hacemos;


char mivariable


Hay muchos mas tipos de datos (Double, float, ...) pero por ahora solo vamos a usar estos 2. Aún así, dejo un enlace para quien quiera ir estudiando por su cuenta (Que es lo mejor que podéis hacer, investigar a la hora que leéis y probáis)

8. Funciones y programas modulares

Divide y vencerás. Es importante recordar ese dicho a la hora de ponernos a programar. ¿Por qué? SI tienes un montón de líneas de código en una función, y hay un error, fallará toda la función. Peor, si agrupas el código en varios trozos y los vas llamando cada vez que los necesites, aparte de mejorar el programa visualmente, será mas fácil detectar los fallos, pues fallará solo 1 función y no las demás (Evidentemente, si tienes fallos en distintas funciones, fallan las distintas funciones...)

Por esto es tan importante ejercer la programación modular. Veamos un ejemplo.

funcionPrincipal
  declaro variable
  variable =leerNum()
  if (variable>5)
       imprimir (La variable es mayor que 5)
  else
       imprimir (La variable es menor que 5)
fin_funcionPrincipal

leerNum
  declaro variable2
  introducir variable2
  devolver variable2 a funcionPrincipal
fin_leerNum


En este pseudocódigo observamos 2 funciones distintas; La principal, que será la 1º en ejecutarse al iniciar el programa, y leerNum, que es una función que hemos definido para leer números.

Cuando queremos usar la función leerNUm, basta con llamarla dentro de nuestro programa. En este caso, asignamos el valor de leerNum a una variable, llama variable. AL ejecutarse leerNUm, esta lee un número introducido por teclado, lo almacena en otra variable (Definida dentro de la función) y luego se la envía a funcionPrincipal. Por lo cual, al hacer variable =leerNum, realmente estamos haciendo el equivalente a variable=variable2.

Esta es una función simple. Ahora un poco de terminología y systanxis:

Si una función retorna algún valor (Como en el caso del ejemplo) esta es llamada simplemente función. En el caso de que no devuelva nada a otra función, esta es llama procedimiento. Veamos un ejemplo con código C.


void mostrarTexto();

int main(void)
{
   mostrarTexto();
   return 0;
}

void mostrarTexto()
{
   printf("Mostrando texto desde otra función\n");
}


Señalo varias cosas: El procedimiento que usamos (mostrarTexto) no es de tipo int. Vara funciones que no devuelven nada, usamos el tipo void.

También hay que explicar el prototipado de funciones. UN prototipo de función, es declarar una función, siempre antes que main, la cual vamos a usar a lo largo del programa. Observar que encima de main aparece el prototipo de la función mostrarTexto.

A las funciones y procedimientos también las podemos llamar con parámetros, pueden ser de varios tipos, etc, pero eso lo estudiaremos mas adelante, por ahora, nos sobra con saber estructurar bien nuestro código.

Para terminar, un ejemplo del pseudocódigo que aparece al principio de este capítulo.


#include <stdio.h>

int pedirNum();  //prototipo de función

int main(void)
{
   int var;  //declaramos variable
   printf("Introduce un número\n");
   var =pedirNum(); //Asignamos el valor de la variable var a la función pedirNum()
   if (var>5)  //Condicional: Se explicará mas adelante
   {
        printf("Var es mayor que 5\n");
   }

   else
   {
        printf("Var es menor que 5\n");
   }
}

int pedirNum()  //función para pedir números
{
   int var2;  //variable para pedirNum
   scanf("%d", &var2);  //introducir datos por teclado
   return var2; //devolvemos el valor de var2 a la función principal
}



Estructuras de control: if - else

A lo largo de la vida, nos hacemos preguntas condicionales. Si se cumple una condición, hacemos una cosa. Si no se cumple, hacemos otra cosa. Por ejemplo, antes de salir a la calle, miramos por la ventana para ver si llueve. Si llueve, salimos a la calle con paraguas. Si no llueve, salimos sin paraguas. Esto es aplicable a la programación, y es uno de los elementos mas usados. Para empezar a comprenderlo, expongamos el algoritmo de la lluvia:



mirar_por_la_ventana
Si (llueve)
    Coger paraguas
Si No
    NO coger paraguas
salir a la calle



Condición: Lluvia.


En caso de cumplirse la condición, esta será cierta.
Ahora toca aplicar esto a un programa, con un ejemplo sencillo. Queremos comparar 2 números, y determinar cual de ellos es el mayor y cual es el menor. Para ello tenemos declaradas 2 variables, numA y numB. Es estas se almacena un número introducido por el usuario. Ahora comprobamos:



if (numA<numB)
{
    printf("%d es menor que %d\n", numA, numB);
}
else
{
    printf("%d es mayor que %d\n", numA, numB);
}




Vemos que la condición se pone entre paréntesis después de if. If sería el 'si' en pseudocódigo, y else, sería 'si no' en pseudocódigo.

También podemos incluir mas sentencias condicionales dentro de otras, incluyendo las sentencias dentro de otras sentencias. Esto se estudiará mas adelante.

Como ultimo detalle:

< menor que
> mayor que
== igual que
!= distinto que
! no


En el próximo capítulo, aprenderemos a usar este tipo de caracteres, necesarios para todos los programas.
#160
Programación C/C++ / Códigos para arduino
15 Abril 2010, 06:31 AM
* REFERENCIA ARDUINO *

Página oficial: http://www.arduino.cc/es/

Wikipedia: http://es.wikipedia.org/wiki/Arduino

Referencia Lenguaje: http://arduino.cc/en/Reference/Extended

** * **

Como me he puesto a estudiar C con este cacharrito, os voy dejando algunos de los códigos con los que practico. Por ahora solo práctico con led's, espero ir avanzando poco a poco.

2ledsdegrade

Citar
int ledPin = 11;
int ledPin1 = 9;
int cont=0;
int x=10;


void setup()  
{                
 pinMode(ledPin, OUTPUT);
 pinMode(ledPin1, OUTPUT);
}

void loop()                    
{
 cont=0;
 while (cont<255)
 {
   analogWrite(ledPin, cont);
   analogWrite(ledPin1, cont);  
   delay(x);
   cont=cont+3;
 }
 cont=255;
 while (cont>0)
 {
   analogWrite(ledPin, cont);
   analogWrite(ledPin1, cont);
   delay(x);
   cont=cont-3;
 }
}

/* Explicación:
* Conectamos los polos positivos de 2 led's a los puertos digitales 11 y 9, y conectamos los 2 negativos * al un puerto negativo. Configuramos los puertos como Salida, y declaramos un contador.
*
* En el primer While, se incrementa la potencia del led (Son puertos PWM) de 0 hasta 255
* (el máximo) y el el segundo While, lo contrario, de 255 a 0. Al ser la estructura Loop, esto se repite
* continuamente hasta que deseemos finalizar la aplicación. */


Enlace: PWM = http://es.wikipedia.org/wiki/PWM

#161
Foro Libre / puta1and1
20 Marzo 2010, 01:08 AM
Viendo la página, que creo recordar creó un usuario de este foro, me encuentro con...




:silbar:
#162
Diseño Gráfico / Galería ON Line
11 Marzo 2010, 05:08 AM
http://stallman.deviantart.com/
Quién quiera ver mis fotos, que se pase por ahí, así no tegno que estar subiendo a mil sitios (Me evito Tuenti, Tinypic,...)

;-)
#163
Diseño Gráfico / Otra sesión ~By Serch~
24 Febrero 2010, 06:00 AM
Bueno, foticos de una sesión. Añadiré descripciones xD  :P

******************** * * *



Imagen del grupo de música que he fundado (Próximamente, colgaré alguna canción y tal xD)



Control de volumen de mi guitarra ^^



Clavijero de mi guitarra...



Foto MUY Bonita de mi guitarra xDDDD



Oh dios mío, eso soy yo xDDDDD

Salud!
#164
Hacking / I need help, please
28 Enero 2010, 23:15 PM
Hola

He estado escaneando con SSS una página Web, y parece ser que este agradable programa privativo de Safety Labs ha encontrado algunos bug's

La cosa es que no se muy bien como podría aprovecharme deestos, ¿Alguien me da ideas?

*********************************
FTP Servers : FTP Bruteforce
Port 21 
Description FTP Server has problem with bruteforce attack. 
How to fix Upgrade to the current version of your FTP Server. 
Risk level Medium 
CVE GENERIC-MAP-NOMATCH 

*********************************

CGI Scripts : Bluo index.php SQL Injection Vulnerability
Port 80 
Description Bluo is prone to an SQL-injection vulnerability because it fails to sufficiently sanitize user-supplied data before using it in an SQL query.Exploiting this issue could allow an attacker to compromise the application, access or modify data, or exploit latent vulnerabilities in the underlying database.Bluo 1.2 is vulnerable; other versions may also be affected. 
How to fix Upgrade to the current version of Bluo. 
Risk level Medium 
Related Links Bluo Homepage

Script http://www.salesianosatocha.com/index.php
CVE CVE-MAP-NOMATCH 
Bugtraq ID 32522 

Thanks
#165
Diseño Gráfico / Fotos ~by Serch~
17 Enero 2010, 21:20 PM
Bueno, os dejo unas fotos de una nevada que ha caído este año en Madrid (España) las fotos las hice yo con mi cámara, incluso, salgo en una de ellas. Espero comentarios  :)

***************************















EOF
#166
Diseño Gráfico / Paint.net
29 Noviembre 2009, 20:21 PM
Paint.Net
..................   ...

Bueno, para la gente como yo que no entiende demasiado sobre diseño gráfico, os dejo un programa, similar al Paint clásico de windows, pero con un gran toque a Photoshop o Gimp. Puedes trabajar con capas, efectos, etc. Está claro que no es igual que potente que los programas antes mencionados, pero, merece la pena probarlo, es bueno para aprender cosas sencillas.

Plataforma: Probado en Windows XP, Windows Vista.
Descarga: http://www.getpaint.net/redirect/getpdn.html

Manual: http://cetic.guerrero.gob.mx/pics/art/articles/68/file.manual.pdf

#167
Ejercicios / Ejercicios matemáticos
29 Noviembre 2009, 20:03 PM
Aquí os dejo una serie de ejercicios matemáticos, buenos para aprender a hacer en cualquier lenguaje de programación. Son con los que yo aprendí (Yo lo hice desde GNU/Linux con C)

-> Calculadoar aritmética
-> Generador de números de Fibonacci
-> Generador de números de lotería aleatórios
-> Averiguar si un número es capicua o no.
-> Calculos de: TBN, TBM, y áreas de circulos
-> Operaciones aritméticas con números en coma flotante

Si a alguien se le ocurren mas, o alguien quiere poner el Código fuente de sus programas, ¡Adelante! ^^