}
//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 !
}
//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);
}
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 = #
*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 = #
//*ptrNum = num ;
//Serial.println( num);
}