Go Down

Topic: Problema para imprimir datos. (Read 1 time) previous topic - next topic

camandper

Buen día,

Les comento, debo realizar un proyecto el cual debe leer 32 sensores que censan la humedad de la tierra, lo estoy haciendo con Arduino Uno, conectando a sus entradas Analógicas unos multiplexores CD74HC4067,
el objetivo es que cada X tiempo, pueda leer los 32 sensores desde el serial con la programación que tengo realiza de a una lectura a la vez, pero yo necesito es que en el monitor imprima los 32 datos a la vez, y que vuelva ha hacer des pues de x tiempo en otro renglón del cuadro monitor serial.

Para tener la lectura de cada sensor utilizo un multiplexor que en sus pines de selección se conecta el contador binario que tengo dentro del mismo arduino para que haga un cambio automático y pueda leer todos los sensores conectados a cada multiplexor.

La verdad llevo poco tiempo programando arduino desde hace casi un mes, y supongo que se debe hacer con algún tipo de vector pero no es mi fuerte la programación y aunque he leído y buscado en google o en libros y no logro entender como hacerlo.

Agrego mi programación para que al que pueda me pueda dar una orientación de como hacer           



Code: [Select]

/*
En este proyecto s3e debe realizar la lectura de la señales de sensores de humedad de tierra para un cultivo de fruta.
Para ello se utilzia sensores "FC-28", que permiten la medicion de la humedad de la tierra.
Estos sensores van conectados a entradas de un multiplexor CD74HC4067, el cual tiene unos pines de seleccion,
dependiendo de la entrada binaria en estos pines el multiplexor mostrara los datos de la entrada correspondiente.
Para poder tener una seleccion automatica de lectura del multiplexor se utiliza un contador binario que va de 0 a 15 y permite realizar lecturas de manera continua.
En el momento se tienen dos multiplexores los cuales estan conectados a nuestro Arduino UNO R3 en sus entradas analogicas.(A0,A1).
*/

// Estas son las variables que guardaran los respectivos datos.

const int eanalogica1 = A0;          // Pin de entrada analógica que tendra conectada el primer multiplexor.
const int eanalogica2 = A1;          // Pin de entrada analógica que tendra conectada el segundo multiplexor.
const byte ledPin[] = {2,3,4,5};     // Aqui declaro lo que va ser la salidad digitales, estas mismas van a ir conectadas a los pines selectores de los multiplexores.
int count=0;                         // Variable que va ser la que guardara el conteo digital.
unsigned long changeTime;            // contador de tiempo usado para el conteo binario.
int sensor1 = 0;                     // Variable para la lectura de datos que emita el primer multiplexor.
int led1 = 0;                        // Variable que guardara un mapeo en una escala porcentuial por si se requiere una alarma o algun tipo de aviso referente a los sensores conectados a el multiplexor 1.
int sensor2 = 0;                     // Variable para la lectura de datos que emita el primer multiplexor.
int led2 = 0;                        // Variable que guardara un mapeo en una escala porcentuial por si se requiere una alarma o algun tipo de aviso referente a los sensores conectados a el multiplexor 1.

void setup() {

  Serial.begin(9600);                // Inicialice las comunicaciones seriales a 9600 bps:
  for (int x=0; x<10; x++) {         // vaya sumabdo a la variable (1+1)
    pinMode(ledPin[x], OUTPUT);      // los preparamos para salida, se deben indicar ya que son salidas digitales.
}
 
}

void loop()
{
 if(count==0)                        // Cada vez que el cntador este en cero al imprimir en monitor pase al sigueinte renglon.
 {
  Serial.println("");
}

funcion();                           // Ejecute mas adelante esta funcion, se debe modificar a 2mil milisegundos debido a
                                     // el contador esta regulado a los dos segundos del cristal del microcontrolador.
contadorbin();                       // Ejecute el contador en simultaneo sin interferir con la lectura del sensor y que seleccione que entrada vamos a leer de todos los multiplexores.
}
void funcion(){
 
  // Leer valor analogico:
 
 sensor1 = analogRead(eanalogica1);  // Lea la señal que llega en A0.
 sensor2 = analogRead(eanalogica2);  // Lea la señal que llega en A1.
 
// Calcule la señal del sensor:
 
led1 = map(sensor1, 0, 1023, 100, 0);// Este mapeo puede ser usado para tener una medid de 0 a 100 en porcentage del sensor.
led2 = map(sensor2, 0, 1023, 100, 0);// Este mapeo puede ser usado para tener una medid de 0 a 100 en porcentage del sensor.
 
 
// Ponga el resultado de sensor uno en Serial Monitor o ver desde el computador:


 
Serial.print("A");                   // Caracter indicador de el primer Multiplexor.
Serial.print(count);                 //Pocicion de lectura de salida de un multiplexor.
Serial.print(",");
Serial.print(sensor1);               //lectura de sensor
Serial.print(";"); 
Serial.print("B");                   //Caracter indicador de el segundo Multiplexor.
Serial.print(count);                 // Misma Pocicion de lectura de salida de un multiplexor.
Serial.print(",");
Serial.print(sensor2);               //lectura de sensor.
Serial.print(";"); 
Serial.print("");
 
  // tiempo de 2 milisegundos para leer
  delay(2000);
  }
  void contadorbin(){
    if ((millis() - changeTime) > 1000) {          //si ha pasado 1000 milisegundos contar uno mas
    count ++;
    setNumber();                                   //ponemos el numero en los leds
    changeTime = millis();                         //inicia el condador de tiempo a 0
  }
}

void setNumber (){
  if (count>15) count = 0;                     //volver a empezar si es mayor de 4 bits
 
  for (int i = 0; i<4;i++){                    //para cada bit mira si tiene que encender el led correspondiente
    digitalWrite(ledPin[i], (count >> i) & 1);
   
  }
    }

                                                                                   

J-M-L

#1
Aug 27, 2019, 06:07 pm Last Edit: Aug 27, 2019, 06:08 pm by J-M-L
This is the English speaking forum

Code: [Select]

