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
Aula Arduino para principiantes.
Respuestas: 1783    Visitas: 467297
#1,531
(27-12-2015, 10:01 PM)pedmar escribió: a ver si entiendo esta función: for????
Se supone que cada vez que comienza el loop,el programa lee la función for, int veces=0; y a continuación comprueba si es menor de 8 veces<8; si es menor le suma 1 veces++ y vuelve hacer el Bucle completo dentro del for.
La siguiente ocurrirá lo mismo y le sumara 1 seran 1+1=2 luego 2+1=3 y así respectivamente; con lo que cuando pase las 8 veces, se habrán sumado y cumplido la orden del for, y pasara a la orden siguiente?
En mi caso anterior, claro como la siguiente no existía comenzaba de nuevo el bucle del for desde 0

¿es mas o menos así?Huh

Es correcto según lo veo yo, excepto el punto que te remarco, el programa comprueba si es menor que 8, si es menor ejecuta lo que hay dentro del for y despues de acabar la funcion suma uno. Se suma a uno despues de ejecutar lo de dentro del for, no antes, así despues de sumar vuelve a mirar si es menor que ocho y vuelta a empezar...

fíjate q si fuese como tu dices el bucle sólo se ejecutaría 7 veces.
#1,532
(27-12-2015, 10:13 PM)Aeros escribió:
(27-12-2015, 10:01 PM)pedmar escribió: a ver si entiendo esta función: for????
Se supone que cada vez que comienza el loop,el programa lee la función for, int veces=0; y a continuación comprueba si es menor de 8 veces<8; si es menor le suma 1 veces++ y vuelve hacer el Bucle completo dentro del for.
La siguiente ocurrirá lo mismo y le sumara 1 seran 1+1=2 luego 2+1=3 y así respectivamente; con lo que cuando pase las 8 veces, se habrán sumado y cumplido la orden del for, y pasara a la orden siguiente?
En mi caso anterior, claro como la siguiente no existía comenzaba de nuevo el bucle del for desde 0

¿es mas o menos así?Huh

Es correcto según lo veo yo, excepto el punto que te remarco, el programa comprueba si es menor que 8, si es menor ejecuta lo que hay dentro del for y despues de acabar la funcion suma uno. Se suma a uno despues de ejecutar lo de dentro del for, no antes, así despues de sumar vuelve a mirar si es menor que ocho y vuelta a empezar...

fíjate q si fuese como tu dices el bucle sólo se ejecutaría 7 veces.

-laughbounce2.gif por fin he entendido mas o menos algo de como funcionan todos esos números y letras sin sentido, ahora solo necesito aprender los nombres e ir entendiendo una a una como funcionan las miles de ordenes, que complicado es todo -mega_shok.gif
#1,533
(27-12-2015, 09:08 PM)pedmar escribió:
(27-12-2015, 08:44 PM)Aeros escribió: es porque el for esta dentro de loop(), todo lo que esté dentro de loop se va ejecutando hasta que se apaga(para la simulación).

ponle un delay muy grande entre el { del for y el del loop y ya verás como "para" después de 8 ciclos.

efectivamente le he puesto un delay(20000); despues del } del for y antes del} del loop y se ha parado justo a los 8 ciclos.
¿pero esto ocurre solo en la simulación u ocurrirá también con los componentes físicos?Huh

La mayoría de los lenguajes no te obligan a estar ejecutando algo continuamente. En Arduino te imponen una determinada estructura de ejecucion y lo hacen como si fuera parte del lenguaje.

La estructura básica del lenguaje de programación de Arduino es bastante simple y se compone de al menos dos partes. Cada una de estas dos partes necesarias, o funciones (setup y loop), encierran bloques que contienen declaraciones, estamentos o instrucciones, también se pueden llamar sentencias.

Código:
void setup() //Primera Parte
{
  estamentos;
}
void loop() //Segunda Parte
{
  estamentos;
}

En mi humilde opinión no era necesario definir con esa estructura, pero en un programa para un controlador como Arduino tiene bastante sentido que permamentemente haga algo. Si termina quedaría como muerto. Lo normal es que siempre tenga que hacer algo.

Por eso se define una función que se ejecuta en primer lugar (setup) y otra para que se ejectute continuamente (loop). En la primera como se ejecuta una sola vez antes que ninguna otra cosa, se aprovecha para incluir proceso de reparación o de inicialización.

Se han realizado unas pocas variaciones en el lenguaje C para Arduino y las más aparentes se refieren a esa estructura de doble función setup() y loop().

Esta estructura y el propio IDE de Arduino está inspirado en un lenguaje bastante nuevo y muy interesante llamado Processing, pero el lenguaje de Processing es bastante diferente. El lenguaje de Arduino es C++ con muy pocos cambios.

Si quieres hacer un programa que se ejecute una sola vez mete las instrucciones en la función setup() y deja la función loop() vacía.

Para más info: Estructura de un programa

