Re: array

como hacer una reglo dinamico en arduino?

}
//Parte de los arreglos y apuntadores
byte = key ;
key=dato1;
oid setup()
{ Serial.begin(9600);}

void loop(){
long h = { ‘dato1’,‘dato2’,‘dato3’,‘dato4’,‘dato5’,‘dato6’,‘dato7’,‘dato8’,’‘dato9’,‘dato10’,‘dato11’,‘dato12’,‘dato13’,‘dato14’,‘dato15’,'dato16} ; // me parese que el char no acepta mas de 8 datos
long *ptr = h ;
for (int i=0 ; i < 17 ; i++)
Serial.print(*ptr++);// esta sentencia *ptr++ hace que el puntero pase al siguiente " casilla" y asi pueda escribir en el siguien"

int num = h;
int *ptrNum;
ptrNum = #
*ptrNum = num ;
Serial.println( num);
}
tengo este codigo quiero resivir los datos almasenarlos en un array para poder enviarlos via gsm por utd !

Esta es una forma pero

// Declaracion int* myArray = 0; int myArraySize = 0;

// supongamos que el tamaño contiene algun valor que se determina en tiempo de compilación // por ejemplo si viniera de una fuente externa

if (myArray != 0) { myArray = (int*) realloc(myArray, size * sizeof(int)); } else { myArray = (int*) malloc(size * sizeof(int)); }

El tamaño del arreglo debe conocerse en tiempo de compilación. Otra forma de asignar memoria es

char *charArray = malloc(sizeof(char)*x);

donde x(entero) puede establecerse en el código de la aplicación (puedes cargarlo de la EEPROM por ejemplo).

Pero si tienes que declarar varios arreglos del mismo tamaÑo hay que declarar la constante antes como acá:

const int arrsize = 10; char array1[arrsize]; int array2[arrsize];

o el tipo de variable que gustes.

EDITO: 1) NO había visto el resto de tu post. En el otro sitio no estaba el código. 2) usa tags para insertar códigos asi:

Aca dice como insertar códigos |500x133

EDITO 2 puedes definir long h[16] = {16 números}

}
//Parte de los arreglos y apuntadores
byte = key ;
key=dato1; 
oid setup()
   { Serial.begin(9600);}

void loop(){
      long h[] = { 'dato1','dato2','dato3','dato4','dato5','dato6','dato7','dato8',''dato9','dato10','dato11','dato12','dato13','dato14','dato15','dato16} ; // me parese que el char no acepta mas de 8 datos
       long *ptr = h ;
       for (int i=0 ; i < 17 ; i++)
            Serial.print(*ptr++);// esta sentencia *ptr++ hace que el puntero pase al siguiente " casilla" y asi pueda escribir en el siguien"
         
int num = h;
int *ptrNum;
ptrNum = &num;
*ptrNum = num ;
Serial.println( num); 
}

Sorry jejee a lo mejor asi se entiendo e queria hacer con apuntadores y arreglos no se si se pueda de esa forma

Hola. El código que pones está incompleto, por lo que no sé qué estás intentando hacer. No obstante, ¿esto qué significa?

      long h[] = { 'dato1','dato2','dato3','dato4','dato5','dato6','dato7','dato8',''dato9','dato10','dato11','dato12','dato13','dato14','dato15','dato16} ; // me parese que el char no acepta mas de 8 datos

Veo que el compilador de arduino traga con ello, pero no creo que esté guardando lo que tú esperas que guarde.

Además de mediante punteros, también puedes pasar mediante referencias; pero primero habría que tener claro qué es lo que quieres hacer.

Lo que estoy haciendo es un codificador de tonos DTMF con la primera parte de la programacion y con ayuda de arduino y un circuito electronico logre codificar la señal y me lansa una cadena de caracteres 16 para hacer exactos, lo que necesito hacer es guardar esos 16 caracteres en un array pero tiene que ser dinamico para que pueda guardar cualquier configuracion de los 16 caracteres y asi ere array poderlo mandar via gsm a un decodificador y asi pasar tono DTMF de modo inalambrico, si alguien conoce alguna forma mas sencilla anexo mi codigo

#define IRQ_PIN  2   // Puerto Del MCU, Conectado SID (Presencia De datos )
#define D0_PIN   3   // Puerto Recibe dato Binario 0
#define D1_PIN   4   // Puerto Recibe dato Binario 1
#define D2_PIN   5   // Puerto Recibe dato Binario 2
#define D3_PIN   6   // Puerto Recibe dato Binario 3
#include <GSM.h> 
#include <java.util.h>
int add=0;
byte irq_state;

void setup()
{
 // Configura El Puerto Serial 9600,8,N,1
 Serial.begin(9600);
 
 // Pone Los Puerto En Modo De Lectura
 pinMode(IRQ_PIN, INPUT); 
 pinMode(D0_PIN, INPUT); 
 pinMode(D1_PIN, INPUT); 
 pinMode(D2_PIN, INPUT); 
 pinMode(D3_PIN, INPUT); 
   
}

void loop()
{
 // Espera a Que Haya Una Senal o Tono 
 irq_state = digitalRead(IRQ_PIN);
 
 if ( irq_state == 1 )
    {

      Serial.print("");
      char key = read_codigo(); // Lee El Codigo DTMF
      Serial.print(key); // Imprime La Tecla recibida
      delay(500);          // Pausa Para Sincronizar La Senal o IRQ

    }
}
/*-------------------------------------------------------------*/
byte read_codigo()
{
 byte dato;           // Variable Que Tiene El Valor byte De La tecla
 char key;            // Variable Que Tiene El Valor Char  tecla


 byte D0,D1,D2,D3;    // Variable Donde Se Lee el Estado
 
 // Lee Los Estado Logico o Binario Del MT8870 (1 o 0 , ON o OFF )
 D0 = digitalRead(D0_PIN);
 D1 = digitalRead(D1_PIN);
 D2 = digitalRead(D2_PIN);
 D3 = digitalRead(D3_PIN);
 
 // Covierte De Binario A BYTE o ENTERO
 // Escribe Los BITS En Una Variable dato
 bitWrite(dato,0,D0);
 bitWrite(dato,1,D1);
 bitWrite(dato,2,D2);
 bitWrite(dato,3,D3);

// Convierte La Tecla a CHAR
 if ( dato == 1  ) key = '1';
 if ( dato == 2  ) key = '2';
 if ( dato == 3  ) key = '3';
 if ( dato == 4  ) key = '4';
 if ( dato == 5  ) key = '5';
 if ( dato == 6  ) key = '6';
 if ( dato == 7  ) key = '7';
 if ( dato == 8  ) key = '8';
 if ( dato == 9  ) key = '9';
 
 if ( dato == 10 ) key = '0';
 if ( dato == 11 ) key = '*';
 if ( dato == 12 ) key = '#';
 if ( dato == 13 ) key = 'A';
 if ( dato == 14 ) key = 'B';
 if ( dato == 15 ) key = 'C';
 if ( dato == 0  ) key = 'D';
 

 
return key;
}
//Parte de los arreglos y apuntadores
byte = key ;
key=dato1; 
oid setup()
   { Serial.begin(9600);}

void loop(){
      long h[] = { 'dato1','dato2','dato3','dato4','dato5','dato6','dato7','dato8',''dato9','dato10','dato11','dato12','dato13','dato14','dato15','dato16} ; // me parese que el char no acepta mas de 8 datos
       // h[ 16] = {16 datos} puede ser asi 
       long *ptr = h ;
       for (int i=0 ; i < 17 ; i++)
            Serial.print(*ptr++);// esta sentencia *ptr++ hace que el puntero pase al siguiente " casilla" y asi pueda escribir en el siguien"
         
int num = h;
int *ptrNum;
ptrNum = &num;
*ptrNum = num ;
Serial.println( num); 
}

Lo que no comprendo es porque hay dos setup y dos loop

#include <GSM.h> 

#define IRQ_PIN  2   // Puerto Del MCU, Conectado SID (Presencia De datos )
#define D0_PIN   3   // Puerto Recibe dato Binario 0
#define D1_PIN   4   // Puerto Recibe dato Binario 1
#define D2_PIN   5   // Puerto Recibe dato Binario 2
#define D3_PIN   6   // Puerto Recibe dato Binario 3

int add 		=0;
byte irq_state;
char cdtmf[16] = {'1','2','3','4','5','6','7','8','9','0','*',''#'','A','B','C','D'}
//Parte de los arreglos y apuntadores
//byte = key ;
//key=dato1; 

void setup() {

 // Configura El Puerto Serial 9600,8,N,1
 Serial.begin(9600);
 
 // Pone Los Puerto En Modo De Lectura
 pinMode(IRQ_PIN, INPUT); 
 pinMode(D0_PIN, INPUT); 
 pinMode(D1_PIN, INPUT); 
 pinMode(D2_PIN, INPUT); 
 pinMode(D3_PIN, INPUT); 
   
}

void loop()
{
 // Espera a Que Haya Una Senal o Tono 
 irq_state = digitalRead(IRQ_PIN);
 
 if ( irq_state == 1 )   {

      Serial.print("");
      char key = read_codigo(); // Lee El Codigo DTMF
      Serial.print(key); // Imprime La Tecla recibida
      delay(500);          // Pausa Para Sincronizar La Senal o IRQ

    }
}

/*-------------------------------------------------------------*/
byte read_codigo() {
	byte dato;           // Variable Que Tiene El Valor byte De La tecla
	char key;            // Variable Que Tiene El Valor Char  tecla


	byte D0,D1,D2,D3;    // Variable Donde Se Lee el Estado
	 
	// Lee Los Estado Logico o Binario Del MT8870 (1 o 0 , ON o OFF )
	D0 = digitalRead(D0_PIN);
	D1 = digitalRead(D1_PIN);
	D2 = digitalRead(D2_PIN);
	D3 = digitalRead(D3_PIN);
	 
	// Covierte De Binario A BYTE o ENTERO
	// Escribe Los BITS En Una Variable dato
	bitWrite(dato,0,D0);
	bitWrite(dato,1,D1);
	bitWrite(dato,2,D2);
	bitWrite(dato,3,D3);

	key = cdtmf[dato]; // reemplaza toda la conversión posterior
	return key;
}

La segunda parte si te entiendo bien queda asi, pero no esta terminada porque no entiendo que quieres hacer

char cdtmf[17] = {'1','2','3','4','5','6','7','8','9','0','*','#','A','B','C','D'};

void setup() {

 // Configura El Puerto Serial 9600,8,N,1
 Serial.begin(9600);
  // Pone Los Puerto En Modo De Lectura
  
}


void loop(){
    char *ptr = cdtmf;
    
    for (int i=0 ; i < 17 ; i++)
            Serial.print(*ptr++);// esta sentencia *ptr++ hace que el puntero pase al siguiente " casilla" y asi pueda escribir en el siguien"
    Serial.println();     
 //int num = h;
 //int *ptrNum;
 //ptrNum = &num;
 //*ptrNum = num ;
 //Serial.println( num); 
}

Hasta donde no esta comentado funciona