Show Posts
Pages: [1] 2
1  International / Software / Re: Pasar datos de una estructura entre clases. on: Today at 05:51:45 am
Muchas gracias por la ayuda. Probé de las dos formas y funciona a la perfección. Ahora voy a intentar implementar un método para que analice los datos de la estructura y otro que elimine los datos de la estructura.

Saludos y muchas gracias.
2  International / Software / Re: Pasar datos de una estructura entre clases. on: September 29, 2014, 05:53:53 am
Hola,
Gracias por la respuesta. Esto solo es un ejemplo pequeño de lo que quiero llegar a hacer.
Lo que trato de hacer es lo siguiente,  tener una librería que recoja los datos del puerto serie (recibir) y otra que trabaje con esos datos( mostrar).
La librería mostrar solo tiene un método debido a que no era capaz de acceder a los datos de la estructura y al final solo intentaba pintarlos para ver si podía acceder o no a ella.
No se si con esto tienes suficiente información para entender lo que trato de hacer.
He probado a  declarar como extern objetoRx y funciona, muchas gracias. De todas formas me gustaría saber si hay una  manera mas correcta de hacer las cosas.
Saludos y muchas gracias.
3  International / Software / Re: Pasar datos de una estructura entre clases. on: September 29, 2014, 02:10:09 am
Hola, perdonad por el código anterior, era solo un ejemplo que hice en el notepad jejeje . Este nuevo código si que compila, adjunto las dos librerías  y el .ino, también os pongo lo que me muestra el monitor serie:
Code:
IniciandoCAPTURA MENSAJES:
++++++
OBJETO RX:

----
printMessages:
----
lista 0
identificador: 3
longitud: A
datos: 4:5:6:7:8:9:A:B:C:D:
OBJETO MOSTAR:

----
printMessages:
lista vacia

OBJETO RX:

----
printMessages:
----
lista 0
identificador: 3
longitud: A
datos: 4:5:6:7:8:9:A:B:C:D:
OBJETO MOSTAR:

----
printMessages:
lista vacia

Se puede ver como el objetoRx si muestra la lista mientras que el objetoMostrar no lo hace.
Muchas gracias.
Saludos.
4  International / Software / Pasar datos de una estructura entre clases. on: September 26, 2014, 03:47:06 am
Hola, lo que quiero hacer es utilizar los datos de una estructura que se encuentra definida en otra librería. Por ejemplo, tengo el archivo .ino y dos librerías: a.h, a.cpp , b.h y b.cpp. (Esto es un ejemplo de lo que quiero hacer con mi programa, que no copio aquí por ser muy extenso)
En a.h tengo definida una estructura de la siguiente forma:
Code:
#ifndef a_h
#define a_h

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif



struct data
{
int l;
uint8_t x;
unsigned char *ptrData;
struct data *nextElement;
};

class a{

public:
struct data *primero;
struct data *ultimo;
int rellenar( unsigned char*& ptrBuffer, int longitudBuffer);
void printMessages();
private:

};

#endif

Y el a.cpp es de la siguiente forma:
Code:
#include "a.h"

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif


void a::printMessages()
{
Serial1.println();
Serial1.println("----");
Serial1.println("printMessages: ");

struct data *aux;
int i=0;
aux=primero;

   
while(aux!=NULL){
Serial1.println("----");
Serial1.print("lista ");
Serial1.println(i);

Serial1.print("x: ");
Serial1.println(aux->x, HEX);
Serial1.print("l: ");
Serial1.println(aux->l, HEX);
Serial1.print("datos: ");
for(int j=0; j< aux->l; j++){
Serial1.print(aux-> ptrData [j], HEX);
Serial1.print(":");
}

aux=aux->nextElement;

i++;
}

if(i==0){
Serial1.println("lista vacia");
}
Serial1.println();
}


int a::rellenar( unsigned char*& ptrBuffer, int longitudBuffer){
int numberOfMessages=0;

boolean _error=false;
Serial1.println("CAPTURA MENSAJES: ");
for(int i=0; i<longitudBuffer; i++){
if(ptrBuffer [i]==”0x0A”){
Serial1.println("++++++");
//Serial1.println(ptrAux[i]);
numberOfMessages++;
int longitud=(uint8_t) ptrBuffer [i+1]<<8 | (uint8_t) ptrBuffer [i+2];
struct data * nuevo;
nuevo=(struct data*) malloc(sizeof(struct data));
if(nuevo!=NULL){
index=0;

nuevo->l=longitud;
nuevo->x= ptrBuffer [i+3];
nuevo->ptrData=(unsigned char*)calloc(1, sizeof(unsigned char));
if(nuevo-> ptrData ==NULL){
_error=true;
}
    if(!_error){
for(int j=0; j<l; j++){
nuevo-> ptrData [index]= ptrBuffer [j+i+4];

index++;
nuevo-> ptrData =(unsigned char*)realloc(nuevo-> ptrData,(index+1)*sizeof(unsigned char));
if(nuevo-> ptrData ==NULL){
_error=true;
j=longitud+1; i=longitudBuffer+1;
}
}


nuevo->nextElement=NULL;//el campo siguiente es null por ser el ultimo elemento de la lista
if(primero==NULL){
primero=nuevo;
ultimo=nuevo;
}
else{
//El que era el ultimo apunta al nuevo
ultimo->nextElement=nuevo;
//y hacemos que el ultimo sea el nuevo
ultimo=nuevo;
}
}
}
else{
Serial1.println("error structura");
_error=true;
}


}
}


free(ptrBuffer);
if(_error){
return(-1);Serial1.println("error");
}
else{
return(numberOfMessages);
}
}


En b.h lo tengo definido de la siguiente forma:
Code:
#ifndef b_h
#define b_h

#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

#include "a.h"

 


 

class b
{
Public
void pintar();
private:

};


#endif

 El b.cpp:

Code:
#if (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif

#include "b.h"

a objeto;


void b::pintar()
{

struct data *aux;
aux=a.primero;

objeto.printMessages();//La lista está vacia.
}
 
Luego en el .ino tengo lo siguiente:
Code:
#include "a.h"
#include "b.h"
a objeto1;
b objeto2;
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
       unsigned char *ptrBuffer=NULL;
        ptrBuffer =(unsigned char*)calloc(50, sizeof(unsigned char));
for(int i=0; i<50; i++){
           ptrBuffer[i]=i;
}
      objeto1.rellenar(,50);
}

void loop()
{

objeto1.printMessages(); //Pinta la lista
      objeto2.pintar(); //No pinta nada


}



El programa compila y pinta la lista si la llamo con el objeto1 pero al llamarla desde el objeto2 me dice que no hay ningún elemento, ¿Cómo puedo solucionar esto?

Gracias,
Saludos.

5  Using Arduino / Networking, Protocols, and Devices / Re: Read parameters of xbee on: February 09, 2013, 04:29:13 am
Hello, thanks for reply. Pauls, the Xbee is Xbee ZB Pro S2B and the xbee is configurated how end device at. To connected the xbee with arduino I use the xbee shield and de pin7 is in the XBee, is pin 12 CTS  / DIO7.
Nick, thanks for the link, I will read the information.
Thanks,
Regards.
6  Using Arduino / Networking, Protocols, and Devices / Read parameters of xbee on: February 08, 2013, 07:27:37 am
I'm trying to read parameters of  xbee. The problem is I can not read parameters if the DIO7/CS  pin of Xbee is disabled but if I activate pin DIO7, the arduino crashes.
The Xbee is in mode at.
the code is this:
Code:
byte data;
void setup()
  {
  Serial.begin(9600);
 }

void loop()
  {
  Serial.println(" \r\n read:");   
  Serial.print("+++");
  Serial.println("\r\nATID");  //  ID 
  while(Serial.available()==0){}
  while(Serial.available()>0){
  data=Serial.read();
  delay(5);       
  }   
   Serial.print(char(data));   
   Serial.println("\r\nATCN");   
  while(Serial.available()==0){}
  while(Serial.available()>0){
  data=Serial.read();
  delay(5);       
  }   
  Serial.print(char(data));
  delay(1000);
}