Para los que tengan curiosidad sobre los orígenes de C
En el lenguaje C estandar, de tola la vida, solo existe una función obligatoria que es la que se ejecuta inicialmente. Se llama main() y se ejecuta una sola vez. Opcionalmente, puede recibir argumentos a través de la linea de comandos y puede devolver un código que será 0 para indicar finalización correcta y se puede hacer que devuelva otro valor para indicar que no terminó correctamente.

C es un lenguaje de programación originalmente desarrollado por Dennis M. Ritchie entre 1969 y 1972 en los Laboratorios Bell. En 1969, un grupo de empleados de los laboratorios Bell de AT&T, entre los que figuran Dennis Ritchie, Ken Thompson y Douglas McIlroy desarrollaron el sistema operativo Unix y la mayor parte de los programas de este sistema operativo se escribieron en lenguaje C.

El lenguaje C está muy orientado a la obtención de un código rápido lo cual es importante cuando trabajamos con sistemas operativos o con controladores que se conectan a dispositivos periféricos.
#1,534
(27-12-2015, 10:25 PM)pedmar escribió:
(27-12-2015, 10:13 PM)Aeros escribió:
(27-12-2015, 10:01 PM)pedmar escribió: a ver si entiendo esta función: for????
Se supone que cada vez que comienza el loop,el programa lee la función for, int veces=0; y a continuación comprueba si es menor de 8 veces<8; si es menor le suma 1 veces++ y vuelve hacer el Bucle completo dentro del for.
La siguiente ocurrirá lo mismo y le sumara 1 seran 1+1=2 luego 2+1=3 y así respectivamente; con lo que cuando pase las 8 veces, se habrán sumado y cumplido la orden del for, y pasara a la orden siguiente?
En mi caso anterior, claro como la siguiente no existía comenzaba de nuevo el bucle del for desde 0

¿es mas o menos así?Huh

Es correcto según lo veo yo, excepto el punto que te remarco, el programa comprueba si es menor que 8, si es menor ejecuta lo que hay dentro del for y despues de acabar la funcion suma uno. Se suma a uno despues de ejecutar lo de dentro del for, no antes, así despues de sumar vuelve a mirar si es menor que ocho y vuelta a empezar...

fíjate q si fuese como tu dices el bucle sólo se ejecutaría 7 veces.

-laughbounce2.gif por fin he entendido mas o menos algo de como funcionan todos esos números y letras sin sentido, ahora solo necesito aprender los nombres e ir entendiendo una a una como funcionan las miles de ordenes, que complicado es todo -mega_shok.gif

for( int veces=0; veces<8;veces++) {
HacerAlgo();
}

Equivale a:

1) veces toma el valor cero (veces=0)
2) Mientras veces sea menor que ocho (veces<0)
3) HacerAlgo
4) Incrementar veces (veces++)
5) Volver al punto 2. Si no se cumple la condición salir

En programación lo habitual es que se pueda hacer la misma cosa de muchas formas diferentes. Se podría haber conseguido lo mismo usando otra codificación.

int veces=0
while(veces<8){
HacerAlgo();
veces++;
}

while significa mientras. La condición para continuar sería (veces<8);

El bucle for viene bien cuando lo que queremos es hacer un bucle que sabemos cuantas veces se va a ejecutar y tambien cuando deseamos ejecutar unas instrucciones en funcion de un índice que lo hacemos variar desde un valor inicial a un valor final.

Interesa mucho programar de la forma más legible posible. El bucle for deja bastante claro al lector las veces que se va a ejecutar algo. Si no se programa con buenos hábitos luego puede costar trabajo leer entender el propio código.

El bucle while(condicion) no convienen usarlo cuando nos baste usar un for( ; ; ) pero puede ser un buen recurso porque es más flexible y permite resolver situaciones más complejas donde esos supestos de un valor inicial conocido o un numero concreto de iteraciones no se conocen a priori.

Por ejemplo si queremos leer una línea de caracteres y no conocemos la longitud de la línea, necesitaremos un bucle while().

Existe una tercera forma de bucle donde se pregunta por la condición al final del bucle con lo cual, a diferencia de while siempre se ejecutará al menos una vez.
do{
} while(condicion);
#1,535
Hola, yo para comprar todo lo relacionado con arduino lo compro en las siguientes paginas:

www.aliexpress.es
www.banggood.com
www.dx.com

Ambas paginas tienen un precio muy bueno y un servicio tecnico perfecto.
#1,536
Un pequeño programa de ejemplo para que veáis como mandar mensajes mediante el puerto serie al "monitor serie" (la lupa de la dcha.) y poder seguir el programa con los mensajes que incluyáis en el código

Código:
int n = 0;
void setup () {
    Serial.begin(9600);    //Inicializamos el puerto serie
    delay(10000);
    Serial.print("Inicializamos el puerto serie para seguir el programa");
    Serial.println(" y salta linea");
}

