Acuariofilia Madrid

Versión completa: Aula Arduino para principiantes.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
No te asustes. Ha compilado el módulo principal pero parece que no ha tenido en cuenta los restantes módulos.

1) Arduino necesita localizar el programa principal en un directorio con el mismo nombre que el programa principal. En nestro caso Directorio 'DemoBotonera' y fichero 'DemoBotonera/DemoBotonera.ino' Esto parece que lo hace bien.

2) Los ficheros de los módulos deben estar situados en en mismo directorio. En nuestro caso
1) Demo_Buzz.cpp
2) Demo_Botonera5Puls.cpp
3) Demo_DelayPlus.cpp
4) Demo_Lcd20x4.cpp
y sus respectivos headers (*.h)
No son módulos para incluir dentro de la librería principal. Son módulos para incluir en la aplicación.

3) Para que la aplicacion los compile y los enlace al programa principal sus cabeceras (headers) deben de estar referenciadas en el programa principal. En nuestro caso.

#include <Arduino.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
#include "Demo_Lcd20x4.h"
#include "Demo_Buzz.h"
#include "Demo_Botonera5Puls.h"
#include "Demo_DelayPlus.h"

Es en estos ficheros donde está la información que no ha encontrado. Fíjate en la forma diferente de hacer los includes. Los módulos de librerías generales de Arduino vienen entre < > y los que buscará en el mismo directorio que la aplicación entre comillas dobles.

Hay algo que seguramente has hecho mal al instalarlo. Yo estoy usando sistema operativo Linux y lo menciono porque ignoro si en estos temas existe alguna cuestión que presente diferencias con otros sistemas operativos.
Aprovecho para pedir disculpas por la precipitación al preparar la demo anterior (DemoBotonera).
Verifiqué que compilaba bien. Pero el leeme tiene faltas de ortografía y la botonera que yo voy a usar en mi versión final tiene cambiadas los botones porque me resuta más facil hacerlo en el programa que en la botonera fisicamente.

En lugar de usar:

Código:
#define B_NULL     V_INF   // ningún botón pulsado
#define B_SELECT   V_0     // Boton central      SELECT
#define B_UP       V_2K2   // Boton superior     UP
#define B_DOWN     V_22K   // Botón inferior     DOWN
#define B_RIGHT    V_10K   // Botón derecho      RIGHT
#define B_LEFT     V_4K7   // Botón izquierdo    LEFT
#define B_UNDEF    35      // Indicador de valor no reconocible

Usaré esto:

Código:
#define B_NULL     V_INF   // ningún botón pulsado
#define B_SELECT     V_0     // Boton central      SELECT
#define B_DOWN      V_2K2   // Botón inferior     DOWN
#define B_UP           V_22K   // Boton superior     UP
#define B_LEFT         V_10K   // Botón izquierdo    LEFT
#define B_RIGHT       V_4K7   // Botón derecho      RIGHT
#define B_UNDEF      35      // Indicador de valor no reconocible

Es decir que ...
UP <--> DOWN
LEFT <--> RIGHT

No quiero volveros locos pero los cambios serán normales. Es el riesgo de anticipar la publicación de código.

En cualquier caso estaré disponible para deshacer los entuertos que surjan por las razones que sean.
Entoces antonio que es lo que tengo que hacer realmente cambiar los define?
Lo he comprobado todo y esta bien la unica duda que tengo es donde tengo que poner la carpeta demobotonera, yo la he puesto en libraries.
(10-06-2014, 07:37 PM)juanma1970 escribió: [ -> ]Entoces antonio que es lo que tengo que hacer realmente cambiar los define?
Lo he comprobado todo y esta bien la unica duda que tengo es donde tengo que poner la carpeta demobotonera, yo la he puesto en libraries.

Hay cuatro defines que acabo de recomendarte que cambies solo con la idea de que ambas implementaciones (la tuya y la mía coincidan). Si no lo haces te funcionará igual de bien, pero a la hora de intercambiar información respecto a la botonera podríamos liarnos.

No debes poner nada en libraries. Son todas ellas módulos de la misma aplicación CAO.

No me aclaras que sistema operativo estás usando.

Debes poner toda la carpeda/directorio 'DemoBotonera' en la carpeta/directorio de tu Sketchbook (Librería de Sketch) es el lugar estándar para el almacenamiento de sus programas (o "sketch"). Los "sketches" dentro de su "sketchbook" pueden abrirse desde el menú File > Sketchbook o desde el botón de la barra de herramientas Open.
Ostia antonio, me has dejado loco, donde esa esa carpeta que me dices "sketch", y mi SO es windows 7 .
Vale , ya he cambiado los define en "demobotonera_5plus.h" tercera pestaña.
Me sigue saliendo el mismo error al compilar

DemoBotonera:25: error: 'LiquidCrystal_I2C' does not name a type
DemoBotonera:26: error: 'RTC_DS1307' does not name a type
DemoBotonera.ino: In function 'void RefreshDisplay()':
DemoBotonera:102: error: 'DateTime' was not declared in this scope
DemoBotonera:102: error: expected `;' before 'now'
DemoBotonera:106: error: 'now' was not declared in this scope
DemoBotonera.ino: In function 'void RTC_Ini()':
DemoBotonera:127: error: 'RTC' was not declared in this scope
DemoBotonera:130: error: 'DateTime' was not declared in this scope
DemoBotonera.ino: In function 'void setup()':
DemoBotonera:162: error: 'A11' was not declared in this scope


No sera que no tengo la librerias 'LiquidCrystal_I2C' y 'RTC_DS1307'?...pregunto por que yo no la veo por ningun lado.
Hola de nuevo , me he descargado las dos librerias que no las tenia 'LiquidCrystal_I2C' y 'RTClib' lo compila bien pero con dos errores:
DemoBotonera.ino: In function 'void setup()':
DemoBotonera:162: error: 'A11' was not declared in this scope.

Ya me diras.
¿Estás usando Arduino Mega 2560?
¿Has indicado correctamente tu placa en el IDE?
board type. (Tools -> Board) --> Arduino Mega 2560 or Mega ADK

Dime también que S.O. usas.
(11-06-2014, 10:34 AM)Antonio Castro escribió: [ -> ]¿Estás usando Arduino Mega 2560?
¿Has indicado correctamente tu placa en el IDE?
board type. (Tools -> Board) --> Arduino Mega 2560 or Mega ADK

Dime también que S.O. usas.
Tengo un arduino duemilanove y el UNO.
la placa esta correctamente indicada.
sistema operativo windows 7
La madre que me parió,yo que soy de martillo , clavos y alambre con el Arduino ese de los webs me hago un lío...mira que de mezclar la informática con el agua del acuario no me encaja nada.
(11-06-2014, 03:40 PM)juanma1970 escribió: [ -> ]Tengo un arduino duemilanove y el UNO.
la placa esta correctamente indicada.
sistema operativo windows 7

El pin de la botonera yo lo he puesto en A11 pero el Arduino Mega tiene más entradas analógicas que UNO o Duemilanove. Tu debes cambiarlo.

El IDE define las constates adecuadas para tu placa, por eso te da un error.

Los pines en los programas hay siempre que redefinirlos conforme a las necesidades que tengas. Los programas siempre hacen uso de pines concretos y esos pueden no estar disponibles.

En este caso debes cambiar A11 por otro pin de entrada analógico. No uses ni A4 ni A5 ya que en Arduino UNO y en Duemilanove A4 --> SDA y A5 --> SCL) para I2C Wire.h

Prueba por ejemplo con A1.

(11-06-2014, 04:29 PM)ESlavi escribió: [ -> ]La madre que me parió,yo que soy de martillo , clavos y alambre con el Arduino ese de los webs me hago un lío...mira que de mezclar la informática con el agua del acuario no me encaja nada.

La acuariofilia es multidisciplinar y constantemente se ha beneficiado de los adelantos técnicos. El ordenador para acuarios no tiene nada de nuevo.

El tema del bricolaje está plenamente justificado ya que los productos comerciales o bien ofrecen funcionalidades muy limitadas, o no se adaptan a lo que tú estás buscando y siempre resultan carísimos por la ley de la oferta y la demanda. La acuariofilia no es una afición de masas y todo resulta mucho más caro de lo normal.

Hay muchas páginas con ofertas comerciales de ordenadores para acuarios pero a unos precios exagerados. Mira por ejemplo esto: Ordenadores del acuario Profilux

No entro a prejuzgar la calidad de estos productos porque no los conozco, pero son muy caros y es imposible que puedan competir en flexibilidad con una aplicación a medida realizada por uno mismo.
Antonio, el problema es que cuando compilo antes de meterlo en la placa ya me da el error , incluso antes de conectar la placa al pc, de todas formas si tuviera que cambiar el pin 11, deberia cambiar tambien algunos terminos del codigo, no?.
[Imagen: 5skKOJZ.png]
Despues borro esa linea y vuelvo a compilar y me da error en otra:
[Imagen: jNYhCjC.png]

Demo_Lcd20x4.cpp: In member function 'void Demo_Lcd20x4::Ini(char*)':
Demo_Lcd20x4.cpp:45: error: invalid conversion from 'const char*' to 'char*'
Demo_Lcd20x4.cpp:45: error: initializing argument 3 of 'void Demo_Lcd20x4::Fmt_PrLn_LcdBeep(boolean, boolean, char*, ...)'
Y si borro esta linea ya me lo compila todo bien, miratelo a ver que es , por que yo ando buscando en google errores con ese mensaje y no consigo aclarar nada.
Los pulsadores finales valen estos?
http://www.ebay.es/itm/5-PULSADOR-ROJO-N...dc6&_uhb=1
El lugar donde debes cambiar A11 por A1 es en la línea 11 del programa principal. 'DemoBotonera.ino'

Se define PinBotonera en ese lugar para que cambiado en ese lugar quede cambiado automaticamente en toda la aplicación. Me refiero a la linea siguiente:

#define PinBotonera A11 // Pin de linea analogica para leer botonera

La otra línea (la 45) falla porque yo busco en la macro _FILE__ un caracter '/' en el nombre del fichero, pero eso es válido el Linux y no en Windows. De todas formas es algo que ya he quitado en el mío y lo he puesto en otro sitio. Esa linea mejor la quitas completamente y ya está. No aporta nada.

Si te fijas ambos fallos tienen que ver con la portabilidad de la aplicación que se desarroyó para Arduino Mega en un Linux, pero si con esos cambios compila, todo irá bien. (espero) -pardon.gif

Es normal que esos fallos salgan incluso antes de subir el código a tu placa. El IDE está compilando para una placa concreta y te avisó que eso del pin A11 no era válido. Eso lo que debía ocurrir.

Espero que todos los problemas de compilación sean así de sencillos de diagnosticar.

Por cierto, tu IDE funciona mejor que el mío. A mi me indica una linea de error que no siempre es la que produce el error, y además no resalta la linea de ninguna forma.

Puede tener que ver que yo nunca uso el editor de IDE sino un editor externo (se llama GVIM) con el cual estoy acostumbrado a programar .
Ok , compilado y en la placa , y ahora que deberia hacer esto y con que circuito..estoy echo un lio antonio, no se siesto es solo un modulo de prueba o es el programa entero...que tengo que hacer ahora.....y la pantalla de lcd donde la pongo ....y el i2c.....no se.
Solo se trata de una Demo para probar la botonera.
El hardware que necesita es el siguiente:

1) Zumbador piezo electrico
2) LCD20x4 I2C
3) RTC I2C
4) Botonera de 5 botones realizada con las indicaciones anteriores.

Talnto el LCD como el RTC son I2C y se conectan en paralelo. Los cuatro hilos que necesitas son:

GND
+5V
SLC
SDA

Las dudas pueden venir por SLC y SDA. En Arduino Mega 2560 se conectan a unos pines diferentes que en Arduino UNO y no necesitan resistencias Pull-up. Concretamente para SDA se usa el pin digital 20 y para SCL el pin digital 21. Son pines digitales cuya modificación consiste en que internamente tienen unas resistencias pull-up que proporcionan un nivel alto en ausencia de señal.

En tu caso se usan los pines A4 y A5 y necesitarán resistencias Pull-Up.

El valor de las resistencias Pull-Up viene en algunos ejemplos como 1k8 , 2k2 o 4K7. Incluso en algunos ejemplos viene sin resistencias y eso parece ser debido a que alguno de los componentes conectados a l bus ya las incorpora. Yo dado que son conexiones cortas te recomiendo probar con dos resistencias de 4K7.

Te pongo algunas imágenes de ejemplos que he encontrado.

[Imagen: arduino_cmps10.png]

[Imagen: DS1307_Arduino.jpg]

[Imagen: hr_ds1307rtc_circuit.jpg]

[Imagen: conexiones-modulo-i2c-lcd-arduino.png]

NOTA:
Para dispositivos I2C que funcionen a 3.3v hay una página muy buena. Yo creo que tu no la necesitas porque lo que has comprado debería funcionar a 5V, pero por si las moscas y para que pueda servir a otros que tengan un hadware diferente se trata de esto.
I2C bi-directional level shifter


Una vez puesto en marcha la demo, debes fijarte en lo que pone al final de inicializar todo. El LCD mostrará lo siguiente:

FIN INI
Memoria libre=.....

Apunta la cantidad de memoria libre y me lo comentas.


Prueba la botonera.
Si mantienes pulsado un boton deberá aparecer en el teclado su identificador, el valor en la entrada analógica de arduino y el tiempo que lleva pulsado el botón que verás como se incrementa.

El valor de lectura en la entrada analógica debería ser muy parecido al valor que figura en las lineas del fichero 'Demo_Botonera5Puls.h' de la 20 a la 25 que definen el valor V_0 V_2k2 V_4k7 V10K V_22K V_INF. Cada uno de esos valores será asociado a una situación de la botonera.

Conviene que apuntes los valores que entrega cada uno de los botones y me los comunicas.

Este teclado es sensible al tacto humano. No debes tocar ninguna parte del circuito de la botonera mientras la pruebas para no alterar los valores que devuelve.

Una vez que el funcionamiento de esto esté verificado podemos pasar a realizar otro tipo de pruebas.