const byte ledPin[] = {2,3,4,5};
...
for (int x=0; x<10; x++) {
    pinMode(ledPin[x], OUTPUT);
...
hum.... x<10 ??
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

camandper

Disculpa  no sabia por lo que el traductor me mostró en español pensé que estaba en la ubicación correcta.

fede9559

hola disculpame, yo tampoco se mucho del tema pero vos necesitarias que la parte de serial.print se ejecute cada X tiempo?
para que haga un renglon, podes hacer al ultimo serial.print cambiarlo por serial.println para que envie el retorno de carro y el prox renglon te quede abajo.

y con respecto a que se ejecute cada cierto tiempo, buscate el ejemplo en arduino que dice "blink without delay" que la idea es tomar un estado de millis() y definirlo como tcero, ir tomando sucesivos estados y haciendo la resta para hallar un delta tiempo y con un if abajo comparando esos deltas hasta que te de mayor a tu X tiempo.. y si va a estar mucho tiempo enchufado arduino fijate que millis() se desborda a los 49 dias creo aprox

y ya estaria.. ahora el resto del codigo no se si anda o no.. jaj

saludos

camandper

Gracias por la respuesta.

Lo del tiempo eso no es problema se puede cuadrar luego, lo que me ha estado molestando y que no he encontrado como hacer, es que en total en el momento tengo 16 lecturas de dos sensores, cuando envió a imprimir imprime uno luego el otro y luego el otro, yo lo que requiero es que imprima al tiempo las 16 lecturas respetando cada entrada correspondiente del multiplexor

surbyte

He modificado tu código y tal vez no lo comprendas pero hago lo mismo de modo simple

Code: [Select]

const int eanalogica1 = A0;          // Pin de entrada analógica que tendra conectada el primer multiplexor.
const int eanalogica2 = A1;          // Pin de entrada analógica que tendra conectada el segundo multiplexor.
const byte ledPin[] = {2,3,4,5};     // Aqui declaro lo que va ser la salidad digitales, estas mismas van a ir conectadas a los pines selectores de los multiplexores.
int count = 0;                         // Variable que va ser la que guardara el conteo digital.
unsigned long changeTime;            // contador de tiempo usado para el conteo binario.
int sensor1 = 0;                     // Variable para la lectura de datos que emita el primer multiplexor.
int led1 = 0;                        // Variable que guardara un mapeo en una escala porcentuial por si se requiere una alarma o algun tipo de aviso referente a los sensores conectados a el multiplexor 1.
int sensor2 = 0;                     // Variable para la lectura de datos que emita el primer multiplexor.
int led2 = 0;                        // Variable que guardara un mapeo en una escala porcentuial por si se requiere una alarma o algun tipo de aviso referente a los sensores conectados a el multiplexor 1.

void setup() {

  Serial.begin(9600);               
  DDRD = B00111100;              // defino como salidas a 2 3 4 5 para ellos los pines indicados se ponen en 1
}

void loop() {

  for (byte i=0; i<16; i++) {
       PORTD = i << 2;                              // el valor de i se desplaza 2 veces y eso
                                                              // maneja el direc de los multiplexoes
       sensor1 = analogRead(eanalogica1);  // Lea la señal que llega en A0.
       sensor2 = analogRead(eanalogica2);  // Lea la señal que llega en A1.
       char buffer[40];
       sprintf(buffer, "A%d=%4d B%d=%4d", i, sensor1, i, sensor2);
       Serial.println(buffer);                         // Caracter indicador de el primer Multiplexor.       
       delay(1000);
  }
}


Lo que no me gusta es el uso de delay() pero al  no hacer mucho mas es mas simple.

Las dos cosas raras son DDRD y PORTD

DDRD es lo que se usa para programar el puerto D, si pones 1 será salida y si pones 0 es entrada
He puesto 1s desde 5 a 2 y los demas los dejé como estaban

PORTD es el manejo del puerto D que va de 0 a 7.
Si le escribes algo ese algo tomará la representación que corresponde desde 0 a 255.
Entonces un PORTD = 15 activaría los pines 3 2 1 0 pero en nuestro caso queremos que sean desde 2 a 5 entonces hay que moverlos a izquierda 2 posiciones y eso se hace con << 2

Entonces una variable que va desde 0 a 15 desplazada en 2 lugares termina cambiando las salidas 2 3 4 5 en los valores binarios que requieres para direccionar los multiplexores y encender los LEDs.




camandper

#6
Aug 28, 2019, 03:44 pm Last Edit: Aug 28, 2019, 10:11 pm by camandper
Buen día,
La simplicidad que has hecho del código es fascinante lo agradezco bastante ya que simplifica mucho para el resultado final de mi proyecto, sin embargo sigo con el inconveniente inicial.
Te comento completamente lo que debo hacer es posible que no redacte de manera adecuada al comienzo del foro.
Las lecturas de estos sensores son para un cultivo de fruta, estos datos van a ser enviados a un servidor por medio de Internet, mediante un SIM800L, en este servidor tengo un escuchador que debe recibir la información cada media hora maso menos, cuando yo envió los datos, lo hace de manera progresiva de lectura a lectura:

"A0,399;B0,288;
A1,400;B1,335;
.
.
.
A15,296;B15,512"


Sin embargo lo que necesito es que me llegue todo completo en un solo renglón por ciclo es decir que al mismo tiempo me envié:

"A0,399;B0,288;A1,400;B1,335;...A15,296;B15,512", después de esto pase media hora y envié otro ciclo completo.

Que sucede si envió como me esta en este momento el programa, por lo que usamos la red GSM, corro el riesgo de que se sature la red y aveces no se envíen datos que y quede sin la lectura del el sensor en ese momento. inicialmente pensé que solo quitando el "ln" del "print" podía hacerlo sin embargo me sigue enviando dato por dato pero sin lograr que me agrupe todas las 16 lecturas y la envié de una sola.
Yo creo que debería usar algo similar a un arrays pero como no tengo un basto conocimiento sobre la programación se me ha dificultado bastante.

El codigo que he usado para esto es el siguiente:

Code: [Select]

#include <SoftwareSerial.h>
SoftwareSerial myGsm(7,8);
float temp;
int tempPin = 0;
const int eanalogica1 = A0;  // Pin de entrada analógica que el FC-28 está conectado, primer sensor
const int eanalogica2 = A1; //este sera el segundo sensor
const byte ledPin[] = {2,3,4,5};// Declaro salidas fisicas a utilizar de manera digital.
int count=0; //contador
unsigned long changeTime;
int sensor1 = 0;       // valor leído
int led1 = 0;        // salida de valor al (salida analógica) no se necesita configurar el pwm porque ya esta integrado predeterminado en arduino
int sensor2 = 0;
int led2 = 0;
void setup()
{

myGsm.begin(9600);
Serial.begin(9600);
delay(500);

myGsm.println("AT+CIPSHUT");
delay(1000);
printSerialData();

myGsm.println("AT+CIPMUX=0");
delay(2000);
printSerialData();

myGsm.println("AT+CGATT=1");
delay(1000);
printSerialData();

myGsm.println("AT+CSTT=\"internet.comcel.com.co\",\"\",\"\"");//setting the APN,username & password
delay(5000);
printSerialData();

myGsm.println();
myGsm.println("AT+CIICR");
delay(6000);
printSerialData();

myGsm.println("AT+CIFSR"); //get IP address
delay(2000);
printSerialData();

myGsm.println("AT+CIPSTART=\"TCP\",\"167.86.122.65\",\"2613\"");
delay(5000);
printSerialData();
delay(5000);
}

void loop()
{

//delay(2000);
if(count==0)//Cada vez que se lea la pocicion "0" en la tabla de verdad que se imprima en en un nuevo renglon.
 {
  myGsm.println("");
}
 myGsm.println("AT+CIPSEND");
printSerialData();
funcion();// ejecute mas adelante esta funcion, se debe modificar a 2mil milisegundos debido a
            // el contador esta regulado a los dos segundos del cristal del microcontrolador.
contadorbin();//ejecute el contador mas adelante sin interferir con la lectura del sensor           

delay(1000);
}
void printSerialData()
{
while(myGsm.available()!=0)
Serial.write(myGsm.read());
}

void funcion(){
  // Leer valor analogico:
  sensor1 = analogRead(eanalogica1);
  sensor2 = analogRead(eanalogica2);
  // Calcule la señal del sensor:
  led1 = map(sensor1, 0, 1023, 100, 0);
  led2 = map(sensor2, 0, 1023, 100, 0);
 
// Ponga el resultado de sensor uno y dos a el sim800l que lo emvia:
myGsm.print("A");//Sensor conectado en la entrada A0
myGsm.print(count);
myGsm.print(",");
myGsm.print(sensor1);
myGsm.print(";");
myGsm.print("B");//Sensor Conectado en la entrada A1
myGsm.print(count);
myGsm.print(",");
myGsm.print(sensor2);
myGsm.print(";");
//myGsm.print("");

delay(1000);
//printSerialData();
myGsm.write(0x1A);
delay(1000);
printSerialData();


  }
  void contadorbin(){
    if ((millis() - changeTime) > 500) {   //si ha pasado 1000 milisegundos contar uno mas
    count ++;
    setNumber();
    changeTime = millis();                     //inicia el condador de tiempo a 0
   
  }
}

void setNumber (){
  if (count>15) count = 0;                     //volver a empezar si es mayor de 4 bits

  for (int i = 0; i<4;i++){  //para cada bit mira si tiene que encender el led correspondiente
    digitalWrite(ledPin[i], (count >> i) & 1);
       delay(2000);
  }
    }




camandper

Buen día,

Les comento yo ya he estado comentando este tema en otro foro, pero aunque me han dado unos tips importantes para mejorar mi programación sigo con un inconveniente.

Nuevamente aclaro que llevo muy poco tiempo programando y aunque leo bastante hay conceptos y formas de código que no logro entender, si es posible que me puedan colaborar les agradecería.

"Les comento, debo realizar un proyecto el cual debe leer 32 sensores que censan la humedad de la tierra, lo estoy haciendo con Arduino Uno, conectando a sus entradas Analógicas unos multiplexores CD74HC4067,
el objetivo es que cada X tiempo, pueda leer los 32 sensores desde el serial con la programación que tengo realiza de a una lectura a la vez, pero yo necesito es que en el monitor imprima los 32 datos a la vez, y que vuelva ha hacer des pues de x tiempo en otro renglón del cuadro monitor serial."

Te comento completamente lo que debo hacer es posible que no redacte de manera adecuada al comienzo del foro.
Las lecturas de estos sensores son para un cultivo de fruta, estos datos van a ser enviados a un servidor por medio de Internet, mediante un SIM800L, en este servidor tengo un escuchador que debe recibir la información cada media hora maso menos, cuando yo envió los datos, lo hace de manera progresiva de lectura a lectura:

"A0,399;B0,288;
A1,400;B1,335;
.
.
.
A15,296;B15,512"


Sin embargo lo que necesito es que me llegue todo completo en un solo renglón por ciclo es decir que al mismo tiempo me envié:

"A0,399;B0,288;A1,400;B1,335;...A15,296;B15,512", después de esto pase media hora y envié otro ciclo completo.

Que sucede si envió como me esta en este momento el programa, por lo que usamos la red GSM, corro el riesgo de que se sature la red y aveces no se envíen datos que y quede sin la lectura del el sensor en ese momento. inicialmente pensé que solo quitando el "ln" del "print" podía hacerlo sin embargo me sigue enviando dato por dato pero sin lograr que me agrupe todas las 16 lecturas y la envié de una sola.
Yo creo que debería usar algo similar a un arrays pero como no tengo un basto conocimiento sobre la programación se me ha dificultado bastante.

El codigo que he usado para esto es el siguiente:

Code: [Select]


#include <SoftwareSerial.h>
SoftwareSerial myGsm(7,8);
float temp;
int tempPin = 0;
const int eanalogica1 = A0;  // Pin de entrada analógica que el FC-28 está conectado, primer sensor
const int eanalogica2 = A1; //este sera el segundo sensor
const byte ledPin[] = {2,3,4,5};// Declaro salidas fisicas a utilizar de manera digital.
int count=0; //contador
unsigned long changeTime;
int sensor1 = 0;       // valor leído
int led1 = 0;        // salida de valor al (salida analógica) no se necesita configurar el pwm porque ya esta integrado predeterminado en arduino
int sensor2 = 0;
int led2 = 0;
void setup()
{

myGsm.begin(9600);
Serial.begin(9600);
delay(500);

myGsm.println("AT+CIPSHUT");
delay(1000);
printSerialData();

myGsm.println("AT+CIPMUX=0");
delay(2000);
printSerialData();

myGsm.println("AT+CGATT=1");
delay(1000);
printSerialData();

myGsm.println("AT+CSTT=\"internet.comcel.com.co\",\"\",\"\"");//setting the APN,username & password
delay(5000);
printSerialData();

myGsm.println();
myGsm.println("AT+CIICR");
delay(6000);
printSerialData();

myGsm.println("AT+CIFSR"); //get IP address
delay(2000);
printSerialData();

myGsm.println("AT+CIPSTART=\"TCP\",\"167.86.122.65\",\"2613\"");
delay(5000);
printSerialData();
delay(5000);
}

void loop()
{

//delay(2000);
if(count==0)//Cada vez que se lea la pocicion "0" en la tabla de verdad que se imprima en en un nuevo renglon.
 {
  myGsm.println("");
}
 myGsm.println("AT+CIPSEND");
printSerialData();
funcion();// ejecute mas adelante esta funcion, se debe modificar a 2mil milisegundos debido a
            // el contador esta regulado a los dos segundos del cristal del microcontrolador.
contadorbin();//ejecute el contador mas adelante sin interferir con la lectura del sensor           

delay(1000);
}
void printSerialData()
{
while(myGsm.available()!=0)
Serial.write(myGsm.read());
}

void funcion(){
  // Leer valor analogico:
  sensor1 = analogRead(eanalogica1);
  sensor2 = analogRead(eanalogica2);
  // Calcule la señal del sensor:
  led1 = map(sensor1, 0, 1023, 100, 0);
  led2 = map(sensor2, 0, 1023, 100, 0);
 
// Ponga el resultado de sensor uno y dos a el sim800l que lo emvia:
myGsm.print("A");//Sensor conectado en la entrada A0
myGsm.print(count);
myGsm.print(",");
myGsm.print(sensor1);
myGsm.print(";");
myGsm.print("B");//Sensor Conectado en la entrada A1
myGsm.print(count);
myGsm.print(",");
myGsm.print(sensor2);
myGsm.print(";");
//myGsm.print("");

delay(1000);
//printSerialData();
myGsm.write(0x1A);
delay(1000);
printSerialData();


  }
  void contadorbin(){
    if ((millis() - changeTime) > 500) {   //si ha pasado 1000 milisegundos contar uno mas
    count ++;
    setNumber();
    changeTime = millis();                     //inicia el condador de tiempo a 0
   
  }
}

void setNumber (){
  if (count>15) count = 0;                     //volver a empezar si es mayor de 4 bits

  for (int i = 0; i<4;i++){  //para cada bit mira si tiene que encender el led correspondiente
    digitalWrite(ledPin[i], (count >> i) & 1);
       delay(2000);
  }
    }

surbyte

Porque abres otro hilo similar a este

Problema para imprimir datos

son la misma cosa!!




camandper

Es que no se como hacer para volver a mirar ese foro, inicial, hasta ayer me salia ahí en foros en español y después no aparecía pensé que se había borrado, por eso volví a poner con todo lo que había explicado antes.
Disculpas y pues ya ojala me pudieran colaborar. para poder no darle tantas largas al tema y de paso aprender a ver los foros que yo ya he iniciado.

camandper

Bueno he estado leyendo y creo que ahí maneras de hacer eso con algo que dicen llamar concatenación, he visto que eso se hace con string, yo como puedo hacer, que eso funciones, para poder hacer lo que necesito que todos los datos de mi sensor los pueda ver en un solo renglón al momento de enviarlos.

surbyte

#11
Aug 31, 2019, 01:20 am Last Edit: Aug 31, 2019, 01:22 am by surbyte
Aunque en general hay cosas para mejorar en el código, tal vez esto haga lo que buscas.
No envia hasta tener los 16 datos desde 0 a 15.

Code: [Select]
#include <SoftwareSerial.h>
SoftwareSerial myGsm(7,8);

float temp;
int tempPin = 0;
const int eanalogica1 = A0;  // Pin de entrada analógica que el FC-28 está conectado, primer sensor
const int eanalogica2 = A1; //este sera el segundo sensor
const byte ledPin[] = {2,3,4,5};// Declaro salidas fisicas a utilizar de manera digital.
int count=0; //contador
unsigned long changeTime;
int sensor1 = 0;       // valor leído
int led1 = 0;        // salida de valor al (salida analógica) no se necesita configurar el pwm porque ya esta integrado predeterminado en arduino
int sensor2 = 0;
int led2 = 0;
String data = "";

void setup() {
  myGsm.begin(9600);
  Serial.begin(9600);
  delay(500);

  myGsm.println("AT+CIPSHUT");
  delay(1000);
  printSerialData();

  myGsm.println("AT+CIPMUX=0");
  delay(2000);
  printSerialData();

  myGsm.println("AT+CGATT=1");
  delay(1000);
  printSerialData();

  myGsm.println("AT+CSTT=\"internet.comcel.com.co\",\"\",\"\"");//setting the APN,username & password
  delay(5000);
  printSerialData();

  myGsm.println();
  myGsm.println("AT+CIICR");
  delay(6000);
  printSerialData();

  myGsm.println("AT+CIFSR"); //get IP address
  delay(2000);
  printSerialData();

  myGsm.println("AT+CIPSTART=\"TCP\",\"167.86.122.65\",\"2613\"");
  delay(5000);
  printSerialData();
  delay(5000);
}

void loop() {

  //delay(2000);
  if (count == 0) { //Cada vez que se lea la pocicion "0" en la tabla de verdad que se imprima en en un nuevo renglon.
      myGsm.println("");
  }
  myGsm.println("AT+CIPSEND");
  printSerialData();
  funcion();          // ejecute mas adelante esta funcion, se debe modificar a 2mil milisegundos debido a
                      // el contador esta regulado a los dos segundos del cristal del microcontrolador.
  contadorbin();      //ejecute el contador mas adelante sin interferir con la lectura del sensor          
  delay(1000);
}

void printSerialData()  {
  while (myGsm.available()!=0)
        Serial.write(myGsm.read());
}

void funcion() {
  
  // Leer valor analogico:
  sensor1 = analogRead(eanalogica1);
  sensor2 = analogRead(eanalogica2);
  // Calcule la señal del sensor:
  led1 = map(sensor1, 0, 1023, 100, 0);
  led2 = map(sensor2, 0, 1023, 100, 0);

  // Ponga el resultado de sensor uno y dos a el sim800l que lo emvia:
  data += "A"+String(count)+","+String(sensor1)+",B"+String(count)+","+String(sensor2)+";";
  
  delay(1000);

  if (count == 15) {
      myGsm.print(data);  
      //printSerialData();
      myGsm.write(0x1A);
      delay(1000);
      data = ""; // borro el String para la proxima.
  }
  printSerialData(); // Esto no se que tiene que ver?
}

void contadorbin(){
  if ((millis() - changeTime) > 500) {   //si ha pasado 1000 milisegundos contar uno mas
      count ++;
      setNumber();
      changeTime = millis();                     //inicia el condador de tiempo a 0
  }
}

void setNumber (){
  if (count>15)
      count = 0;                     //volver a empezar si es mayor de 4 bits

  for (int i = 0; i<4;i++){  //para cada bit mira si tiene que encender el led correspondiente
      digitalWrite(ledPin[i], (count >> i) & 1);
      delay(2000);
  }
}



POrque nada de lo que te sugerí esta en tu código?

camandper

Buen dia, respondiendo a tu pregunta es que como me tocaba con la sintaxis de comas "," y punto y comas";" no habia logrado ponerlos en el prgrama, este que subi es el codigo que venia manejando desde antecitos de que me respondieras la ultima vez con raduccion del codigo que hizo.

te comento pase el codigo que me diste pero por alguna razon, cuando uso el AT+SEND, me responde Error.
 Estoy verificando pero no logro entender el porque.

surbyte

No envies, imprime lo que he generado a ver si esta bien armado. Y luego mira su tamaño y comprueba si la RAM de tu Arduino sigue con espacio. Busca Arduino AvailableMemory y coloca la rutina sugerida antes de enviar a ver si se queda o no sin RAM.

camandper

#14
Sep 02, 2019, 11:41 pm Last Edit: Sep 02, 2019, 11:51 pm by camandper
En efecto esta haciendo lo que requiero, sera por lo que puse el AT+Send Desde el comienzo,

sin embargo voy a intentar hacer esto en la modificacion que hiciste a void funcion depronto nos mejora asi:

Code: [Select]

 if (count == 15) {
      myGsm.println("AT+CIPSEND");
      Serial.println(data);  
      //printSerialData();
      myGsm.write(0x1A);
      delay(1000);
      data = ""; // borro el String para la proxima.




Sin embargo se fue la luz y debo esperar un poco.

Go Up