Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?
01/07/2014 #1


Fallo en el código (Procesing)
Hola foreros.

Es mi primera incursión en Arduino y su entorno de programación Procesing.

Me he comprado un módulo NRF905 con el fin de emitir sobre los 900 Mhz una señal que debe de captar un frecuencímetro con prescaler. Para ello he conectado el módulo a una placa Arduino Uno V.3

He utilizado el montaje y el software de programación que figura en la hoja de especificaciones del fabricante (o "datasheet")

http://www.electrodragon.com/w/index...ireless_Module

Pero el compilador me devuelve el error: 'nrf905' was not declared in this scope




Mi intención por el momento no es la de aprender a programar en "Procesing" sino emitir una señal continua en la banda de los 900 Mhz para captarla con un frecuencímetro.

¿Alguien puede ayudarme? ¿Cómo y dónde debo de declarar esa 'nrf905'?

Muchas gracias.

A continuación dejo el código que provoca el error en la compilación y/o en la carga:

Código:
#include*<NRF905.h>
#include*<SPI.h>

#define*BUF_LEN**********32
#define*CONF_LEN*********10

#define*NRF905_CSN*******10

unsigned char tx_buf[BUF_LEN]= "Hi, Arduino   \r\n";
unsigned char read_config_buf[CONF_LEN];

byte tx_address[4]= {0xcc,0xcc,0xcc,0xcc};

void setup()
{
****unsigned char i;
****
****pinMode(NRF905_CSN,OUTPUT); //to make sure SPI works
****
****nrf905=NRF905(NRF905_CSN);
****
****nrf905.init();


****/**
********default*configuration,*need*to*specify*frequency
********choose*Z-Wave*frequency*band,*support*:
********US        908.42Mhz
********EUROPE        868.42MHz
********AFRICA        868.42MHz
********CHINA        868.42MHz
********HK        919.82MHz
********JAPAN        853.42MHz
********AUSTRALIA    921.42MHz
********NEW_ZEALAND    921.42MHz
********BRASIL        921.42MHz
********RUSSIA        896MHz
*****/
****nrf905.write_config(US);
    
    
****nrf905.read_config(read_config_buf);

****Serial.begin(9600);

****for(i=0; i<10; i++)
****{
********Serial.print(read_config_buf[i],HEX);
********Serial.print(' ');
****}
****
****tx_buf[12]*=*'0';
}

void loop()
{
****/** transmit data packet with default TX Address */
****nrf905.TX(tx_buf);
****
****/** transmit data packet with specified TX Address */
//****nrf905.TX(tx_buf,*tx_address);
****
****// NOTE: TX_Address and RX_Address must be the same
****
****/** Count Sending times */
****tx_buf[12]++;
****if(tx_buf[12] == 0x3A){
******tx_buf[12]*=*'0';
****}
****delay(50);
}
01/07/2014 #2


trifoncar dijo: Ver Mensaje
Hola foreros,

es mi primera incursión en Arduino y su entorno de programación Procesing.

Me he comprado un módulo NRF905 con el fin de emitir sobre los 900 Mhz una señal que debe de captar un frecuencímetro con prescaler. Para ello he conectado el módulo a una placa Arduino Uno V.3

He utilizado el montaje y el software de programación que figura en la hoja de especificaciones del fabricante (o "datasheet")

http://www.electrodragon.com/w/index...ireless_Module

pero el compilador me devuelve el error: 'nrf905' was not declared in this scope

http://www.forosdeelectronica.com/at...1&d=1404235990


mi intención, por el momento, no es la de aprender a programar en "Procesing" sino emitir una señal continua en la banda de los 900 Mhz para captarla con un frecuencímetro.

¿Alguien puede ayudarme?¿Cómo y dónde debo de declarar esa 'nrf905'?

Muchas gracias

A continuación dejo el código que provoca el error en la compilación y/o en la carga:
A lo mejor con este código te puedes orientar http://pastebin.com/JsWxYDzk
01/07/2014 #3


Gracias por la ayuda, kimizombie.

No sé que hacer con el contenido de la dirección web que me has enviado, tras copiar-pegar-compilar-idéntico tipo de error.

No sé exactamente que es lo que debo de buscar en ese código, aunque he visto que tiene dos cuerpos diferentes; uno viejo (old) y otro new(nuevo); he visto una pequeña diferencia en la línea 22 ("val" en old y "&val" en new). He copiado el código y pegado, pero me sigue dando el mismo error.

¿Podrías ser un poco más conciso en las pistas?

Gracias.
02/07/2014 #4


trifoncar dijo: Ver Mensaje
Gracias por la ayuda, kimizombie.

No sé que hacer con el contenido de la dirección web que me has enviado, tras copiar-pegar-compilar-idéntico tipo de error.

No sé exactamente que es lo que debo de buscar en ese código, aunque he visto que tiene dos cuerpos diferentes; uno viejo (old) y otro new(nuevo); he visto una pequeña diferencia en la línea 22 ("val" en old y "&val" en new). He copiado el código y pegado, pero me sigue dando el mismo error.

¿Podrías ser un poco más conciso en las pistas?

Gracias.
Yo la verdad nunca he terminado de entender la sintaxis del arduino, siempre me ha parecido liosa dado que estoy acostumbrado a otros lenguajes que siguen el "estandar".
En cualquier caso cuando declaras: "nrf905=NRF905(NRF905_CSN);" no me cuadra para la sintaxis de arduino. Cuando tengo que instanciar un objeto de una clase (en realidad es lo que se hace) yo lo hago así:
Código:
PCD8544 lcd = PCD8544(19, 17, 15, 14, 16);
IRrecv irrecv(RECV_PIN);
SoftwareSerial RS485Serial(SSerialRX, SSerialTX);
Como ves hay varias maneras, prueba con alguna de ellas pero cambiando por tu clase, es decir:
Código:
NRF905 miNombre(NRF905_CSN);
NRF905 miNombre = (NRF905_CSN);
Espero ayudarte y a ver si conseguimos hacer funcionar el cacharrito :P.
Por cierto a mi siempre me ha gustado la RF y me gustaría aprender
02/07/2014 #5


Hola,

gracias por la ayuda. kimizombie,

La verdad, no quería yo tener que aprender a programar para hacer funcionar el módulo.
En la página del fabricante viene el código y las librerías para hacerlo funcionar y pensé que sería tan fácil como conectar dicho módulo a la placa de Arduino (Uno V.3 en mi caso) siguiendo las instrucciones del conexionado que aparecen allí y ...... ta..ta..ta..........CHAN! VOILÁ!!!!

pero no, no ha sido así y como digo, no quería tener que aprender química para ir a pedir una aspirina a la farmacia, pero en este caso creo que como dicen los argentinos .... va a ser que SÍ o SÍ.

No me he rendido a la primera de cambio, he estado mirando mucha información en la web, pero entiendo el 5% por falta total de base, por ejemplo la página de GitHub entre otras muchas.

En todas las páginas que he visitado figura el código tal como lo tengo yo, por lo que no creo que sea un error de sintaxis. También he creído que podía ser problema de ubicación de librerías, pero no debe de ser el caso. Por supuesto. también me he tragado un montón de videos en youtube

Enfin, ¡que salga el sol por donde quiera! todo se andará; calma y serenidad.

¡Un saludo! y gracias de nuevo por tu interés.
02/07/2014 #6

Avatar de MikeLunatiko

El lenguaje que usa Arduino es estándar. 100% C++ estándar.

El error es debido a una cosa muy sencilla: intentas asignar algo a una variable llamada "nrf905" que no has declarado en ningún sitio. Para que el cógido que tienes funcione, tienes dos opciones. Bien declaras la variable global, es decir fuera y antes de la función setup(), así:

Código:
NRF905 nrf905;

void setup()
{
    //... aquí el código que tienes
}
O bien lo haces como te ha indicado kimizombie:

Código:
NRF905 nrf905 = (NRF905_CSN);
El problema de hacerlo así es que es una variable local a la función setup() y sólo es accesible desde ella, por tanto no podrás acceder a ella desde loop(), cosa que sí podrás hacer declarándola global.

La mejor forma es declararla global e inicializarla en ese mismo momento, que es la otra forma que indicaba kimizombie, y quitar la línea nrf905=NRF905(NRF905_CSN); de tu código. Así

Código:
NRF905 nrf905(NRF905_CSN);

void setup()
{
    //... aquí el código que tienes
    //... pero quitando la línea
    // nrf905=NRF905(NRF905_CSN);
}
Y un detalle: no estás comprando aspirinas, las estás fabricando en casa; así que sí, tienes que saber un poco de química.

Espero que te sirva.


Saludos.


P.D.: Cuando te salga un error búscalo en internet, se suele encontrar soluciones. En este caso, "was not declared in this scope".
02/07/2014 #7


Hola Mikel ....

lo primero, agradecerte por la información.

En cuanto a lo de la farmacia, en realidad se necesitan muchas horas para aprender a hacerlo en casa (aunque me gustaría) y no quiero dedicar tantas horas para poner en marcha un módulo de transmisión. Yo programé hace muchos, muchos años (1984-1995) en Basic y Q-Basic -creo recordar- a modo de hobbie y no se me daba mal.

MikeLunatiko dijo: Ver Mensaje


P.D.: Cuando te salga un error búscalo en internet, se suele encontrar soluciones. En este caso, "was not declared in this scope".
En lo relativo a buscar en internet el error ... es lo primero que hago siempre , y ya lo había hecho. Ello me llevó, entre otras páginas, a la de GitHub. Gracias de cualquier forma por el consejo. De hecho, soy uno de los pioneros en internet en España, ya que fuí uno de los primeros en darme de alta con Servicom (48.000 pta/año), y el programa que más utilizo en el ordenador es Google. Pero por mucho que encuentre .... si desconozco los conocimientos básicos de una disciplina ...... de poco me sirve. Disculpa por el rollo.

Al final he logrado encontrar el motivo: no he respetado el nivel de las carpetas del Sketch.
Una vez cargado de nuevo sin cambiar el nivel de las carpetas ha funcionado la compilación y la carga.

Ahora me toca obligarle a transmitir en una frecuencia sobre los 900 Mhz (tiene una tabla para ello) y efectuar una transmisión continua (sin fin) durante el tiempo suficiente para que el frecuencímetro detecte la frecuencia de emisión, pero eso es otra historia ......

Gracias de nuevo a ambos y un saludo
02/07/2014 #8

Avatar de MikeLunatiko

trifoncar dijo: Ver Mensaje
por mucho que encuentre .... si desconozco los conocimientos básicos de una disciplina ...... de poco me sirve.
Sí, supongo que debí darme cuenta de ello. No sé para qué es el módulo, pero para algo de electrónica lo querrás, que de eso sí sabes, jeje (o eso creo, tienes varios mensajes en el foro).

Si tan pionero fuiste en su día, creo que no deberías dejar los microcontroladores para más adelante, son todo un mundo de posibilidades. Y hay que programarlos, claro. Empezar con Arduino es una buena opción, ya que oculta algunos detalles técnicos con los que un principiante se puede llegar a liar (pero tarde o temprano es bueno aprenderlos). Empieza con los ejemplos, hay algunos muy facilitos de enteder y eso te puede ayudar con el ejemplo del módulo que intentas hacer funcionar.

Las horas que le eches a esto no serán horas perdidas, te lo aseguro

Saludos

---------- Actualizado después de 37 minutos ----------

Bueno, me he quedado intrigado con una cosa: que el ejemplo no declarara la variable nrf905. Y me he bajado el código para ver por qué: en la propia biblioteca se declara una variable llamada así para su uso. La primera vez que veo algo así (lo suyo es que el usuario se declare su propia variable con el nombre que más le guste).
En fin, solo lo comentaba como algo anecdótico.

Saludos.
02/07/2014 #9


Mikel,

mi intención es emitir una señal continua a unos 900 Mh para captarla y medirla con un frecuencímetro con el fin de comprobar el funcionamiento de este último a esas frecuencias. Hasta ahora he podido medir satisfactoriamente hasta 446 Mhz (de un walkie) con bastante precisióm.

Compré los módulos NRF905 (433/868/915 MHz) y NRF24L01 (2,4 Mhz) con el fin de hacer pruebas con el frecuencímetro. Sé que no son de frecuencia muy estable (me acuerdo de tu comentario, Miguelus) pero quiero saber si llega a medirlos, aunque el segundo sería muy apretado porque es el tope del prescaler (MB506).

Parecía muy fácil según varias web donde se podía encontrar un esquema del montaje con arduino y el código. Pero me encontré con lo que aquí he ido describiendo.

Por otra parte, me he animado a intentar crear algún control con dichos módulos, pero tendré que pensarlo más adelante.

Subo un par de fotos

Nota: Las fotos que subí inicialmente mostraban un esquema y un circuito que no se correspondían con el código, por lo que he procedido a quitarlas y sustituirlas por el esquema y el circuito correctos con el fin de no complicar y equivocar al que lo leyese.






El módulo se encuentra al final de las dos tiras multicolores.

En cuanto a lo de progamar PICs te comentaré que lo llevo haciendo desde 2009. Tras una búsqueda larga y tediosa encontré los esquemas de varios programadores que junté en una placa y con ello sigo funcionando. He programado 16F675, 16F84, 16F628 y 16F2550 vía puerto serie. Todo ello lo he necesitado para construir varios capacímetros, un medidor de ESR, dos medidores L/C, un medidor L/C/F y un frecuencímetro. Pero todo ello con código de terceros; yo únicamente me he atrevido a quitar algunas líneas o a modificar parámetros o mensajes.

Subo una foto del programador, que no acabé del todo



Un saludo
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.