Any solutions?
Thanks,
Regards.
7  Using Arduino / Networking, Protocols, and Devices / Re: Wireless Switch on: February 06, 2013, 02:13:58 pm
I'll try to do with XBee, the system will sleep 30 seconds and 10ms awake.
Thanks,
Regards.
8  International / Español / Acelerómetro adxl345 on: February 01, 2013, 09:43:25 am
Hola, estoy usando el adxl345. Consigo leer los datos y conectarlo al micro por interrupción. El problema es cuando el micro lo tengo en modo powerDown, el acelerómetro deja de funcionar, nunca entra en la interrupción. Sin embargo, si en lugar de conectar el acelerómetro a la interrupción conecto un cable entre la interrupción y gnd el micro se despierta y entra en la interrupción. Estoy usando la interrupción número 5, pin 18. El código es el siguiente:
Code:
#include <Wire.h>
#include <ADXL345.h>
 #include <Enerlib.h>
Energy energy;
ADXL345 adxl;

unsigned long init_int_time = 0;
unsigned long last_int_time = 0;
int activo=LOW;
void setup(){
  Serial.begin(9600);

 attachInterrupt(5,adx,RISING);
 
configuraradx();
}
  int x,y,z;
  byte interrupts;
void loop(){
 
  //Boring accelerometer stuff   
 
  adxl.readAccel(&x, &y, &z); //read the accelerometer values and store them in variables  x,y,z
 
  // Output x,y,z values - Commented out
  Serial.print(x);
  Serial.print('\t');
  Serial.print(y);
  Serial.print('\t');
  Serial.println(z);
  delay(500);

 
 
    interrupts = adxl.getInterruptSource();

 if(activo)
 {
   activo=LOW;
   Serial.println("Acelerometro");
   delay(10);
 }
//  // freefall
//  if(adxl.triggered(interrupts, ADXL345_FREE_FALL)){
//    Serial.println("freefall");
//    //add code here to do when freefall is sensed
//  }
//
//  //inactivity
//  if(adxl.triggered(interrupts, ADXL345_INACTIVITY)){
//    Serial.println("inactivity");
//     //add code here to do when inactivity is sensed
//  }
//
//  //activity
//  if(adxl.triggered(interrupts, ADXL345_ACTIVITY)){
//    Serial.println("activity");
//     //add code here to do when activity is sensed
//  }
//
//  //double tap
//  if(adxl.triggered(interrupts, ADXL345_DOUBLE_TAP)){
//    Serial.println("double tap");
//     //add code here to do when a 2X tap is sensed
//  }
//
//  //tap
//  if(adxl.triggered(interrupts, ADXL345_SINGLE_TAP)){
//    Serial.println("tap");
//     //add code here to do when a tap is sensed
//  }
energy.PowerDown();
}



void adx()
{
  init_int_time = millis();
   
  if (init_int_time - last_int_time > 200) {
   
        activo = HIGH;
   
  last_int_time = init_int_time;
  }
}
void configuraradx()
{
     adxl.powerOn();
  //set activity/ inactivity thresholds (0-255)
  adxl.setActivityThreshold(75); //62.5mg per increment
  adxl.setInactivityThreshold(75); //62.5mg per increment
  adxl.setTimeInactivity(10); // how many seconds of no activity is inactive?
 
  //look of activity movement on this axes - 1 == on; 0 == off
  adxl.setActivityX(1);
  adxl.setActivityY(1);
  adxl.setActivityZ(1);
 
  //look of inactivity movement on this axes - 1 == on; 0 == off
  adxl.setInactivityX(1);
  adxl.setInactivityY(1);
  adxl.setInactivityZ(1);
 
  //look of tap movement on this axes - 1 == on; 0 == off
  adxl.setTapDetectionOnX(1);
  adxl.setTapDetectionOnY(1);
  adxl.setTapDetectionOnZ(1);
 
  //set values for what is a tap, and what is a double tap (0-255)
  adxl.setTapThreshold(10); //62.5mg per increment
  adxl.setTapDuration(15); //625μs per increment
  adxl.setDoubleTapLatency(10); //1.25ms per increment
  adxl.setDoubleTapWindow(80); //1.25ms per increment
 
  //set values for what is considered freefall (0-255)
  adxl.setFreeFallThreshold(7); //(5 - 9) recommended - 62.5mg per increment
  adxl.setFreeFallDuration(45); //(20 - 70) recommended - 5ms per increment
 
  //setting all interupts to take place on int pin 1
  //I had issues with int pin 2, was unable to reset it
  adxl.setInterruptMapping( ADXL345_INT_SINGLE_TAP_BIT,   ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_DOUBLE_TAP_BIT,   ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_FREE_FALL_BIT,    ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_ACTIVITY_BIT,     ADXL345_INT1_PIN );
  adxl.setInterruptMapping( ADXL345_INT_INACTIVITY_BIT,   ADXL345_INT1_PIN );
 
  //register interupt actions - 1 == on; 0 == off 
  adxl.setInterrupt( ADXL345_INT_SINGLE_TAP_BIT, 1);
  adxl.setInterrupt( ADXL345_INT_DOUBLE_TAP_BIT, 1);
  adxl.setInterrupt( ADXL345_INT_FREE_FALL_BIT,  0);
  adxl.setInterrupt( ADXL345_INT_ACTIVITY_BIT,   0);
  adxl.setInterrupt( ADXL345_INT_INACTIVITY_BIT, 0);
}

Gracias,
Saludos.
9  Using Arduino / Networking, Protocols, and Devices / Wireless Switch on: January 31, 2013, 09:43:36 am
Hello, I found this page: http://www.wirelessirrigation.com/sensors.html
They have a wireless switch and the battery will last for several years. I wondered how you could do this. I know the Xbee technology but it has a big consumption so  that the battery will last as long.
The only way to use Xbee devices is sleeping the devices but then the switch does not open or closes instantly.

Then, How can I make it?

Thanks,
Regards.
10  Using Arduino / Project Guidance / Re: Several switches connected to the same pin. on: January 10, 2013, 03:58:27 pm
Hello, thanks for the help. I will wire  the switches in series.
Thank you very much.
11  International / Español / Re: Varios pulsadores a la misma interrupción on: January 10, 2013, 05:52:55 am
Gracias, me ayudo mucho, usaré la puerta and hecha con diodos.
Saludos y gracias.
12  Using Arduino / Project Guidance / Several switches connected to the same pin. on: January 10, 2013, 04:18:45 am
Hello, I want to connect several switches to the same pin interrupt.
Each switch has this schematic:
http://www.arcan.es/wp-content/uploads/2009/03/reset.jpg[/img]]
But my switches are NC, normally closed, then, the arduino can not detect the interrupt of several switches. It can only detect if there is one switch connected.

Can anyone tell me how to solve this? How can i connected several switches NC to the same pin?

Thanks,
Regards.
13  International / Español / Varios pulsadores a la misma interrupción on: January 10, 2013, 04:01:08 am
Hola, estoy intentando conectar varios pulsadores a la misma interrupción , cada pulsador tendría el siguiene esquema :
http://www.arcan.es/wp-content/uploads/2009/03/reset.jpg
La diferencia es que lo estoy conectando al pin de la interrupción cero, pin digital 2, configurado como FALLING. El problema es que mis pulsadores tienen que ser normalmente cerrados, por lo que al tener varios el arduino no detecta la interrupción. ¿Se os ocurre alguna forma de que pueda conectar "x" pulsadores NC al mismo pin y detectar el cambio de estado?
Gracias,
Saludos.
14  International / Español / Configurar XBee en modo bajo consumo on: December 13, 2012, 04:30:14 am
Hola, estoy tratando de configurar los diferentes modos de bajo consumo del Xbee, lo tengo configurado cono end device. La configuración del X-CTU es la siguiente:
SM=4;  Cyclic sleep
SP=3E8; 1000ms*10ms
SN=3C; 60
ST=1388;5000 ms
Por lo que tengo entendido el tiempo que estaría en modo sleep es el siguiente:
SP*SN=(1000*10)*60=600000; 10 minutos
Entonces la antena estaría dormida durante 10 minutos, después  permanecería despierta 5 segundos y luego se vuelve a dormir.
Mi problema es que la antena solo permanece dormida unos 30 segundos y luego está despierta los 5 segundos del ST.
¿Alguien me podría decir si me estoy equivocando o como podría hacerlo?
15  International / Hardware / Re: Programador avrisp stk 500 no funciona on: October 25, 2012, 02:53:24 am
Hola, selecciono el micro en Atmel Studio 4 y no funciona. Descargué el Atmel Studio 6 y creo un nuevo proyecto y en Tools voy a add stk500 selecciono el puerto serie, COM26, y luego en Tools-->Device Programming-->tool no aparece nada, es como si el atmel studio no detectara el programador. También probe en la opción No tool Selected y tampoco me reconoce el programador.
Saludos.
Pages: [1] 2