Miren muchachos lo q pasa esq estuve investigando y probando y no logro guardar los datos en unas variables q yo creo en un orden especifico siempre me recoge los valores pero en desorden miren este es un codigo base de lo que quiero hacer,yo envio valores desde una app inventor y no logro organizarlas o q sean puestas en las variables q necesito. AYUDA porfavor al probar con el monitor serial me sale el numero q envio pero siempre queda guardado en la primera variable.
//MONITOR DE SERIE//
Numero uno recibido: 1000
Numero dos recibido: 0
Numero tres recibido: 0
Numero cuatro recibido: 0
Numero uno recibido: 2000
Numero dos recibido: 0
Numero tres recibido: 0
Numero cuatro recibido: 0
Numero uno recibido: 3000
Numero dos recibido: 0
Numero tres recibido: 0
Numero cuatro recibido: 0
Numero uno recibido: 4000
Numero dos recibido: 0
Numero tres recibido: 0
Numero cuatro recibido: 0
long estado=0;
long estado2=0;
long estado3=0;
long estado4=0;
void setup() {
//Iniciamos comunicación con el puerto serie
Serial.begin(9600);
Serial.setTimeout(100);
}
void loop() {
if (Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero uno recibido: ");
Serial.println(estado);
{
if(Serial.available() > 0); {
//Se transforma la lectura a un número entero
estado2 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero dos recibido: ");
Serial.println(estado2);
}
if(Serial.available() > 0); {
//Se transforma la lectura a un número entero
estado3 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero tres recibido: ");
Serial.println(estado3);
}
if(Serial.available() > 0); {
//Se transforma la lectura a un número entero
estado4 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero cuatro recibido: ");
Serial.println(estado4);
}
}
}
}
Me enviaste un privado con este código, te dije que por favor lo postearas usando las normas del foro para el posteo de códigos y lo presentas igual. Sin palabras!! Edita por favor.
no uses un ; al final de una condición porque la anulas.
asi que elimina ese ;
Cometes este error en cada condicion que usas.
2do error: Porque repites esta secuencia 4 veces?
if (Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado4 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero cuatro recibido: ");
Serial.println(estado4);
}
No es mas facil ponerla 1 vez y con cada ingreso incrementas un contador y cuando llega a 4 lo pones a 0?
A ver como funciona esto
long estado[4] = {0,0,0,0};
byte i = 0;
void setup() {
//Iniciamos comunicación con el puerto serie
Serial.begin(9600);
Serial.setTimeout(100);
}
void loop() {
if (Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado[i] = Serial.readString().toInt();
//Se imprime el número que se recibe
sprintf(buffer, "Numero %d recibido: ", i+1, estado[i++])
Serial.println(buffer);
if (i>3) i = 0;
}
}
Este ejerciciio es algo básico cuando programas, mas allá que yo intruje la funcion sprintf que puede complicarte, el resto debería ser entendible.
Acá esta modificado
void setup() {
//Iniciamos comunicación con el puerto serie
Serial.begin(9600);
Serial.setTimeout(100);
}
void loop() {
char buffer[30];
if (Serial.available() > 0) {
//Se transforma la lectura a un número entero
byte index = Serial.readString().toInt();
//Se imprime el número que se recibe
if (index < 5) {
sprintf(buffer, "Numero %d recibido", index);
Serial.println(buffer);
}
else {
Serial.println("Digito ingresado mayor que 4.");
}
}
}
mira lo q pasa esque lo necesito asi yo envio un numero (ej:20000)entonces esos 20000 los necesito guardar en un estado(ej:estadoM1) ahora vuelvo a enviar pero ahora otro numero(ej:40000)entonces esos 40000 los guardo en otro estado(ej:estadoM2) lo necesito para cuatro estados yo envio cuatro numeros uno despues de otro y que en ese orden se me vayan recogiendo en diferentes estados,en dado caso que envie cuatro numeros van haber 4 estados que me almacenen esos valores numericos.para despues de eso poder usar esos valores que ya estan en esos estados como tiempo de espera de alguna cosa.
si cualquier numero q se te ocurra utilizando long puedo enviar un numero muy grande ese numero quiero almacenarlo en una variable,haz de cuenta en el celular envio el numero 45000 ese numero llega al arduino y quiero almacenarlo en una variable,para asi poderlo usar,ej:un motor gira a la derecha por 45000 milisegundos.sabiendo esto puede ser cualquier numero ya que esa variable es para un tiempo,simplemente quiero usar ese numero que se envia para realizar una accion,por eso necesito almacenarlo en una variable para asi usarla de nuevo.por eso crei que colocandolo asi me serviria pero pues tu me corregiste algunas cosas,es recibir un numero cualquiera y lamacenarlo en una variable para poderlo usar mas adelante.AGRADEZCO MUCHO TU AYUDA
long estado=0;
long estado2=0;
long estado3=0;
long estado4=0;
void setup() {
//Iniciamos comunicación con el puerto serie
Serial.begin(9600);
Serial.setTimeout(100);
}
void loop() {
if (Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero uno recibido: ");
Serial.println(estado);//ALMACENE EN ESTE ESTADO EL PRIMER NUMERO QUE ENVIE
{
if(Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado2 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero dos recibido: ");
Serial.println(estado2);//ALMACENE EN ESTE ESTADO EL SEGUNDO NUMERO QUE ENVIE
}
if(Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado3 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero tres recibido: ");
Serial.println(estado3);//ALMACENE EL TERCER NUMERO
}
if(Serial.available() > 0) {
//Se transforma la lectura a un número entero
estado4 = Serial.readString().toInt();
//Se imprime el número que se recibe
Serial.print("Numero cuatro recibido: ");
Serial.println(estado4);// ALMACENE EL CUARTO NUMERO
}
}
}
}
Segun lo que yo entendí, quieres guardar varios valores recibidos por el monitor serial, esto te debe funcionar
long numero[5];
byte contador=0;
unsigned long t;
#define monitor //
void setup() {
//Iniciamos comunicación con el puerto serie
Serial.begin(9600);
Serial.setTimeout(100);
}
void loop() {
if (Serial.available() > 0) {
//Se transforma la lectura a un número entero
long valor = Serial.readString().toInt();
numero[contador]=valor;
contador++;
Serial.println(String ("Numero ") + valor + String(" recibido y se guarda en la posicion ") + (contador-1) + String(" del arreglo numero") );
if(contador == sizeof(numero)/4)
contador=0;
}
#ifdef monitor
if(millis()-t>=1000){
Serial.println(numero[0]);
Serial.println(numero[1]);
Serial.println(numero[2]);
Serial.println(numero[3]);
Serial.println(numero[4]);
Serial.println("");
t=millis();
}
#endif
}
Pruebalo, puedes almacenar hasta 5 valores y si excedes ese valor se guarda en el primer indice, después de probarlo puedes dejar como comentario la linea que dice
#define monitor
y si necesitas guardar mas números solo cambia el valor de la variable numero[];
edito: me equivoque en una linea de código, ya está corregido