Problema con Random

Buenos días querido foro, tengo una duda que no he podido solucionar con la función random, les comento que se utilizar la función random de manera básico, para que me respondan con números, etc, pero no se como podría transformar ese resultado en un "string" mas completo, por ejemplo:

con neo pixel quiero un random solo entre dos opciones que podrían ser:

opción 1.-pixels.Color(255, 0, 0)
opción 2.-pixels.Color(0, 0, 255)

la idea es que cada opción sea solo un resultado del random, entonces yo puedo hacer random de 2 opciones para tener la opcion 1 y opcion 2 con un resultado numerico (en esto no tengo problemas), pero no sabria transformar ese resultado del 1 o del 2 en ese "string" completo.

Espero haya podido explicar la idea con claridad.

No termino de entender lo que quieres hacer, aclaro...

Si tu idea es tener estas 2 cadenas

"pixels.Color(255, 0, 0)"
"pixels.Color(0, 0, 255)"

las pones en un array y luego con el número generado accedes a una u otra.

Saludos

Ese es el problema no sabría como escribir esa parte del código, creo que me entendiste pero no del todo, ya que las opciones del random deben ser esto "(255, 0, 0) o esto (0,0,255), no se si en un array de puede hacer algo como esto:

int randomcolor[] = {
(255,0,0),(0,0,255)
}

ahi hay dos opciones para el array, de todas formas estaré probando posibles soluciones con la guia que me entregaste.

Lo defines así


int randomcolor[2][3] = {{255,0,0},{0,0,255}}

Luego para accederlos

int numeroAleatorio = random(0,2);  // o random(2) es lo mismo.

pixels.Color(randomcolor[numeroAleatorio][0], randomcolor[numeroAleatorio][1], randomcolor[numeroAleatorio][2]);

Saludos

@gatul,
Muchas gracias, lo he probado y estoy tratando de entender bien el código, ya que la idea es realmente aprender, lo que si me he dado cuenta es que no hay dos opciones de random color, he verificado que se genera el codigo (255, 0, 255) y la idea era o (255, 0, 0) o (0, 0, 255) pero no una mezcla de ambos, ya que esos números son ejemplos pero podrian ser cualquier otro.

El otro problema que se genero y que ahora que lo pienso es obvio, es que el color se actualiza en todo momento, por ejemplo , esto es un anillo RGB el cual al presionar un botón se genera el color random el cual podría ser rojo (255, 0, 0) o azul (0, 0, 255) pero mientras el botón este presionado el color sigue actualizando y se produce un efecto de parpadeo entre las opciones de random, eso me paso con el código que estoy probando, y bueno comente anteriormente, en el código que me indicaste se genera el (255, 0, 255)

EDIT: ya he entendido el código y veo que las opciones randon son para los 3 números que van en el paréntesis, es decir (1, 2, 3) la idea no es que estos números sean random, la idea es que el random elija entre dos opciones preestablecidas las cuales son (255, 0, 0) o (0, 0, 255) no que los números dentro del paréntesis sean resultados random.

Exacto!

@gatul pero aun no doy con el código para elegir entre esas dos opciones, aunque seguiré probando ideas.

Es que no hay mucho que pensar.

Generas un número aleatorio y lo guardas en una variable, luego usas esa variable como 1er. índice en cada parámetro de la llamada a pixels.Color().

O sea, no es otra cosa que el código que puse más arriba.

Solo cambia los nombres de las variables por los que más te guste, yo usé "numeroAleatorio" para que entendieras lo que contiene.

Y si quieres más combinaciones, solo cambia la 1er. dimensión del array ( o matriz) y el límite de random().

Por ejemplo, para 3 colores (voy a usar byte en lugar de int para ahorrar memoria, si quieres usa int)

byte colores[3][3] = {{255,0,0},{0,255,0},{0,0,255}};  // o la combinación que prefieras

y por supuesto

int num = random(3); // genera un número entre 0 y 2, inclusive

luego lo usas así

pixels.Color(colores[num][0], colores[num][1], colores[num][2]);

Saludos

PD: respecto a lo del botón, lee en Documentación el tema Como NO leer un botón y como SI debemos hacerlo.

@gatul gracias por tu tiempo, lo probare y te comento.

:+1:

@gatul aun no he podido probar el codigo con tiempo, pero antes de probar queria comentarte que he logrado pasar el codigo R,G,B a un solo valor asi:

#define rojo 255,0,0
#define verde 0,255,0
#define azul 0,0,255

Puedo compilar, solo me falta probar con random cuando tenga un poco de tiempo, tu le vez algún problema para "ir" a buscar los colores de esta forma?, se que a algunos no les gusta usar #define, pero igual termino viendolo en muchos programas.

No le veo problema, solo ten presente que el compilador va a cambiar todas las combinaciones de letras "rojo" que encuentre por "255,0,0", lo mismo con "verde" y "azul" por sus respectivas equivalencias.
O sea, si tienes "rojo1" va a terminar como "255,0,01". Solo se cuidadoso con los nombres de variables y funciones (aunque en este caso no tendrías problema).
Fuera de eso, es un recurso para tipear menos. :wink:

Saludos