Randomseed, numeros aleatorios y condicional

Buen dia, estoy intentando aprender la funcion randomseed, la que genera numeros aleatorios, y sumarle una condicion.
Hice un ejemplo ( que genere numeros entre 1 y 3 y dependiendo que valor aparece imprima "uno" , "dos" o "tres", pero imprime en cualquier orden
ej: ( las letras es lo q deberia imprimir en base a el numero, los numeros los q se generan aleatoriamente)
2
DOS
TRES
UNO
3
DOS
TRES
UNO
3
DOS
TRES
UNO
1.

el codigo:

//>

int numero= 0;
void setup() {
 Serial.begin (9600);
 randomSeed (4);


}

void loop() {
Serial.println(random(1,4));
 numero = random ();
 
 if(numero == 2);
  {Serial.println ("DOS");
 
delay (1000);
 numero = 0;

}

 if(numero == 3);
  {Serial.println ("TRES");
delay (1000);
 numero = 0;}


 
  if(numero == 1);
 { Serial.println ("UNO");
 delay (1000);
  numero = 0;}

  
   
}

me pueden ayudar a saber como tendria que colocar las condiciones para q lea primero el numero, intente tambien dsps de cada condicion q termine generando otro numero dentro de cada if, pero igual, no respeta la condicion.
Gracias

Primer error

if (numero == 2);

segundo error

if(numero == 3);

tercer error

if (numero == 1);

todos van sin coma al final

Mi sugerencia para lo mismo

char *s_num[] = {"UNO", "DOS", "TRES"};

void setup() {
 	Serial.begin (9600);
 	randomSeed (4);
}

void loop() {
	
	int numero = random(1,4);
	Serial.println();
	
	if (numero > 0) { 
		Serial.println(s_num[numero-1]);
		delay (1000);
		numero = 0;
	}  
}

gracias, si se me escapo, ya lo modifique pero ahora ni me imprime las condiciones
solo "numeros" se imprime

int numero= 0;

void setup() {
 Serial.begin (9600);
 randomSeed (4);


}

void loop() {
Serial.println(random(1,4));
delay (1000);
 numero = random ();
 
 if(numero == 2)
  {Serial.println ("DOS");
 
delay (1000);
 

}

 if(numero == 3)
  {Serial.println ("TRES");
delay (1000);
  }


 
  if(numero == 1)
 { Serial.println ("UNO");
 delay (1000);
 }

  
   
}

Bueno agrega por favor, el Serial.print que necesites.

necesito que si sale 1 , imprima "uno"
si sale 2, imprima "dos"
si sale 3 , imprima "tres"
subi el codigo crei que lo habias probado. solo salen los numeros aleatorios ahora
salen numeros entre 1 y 4 .. y quisiera q ademas se impriman esos textos si cumplen la condicion.

Bueno ya te di la idea.. terminalo tu.

pero si yo ya tenia colocado Serial.println ("uno"...) para que me imprima las variables segun el condicional en una linea abajo, que idea me diste?
me podes ayudar ? no entiendo porq es tan dificil ayudar, no te estoy pidiendo q me des todo servido debo tener algo mas escrito o mal ubicado y te pido q me ayudes porq no me puedo dar cuenta porq no sale el numero y la variable una abajo de la otra..

En lugar de poner:

Serial.println(random(1,4));
numero = random ();

Prueba a poner:

numero = random (1, 4);
Serial.println(numero);

Sin palabras!!

Acaso viste mi código que lo hace todo? O solo viste una parte de lo que te respondí antes?

Pues a mi me parece bien que juanmanuel85, en lugar de conformarse con el código que ha puesto surbyte, trate de corregir su propio código.

Lo que sí que le sugiero a juanmanuel85 es que “se estudie” el código de surbyte. De ese código puede aprender muchas cosas.

Surbyte acabo de ver tu codigo no lo habia visto, te pido disculpas,...pero la verdad es q no es lo que necesito , funciona ( lo probe )pero yo quisiera integrarle leds, servos, en vez de "uno" "dos" o "tres" y se me complica mucho mas con tu programacion q como lo habia planteado yo, quisiera saber q problema tenia mi programa para dsps si poder arreglarmelas asi, te agradezco tu replanteo , pero solo quisiera saber q estoy haciendo mal sobre ese codigo q puedo orientarme mejor para lo que pueda agregar dsps. gracias

int numero= 0;
void setup() {
 Serial.begin (9600);
 randomSeed (4);


}

void loop() {
Serial.println(random(1,4));
delay (1000);
 numero = random ();
 delay (1000);
 
 if(numero == 2)
  {Serial.println ("DOS");
 
delay (1000);
 

}

 if(numero == 3)
  {Serial.println ("TRES");
delay (1000);
  }


 
  if(numero == 1)
 { Serial.println ("UNO");
 delay (1000);
 }

  
   
}

Tu programa tiene el problema de que al final de cada if le pones un ;
No puedes poner eso!!

Es algo básico.
Tu consultas si (tal condicion) { // procedimiento a realizar }
Pero si haces esto si (tal condicion) ; // lo que le dices al compilador es que pase de largo no importa que preguntes o cual sea el resultado de la condición.

Surbyte eso lo modifique hace rato,

int numero= 0;
void setup() {
 Serial.begin (9600);
 randomSeed (4);

}

void loop() {
Serial.println(random(1,4));
delay (1000);
 numero = random ();
 delay (1000);
 
 if(numero == 2)
  {Serial.println ("DOS");
  }

 



 if(numero == 3)
  {Serial.println ("TRES");
  }

  


 
  if(numero == 1)
 { Serial.println ("UNO");
 }
 
 }

  
   

 // put your main code here, to run repeatedly:

Juanmanuel85, ¿has leído esto que te puse?

IgnoranteAbsoluto:
En lugar de poner:

Serial.println(random(1,4));

numero = random ();




Prueba a poner:


numero = random (1, 4);
Serial.println(numero);

Tal como lo tienes, imprimes un número aleatorio entre 1 y 3 con la instrucción:

Serial.println(random(1,4));

Y después le asignas un cero a la variable numero con la instrucción:

numero = random ();

Y como numero vale cero, no te imprime ningún texto.

¿Porqué numero vale cero? Pues porque le asignas el valor de la función random() sin parámetros. Si no le indicas ningúm parámetro te da un valor aleatorio de tipo float entre cero y un valor menor que uno. Pudiendo ser cero pero nunca será uno. Y como numero es una variable entera, se truncan (pierden) los decimales del valor devuelto por random(). Con lo que siempre será creo.

Mi propuesta es que calcules primero el valor de numero, con los parámetros adecuados, y luego lo muestres.

disculpa @ignoranteabsoluto no entiendo, yo no tengo problemas para generar el numero. de hecho es lo uunico que no tuve problemas para ver en el serial , yo lo quisiera es activar un led o un servo o que me escriba algo cuando tal numero sea por ej: 3 ... pero no lo logre evidentemente.. jugar con una variable en base a esos numeros que se generan.
di el ejemplo de "uno", "dos" y "tres" en el codigo porq si me lo imprime, se supone q cambio esa linea por la de un led en high y enciendo un led y asi..
quisiera aprender a hacerlo como esta planteado, no tengo problemas con la impresion de los numeros aleatorios pero no se porq no me imprime los numeros en "letras" q si son parte de una variable
quisiera entender eso.
gracias

No te impime ningún número en letras porque la variable numero siempre vale cero.

Añade la condición:

  if(numero == 0) {
    Serial.println ("CERO");
  }

... y lo verás.

Ya te he explicado el porqué y te he dicho cómo corregirlo :wink: .

lo acabo de incluir, entiendo , vos decis q no cambia nunca el valor de numero?
igual la inclui esa condicion pero sigue sin imprimir nombre alguno

//#include <Servo.h>
//Servo servodos;
int numero= 0;
void setup() {
 Serial.begin (9600);
 randomSeed (4);
//servodos.attach (8);
//servodos.write(10);

}

void loop() {
Serial.println(random(1,4));
delay (1000);
 numero = random ();
 delay (1000);
 
 if(numero == 2)
  {Serial.println ("DOS");
  }
delay (1000);
 



 if(numero == 3)
  {Serial.println ("TRES");
  }
delay (1000);
  
  if(numero == 0) {
    Serial.println ("CERO");
  }

 
  if(numero == 1)
 { Serial.println ("UNO");
 }
 delay (1000);
 }

Perdón, fallo mío al determinar exactamente el problema. Si no se le pasa parámetros a la función random() no devuelve un valor aleatorio entre 0 y 0.99999999999999999 como yo pensaba. En realidad devuelve un valor entre 0 y la constante RANDOM_MAX que en el caso del Arduino UNO viene definida con el valor 2147483647. Así que difícilmente la variable numero va a tener el valor cero, uno, dos o tres.

Mi equivoqué porque en otros entornos de programación la función que genera números aleatorios suele generar un número entre cero y uno, sin llegar a ser nunca un uno.

Pero el error en tu código y la solución siguen siendo lo que ya te he dicho.

Cambia la línea que pone:

Serial.println(random(1,4));

por:

numero = random (1, 4);

Y cambia la línea que pone:

 numero = random ();

por:

Serial.println(numero);

Y verás cómo hace lo que quieres que haga.

Tu código debería de quedar alto tal que así:

int numero= 0;
void setup() {
    Serial.begin (9600);
    randomSeed (4);
}

void loop() {
    numero = random (1, 4);
    delay (1000);
    Serial.println(numero);
    delay (1000);

    if(numero == 2) {
        Serial.println ("DOS");
    }

    if(numero == 3) {
        Serial.println ("TRES");
    }

    if(numero == 1) {
        Serial.println ("UNO");
    }

}

En este caso el orden de "los factores" sí que cambia "el producto".

gracias @ignorante absoluto esta andando como queria!!!
pero cual fue mi error= (para aprender?)