void loop () {
    Serial.print("El valor de N es: ");
    Serial.println(n, DEC); // mostrar n en formato decimal
    delay(2000);
    n++; // n = n + 1
    if (n>32000) n=0; // simple reiniciado de n para evitar se desborde
}
Hay que hacer coincidir la velocidad del serie (abajo a la derecha del monitor serie), aunque por defecto suele venir a 9600, o si se quiere otra velocidad seleccionarla y ajustar el valor de Serial.begin(xxxxxx)



El ABS se puede simular con sqrt(n*n), raíz cuadrada del nº al cuadrado. Hay otro método jugando con los bit del byte, pero eso es de post-grado



int a, b, c, d;
a=1;
b=2;
c= (a+b)/2;
d=2*c;

¿Cuanto vale d?......= 2
#1,537
Más sencillo je, je.

if (x<0) x=-x; // si x es negativo, cambiamos el signo.

En una asignación de un valor a una variable, primero se evalua (se calcula la expresión de la derecha), y luego ese valor que tiene una existencia temporal en alguna parte (cuyo nombre en este momento no nos importa), se asigna a la variable, (es decir se copia en la variable) y cumplido su cometido desaparece.

El operador - se puede usar de dos formas. Como operador unario, o como operador binario.

a=-x; // operacion unaria
a= b-x; // operación binaria.

Son operaciones diferentes, pero se usa el mísmo operador y esto se hace así en casi todos los lenguajes de programación.
#1,538
Debimos haber sacado un hilo para estos temas, mea culpa.

Seguimos en:
Programación C desde Cero
#1,539
Ha bajado de precio la sonda de pH y a mí me esta funcionando bien:
http://es.aliexpress.com/item/Wholesale-...66295.html

Lo de tener una capucha a rosca para conservar la punta de la sonda siempre húmeda es una maravilla porque evitan la muerte prematura de la sonda cosa que en otras ocurre con demasiada frecuencia.
#1,540
La puedes encontrar desde 6.60 lo que no baja de 16 es el módulo, y analógico
#1,541
(04-01-2016, 05:40 PM)ArturoS escribió: La puedes encontrar desde 6.60 lo que no baja de 16 es el módulo, y analógico

La sonda que yo digo además de barata me ha funcionado bien.
El módulo podría ser más barato. Tienes este Mini pH Interface I2C de Tindie. Creo que es hardware abierto. Proporcionan el esquema de la PCB y al parecer usa componentes fáciles de conseguir. Se habló de estos temas en un hilo que empezó en http://acuariofiliamadrid.org/Thread-Aula-Arduino-para-principiantes?pid=158718#pid158718
#1,542
Si el modulo I2C de tindie está ya solo a 25$ + envío, y venden la sonda a 16$.

En aliexpress la sonda se encuentra desde 6.7 € y los módulos desde 16€, pero son analógicos.

16 € es un precio elevado para el rango en que se mueven los distintos módulos arduino en aliexpress, y tampoco la electrónica que traen lo justifica. Los chinos no parece que estén por sacar módulos I2C, aunque es código abierto. Creo que el apartado de sensores pH con arduino no tiene suficiente mercado como para que se mueva a precios similares al resto de módulos.
#1,543
Hombre tampoco creo que merezca la pena ponerte a fabricar un sensor que vale 25$ y que te vale para toda la vida. Lo que sí interesa es conseguir sondas buenas y baratas
#1,544
(07-01-2016, 05:56 PM)Agamenon escribió: Hombre tampoco creo que merezca la pena ponerte a fabricar un sensor que vale 25$ y que te vale para toda la vida. Lo que sí interesa es conseguir sondas buenas y baratas

Lo incómodo a corto plazo puede tener beneficios a más largo plazo. Trastear con estos temas para mí no sería una pérdida de tiempo, aunque es algo que no he tenido tiempo de trastear con ello, pero para mí tiene interés porque hay otro tipo de sensores (conductímetros, medidores de ORP, etc.) que funcionan con los mismos principios (amplificadores operacionales) y son más difíciles de conseguir.

El principal beneficio de trastear es aprender cosas nuevas. Pienso que con un poco de paciencia se pueden conseguir mejores soluciones de las que ofrece el mercado, y ello pienso redunda en beneficio de toda la afición (ya eso es un premio considerable).

Para trastear te tiene que gustar y tienes que tener tiempo para ello. Mi tiempo es limitado, pero me encanta trastear.

Hace poco descubrí como usar un acelerómetro para medir el nivel de agua de un acuario. He probado muchas alternativas comerciales y de momento la que más me convence es la del acelerómetro. Ese tipo de pequeñas satisfacciones que se van logrando por el camino, son las responsables de que que dedique mi tiempo a trastear... y de que mis acuarios ahora estén peor cuidados que hace uno o dos años.

No se puede tener todo. -happy.gif
#1,545
Maestros, tengo una duda:

En el CAO1 se utilizan Darlingtons para dimmear los LED,, en otros proyectos he visto que usan MOSFET, ¿podríais comentar, por favor, por qué elegir uno u otro, ventajas e inconvenientes, diferencias, etc?

Gracias! -notworthy.gif

Usuarios navegando en este tema: 2 invitado(s)


Salto de foro: