Concurso de fotografía AM

Temática: «Una panorámica de tu acuario».
Ya esta abierto el plazo para presentar fotografías.

Más info
image01

¿Aún no conoces AMA?

Hazte socio de Acuariofilia Madrid Asociación.
CERRADO EL PLAZO DE INSCRIPCIÓN

Más info
image01

Atlas de peces de AM

¡Hemos alcanzado las 800 fichas! Visita nuestro atlas de peces actualizado.

Más info
image01

Cardúmenes y sociabilidad

Nueva actualización de la tabla con una extensa relación de peces, donde podrás conocer qué entorno necesita cada especie, su sociabilidad y si convive o no en cardumen. ¡Pasa a descubrirla!

Mas info
image01
Programación C desde Cero.
Respuestas: 135    Visitas: 47994
#46
Aun veo dudas con el tema de las variables pero creo que el tema de entrada salida por puerto Serial, lo necesitais para hacer prácticas y depurar programas.

El siguiente program estaá preguntando cada dos segundos si hay datos en la entrada del puerto Serial. Esto ocurrirá cuando introduzcais algo y pulseis la tecla <enter>.

El programa intentará leer dos datos enteros y asumirá que reciubirá valores entre 0 y 255, los usará para dar mas o menos prillo a un par de Leds rojo y Verde conectados a ciertos pines.

Leer el programa. Compilarlo, ejecutarlo, abrir el monitor Serial, introducir un par de valores entres entre 0 y 255, y observar lo que pasa. Todo eso lo podéis hacer en el emulador.

Yo no le puse nombre pero cuando te descargas en código añade una cabecera con un enlace que te permite publicar el código para otros lo vean funcionando.

https://123d.circuits.io/circuits/142316...ed-circuit

Apenas lo había usado hasta ahora, pero la verdad es que está muy bien para hacer pruebas sencillas de programación sin el Arduino.

Es interesante Incluso para mí. Trae componentes electrónicos que no tengo y que aún no he usado con Arduino.

Podéis intentar hacer modificaciones en el código.
Si se os ocurre alguna modificación y no sabéis como hacerla, preguntad.

Yo no puedo sacaros a la pizarra. Tenéis que ir jugando con lo poco que nuevo que valláis asimilando de programación antes de avanzar con más cosas. De lo contrario os vais a agobiar con tanta cosa nueva y no podréis avanzar.

El código es este.

Meter datos numericos podría servir para poner en fecha y hora un RTC.

Código:
#include <Arduino.h>

#define Pin_Led_Rojo     5
#define Pin_Led_Verde   4

int LuzRoja, LuzVerde;

void setup(){
    Serial.begin(9600); // inicializar el puerto serial
    while(!Serial);    // Esperar a que esté preparado
    Serial.println("Preparado");
    pinMode(Pin_Led_Rojo, OUTPUT);
    pinMode(Pin_Led_Verde, OUTPUT);
}

void loop(){
    Serial.println("Introduzca dos numeros entre 0 y 255 para la intensidad de LuzRoja y de LuzVerde");
    while(Serial.available()>0){ // Si se han intruducido datos
        LuzRoja = Serial.parseInt(); // Leer un número para Luz Roja
        LuzVerde = Serial.parseInt(); // Leer un número para Luz Verde
        while( Serial.available() > 0 && Serial.read() != -1 ); // leer el sobrante de la entrada Serial
    }
    Serial.print("LuzRoja=");
    Serial.print(LuzRoja);
    Serial.print(", LuzVerde=");
    Serial.println(LuzVerde);
    analogWrite(Pin_Led_Rojo, LuzRoja);
    analogWrite(Pin_Led_Verde, LuzVerde);
    delay(2000);
}
#47
yo he montado esto https://123d.circuits.io/circuits/141378...breadboard
pero como los tontos
porque la mitad de las cosas no las entiendo
#48
Perfecto. Hazlo funcionar. Introduce toda clase de datos. El programa espera datos numéricos entre 0 y 255, pero puedes introducir datos incorrectos para ver que pasa. Intenta adivinar que hace cada cosa. Intenta modificar algo para ver qué ocurre. Juega un poco con eso.

Cambia el programa. Prueba y error, usa tu imaginación, pregúntate constantemente que pasaría si...
#49
hola Antonio

por el momento lo único que consigo es que funcionen los led
lo curioso es que quito partes del código y continúan funcionando

estoy liadillo. primero a ver si soy capaz de saber cual es la función de cada linea de código. para ver como puedo modificarlo.
he estado un rato intentando que se encendería primero un led y al tiempo el otro . pero nada.
#50
Es que en el código ya hay comandos para leer entradas del serial monitor, cuando aun no tenéis claro mandar cosas al mismo.

Un consejo cuando algún comando no lo conozcáis ir a esta web
https://www.arduino.cc/en/Reference/HomePage
y ponéis en comando en el cuadro de búsqueda y lo buscáis, y aunque esté en ingles algo conoceréis sobre su significado o funcionamiento.

Bueno en Google poniendo "arduino comando" seguro que entre las primeras referencias también sale la de esa pagina de referencias oficiales de arduino.

Como mejora en el ejercicio podéis incluir un par de if para que no ejecute los analogWrite si el valor tecleado supera 255 y avise del error.
#51
(04-01-2016, 04:27 AM)ArturoS escribió: Es que en el código ya hay comandos para leer entradas del serial monitor, cuando aun no tenéis claro mandar cosas al mismo.

Un consejo cuando algún comando no lo conozcáis ir a esta web
https://www.arduino.cc/en/Reference/HomePage
y ponéis en comando en el cuadro de búsqueda y lo buscáis, y aunque esté en ingles algo conoceréis sobre su significado o funcionamiento.

Bueno en Google poniendo "arduino comando" seguro que entre las primeras referencias también sale la de esa pagina de referencias oficiales de arduino.

Como mejora en el ejercicio podéis incluir un par de if para que no ejecute los analogWrite si el valor tecleado supera 255 y avise del error.

Son demasiadas las cosas que no saben y a la vez necesitan un mínimo de resultados para no desanimarse porque en un contexto de curso no presencial enfrentarse a algo poco amigable y totalmente nuevo tiene bastante dificultad.

Para mí el primer objetivo es que consigan perder el miedo y para eso deberían llegar a entender que cometer practicar y cometer errores es una fuente valiosa de información.

Tu sugerencia de incluir un par de if para que no ejecute los analogWrite si el valor tecleado supera 255 y avise del error, es muy acertada. En realidad, un programa sin ese tipo de previsiones estaría incompleto. Un programa debe preveer cualquier circunstancia que pueda conducir a un error. Por eso les invité a que probaran a meter valores incorrectos.

Los programas didácticos han de ser intencionadamente incompletos para estimular a los alumnos a mejorarlos.

Resulta menos intimidante aprender a programar con un lenguaje visual intuitivo. Por desgracia, son bastante limitados y la parte donde más ayudan no es la parte importante. No preparan demasiado para poder afrontar en el futuro otros leguajes de programación.

Para Arduino hay un producto que está pensado para que los niños aprendan a jugar con Arduino. Scratch para Arduino

Hay otras cosas, por ejemplo en lugar de meter en Artuino un programa en C se puede introducir en el Arduino un programa que sea capaz de recibir instrucciones por medio de un puerto serie. Ese programa ya viene incluido como ejemplo en el IDE de Arduino así que no hay más que cargarlo. En realidad lo que aparece en el IDE son una serie de programas de ejemplo que trabajan con el protocolo de comunicación Firmata especialmente diseñado para eso.

El protocolo Firmata puede comunicar un ordenador (por ejemplo un Raspberry pi) con un Arduino o con otros controladores y lo puede hacer desde una gran variedad de lenguajes. En otras palabras el programa se escribiría en un ordenador, y este por medio de un puerto USB le diría al Arduino que tiene que hacer en cada comento. Arduino se actuaría como un esclavo tonto. Ese enfoque no sirve para afrontar todo tipo de necesidades porque supone una pérdida de rendimiento.

Para controlar un acuario se necesita algo sencillo, directo, rápido y muy fiable. Los que diseñaron Arduino tuvieron que tomar las decisiones para simplificar al máximo la programación sin perjudicar el rendimiento y la fiabilidad. Por desgracia no existe un lenguaje que sea fácil de aprender y que a la vez sea potente y rápido.

El lenguaje C no es fácil de aprender, pero todo se reduce a un problema de paciencia y perseverancia. Como primer lenguaje de programación yo recomendaría el lenguaje Python, pero en algunas escuelas enseñan programación con el lenguaje C. Posiblemente sea uno de los menos indicados para aprender programación por su dificultad, pero superado el repecho inicial te da una visión muy buena para afrontar cualquier otro lenguaje.
#52
A lo mejor me voy a meter donde no me llaman jajaja

Pero podríais buscar como programar un arduíno con un lenguaje un poco más sencillo que C, como puede ser C#. Seguro que se podrá hacer de forma más simple que no a tan bajo nivel.

Aquí, hay un ejemplo de ello.
#53
buenas

pues ya he sido capaz que se encienda una antes que la otra(solo he tardado 2 horas)

pero bueno. al menos estoy diferenciando y conociendo algunas cosas mas


se me ha ocurrido meter esto.
seguro que le faltan paréntesis o llaves
y a parte no se donde ponerlo -nosweat.gif


if (Pin_Led_Verde > 200)
Serial.print("rodazac");

else

Serial.print("luz tenue");


en las lineas que he puesto, lo que esta entre los paréntesis lo he entrecomillado
por que creo que a si lo manda como texto....¿no?

pero si no pones las comillas ¿cual es la función?
#54
(04-01-2016, 04:26 PM)rodazac escribió: buenas

pues ya he sido capaz que se encienda una antes que la otra(solo he tardado 2 horas)

pero bueno. al menos estoy diferenciando y conociendo algunas cosas mas


se me ha ocurrido meter esto.
seguro que le faltan paréntesis o llaves
y a parte no se donde ponerlo -nosweat.gif


if (Pin_Led_Verde > 200)
Serial.print("rodazac");

else

Serial.print("luz tenue");


en las lineas que he puesto, lo que esta entre los paréntesis lo he entrecomillado
por que creo que a si lo manda como texto....¿no?

pero si no pones las comillas ¿cual es la función?

Si no pusieras las comillas, lo tomaría como una variable que tendrías que inicializar anteriormente.

Lo que hace esta línea Serial.print("luz tenue"); es llamar a la función print con la cadena de texto "luz tenue". En este caso, si le quitas las comillas no te compilaría el programa.

Al principio puede ser complicado pero es importante diferenciar entre variables, constantes, parámetros, funciones, condicionales, etc... Eso te ayuda a no poder cosas sin saber bien porque las pones.

Espero que te sirva de ayuda.
#55
(04-01-2016, 04:56 PM)kabout escribió: Espero que te sirva de ayuda.

por supuesto que si!!!....toda ayuda o aclaración es bienvenida.


al final he puesto esto

void loop(){
Serial.println(LuzRoja=255 ,LuzVerde=255);
if (LuzRoja > 200)
{
Serial.println("rodazac");
}
else
{
Serial.println("luz tenue");
}


para colocar las llaves he tenido que buscar,
donde estaba un ejemplo parecido.para copiar su posición.


al final he puesto Serial.println en vez de Serial.print
para separar el texto
#56
(04-01-2016, 06:05 PM)rodazac escribió:
(04-01-2016, 04:56 PM)kabout escribió: Espero que te sirva de ayuda.

por supuesto que si!!!....toda ayuda o aclaración es bienvenida.


al final he puesto esto

void loop(){
Serial.println(LuzRoja=255 ,LuzVerde=255);
if (LuzRoja > 200)
{
Serial.println("rodazac");
}
else
{
Serial.println("luz tenue");
}


para colocar las llaves he tenido que buscar,
donde estaba un ejemplo parecido.para copiar su posición.


al final he puesto Serial.println en vez de Serial.print
para separar el texto

Te faltaría una llave al final.

Con esta sentencia Serial.println(LuzRoja=255 ,LuzVerde=255); no se que es lo que quieres hacer.

¿Realmente que es lo que quieres programar?

Actualmente con esa función has codificado la sentencia que te he dicho que no creo que te compile. y luego si la variable LuzRoja fuera mayor de 200, escribir "rodazac" en el puerto serie entiendo y sino escribir "luz tenue".

¿Luz roja y Luz verde donde toman valor?
#57
joer que manazas

ya funciona......es que me deje entremedias un delay
https://123d.circuits.io/circuits/141378...breadboard


si es que lo único que estoy haciendo es enredar
con el código que puso Antonio Castro. al principio
#58
(04-01-2016, 04:07 PM)kabout escribió: A lo mejor me voy a meter donde no me llaman jajaja

Pero podríais buscar como programar un arduíno con un lenguaje un poco más sencillo que C, como puede ser C#. Seguro que se podrá hacer de forma más simple que no a tan bajo nivel.

Aquí, hay un ejemplo de ello.

Arduino es hardware libre usando software libre, y una gran parte de su exito viene de eso.

C#es un lenguaje propietario y para ser sincero nunca tuve ni la necesidad ni la curiosidad por aprenderlo pero puestos a explicar en qué consiste encontre a alguien que en pocas y sencillas palabras lo describe perfectamente.

Diferencias entr C, C++ y C#

El C# no ha tenido mucho éxito.

Si quieres aprender un lenguaje fácil juega un poquito con lenguaje Python.
#59
(04-01-2016, 06:17 PM)kabout escribió: ¿Luz roja y Luz verde donde toman valor?

si no estoy confundido . están declaradas como variables globales
y el valor se introduce manualmente.
#60
(04-01-2016, 07:48 PM)Antonio Castro escribió:
(04-01-2016, 04:07 PM)kabout escribió: A lo mejor me voy a meter donde no me llaman jajaja

Pero podríais buscar como programar un arduíno con un lenguaje un poco más sencillo que C, como puede ser C#. Seguro que se podrá hacer de forma más simple que no a tan bajo nivel.

Aquí, hay un ejemplo de ello.

Arduino es hardware libre usando software libre, y una gran parte de su exito viene de eso.

C#es un lenguaje propietario y para ser sincero nunca tuve ni la necesidad ni la curiosidad por aprenderlo pero puestos a explicar en qué consiste encontre a alguien que en pocas y sencillas palabras lo describe perfectamente.

Diferencias entr C, C++ y C#

El C# no ha tenido mucho éxito.

Si quieres aprender un lenguaje fácil juega un poquito con lenguaje Python.

¡¡Me has citado un post de hace más de 10 años!! Big Grin

A ver llevo trabajando 5 años con C# y creo que lo que comentas es bastante anticuado. C# se utiliza en multitud de desarrollos empresariales y no es propietario ya que tanto el framework como el IDE de desarrollo es completamente gratuito.

¿No ha tenido éxito? Este artículo es más actual. Podrás ver los lenguajes demandados en la actualidad.

Es una opción más dentro de la gran variedad de lenguajes de programación que existen.

Era un simple aporte, cada uno que programe con lo que más le guste!

Usuarios navegando en este tema: 2 invitado(s)


Salto de foro: