Arduino fonction random

Bonjour tout le monde et bonne Année 2024.
J"utilise la Fx "random(2,14);" je ne sais pas si il y a moyen d'éviter sans trop se compliquer d'éviter que deux nombre se répète de façon successive exp: "2, 5, 5, 7, 6, 4..."
Merci à vous.
Cordialement.

Bonjour Loulou17700

Tu ne veux pas qu'il y aie 2 nombre identiques qui se suivent ou qu'il n'y aie jamais de doublons dans la série de 2 à 13?

Cordialement
jpbbricole

Bonjour merci pour le retour
C’est pas grave je vais faire avec...
@++

Simple: en gardant l'ancien nombre, on retire un nouveau jusqu'à ce qu'il soit différent. En théorie cela pourrait ne pas fonctionner si par hasard on tire une série de 5 infinie.

Correct: on garde l'ancien nombre. on fait random(2,13); et on ajoute 1 si ce nouveau nombre est supérieur ou égal à l'ancien. On appelle plus qu'une seule fois random, cela va plus vite, et marche à tous les coups. En gros au lieu d'avoir 12 possibilités, on n'en a que 11 car il faut exclure la valeur précédente.

Bonne année Loulou

Bonjour les amis
@jpbbricole
Oui c'est sa je ne veut pas qu'il y ai deux nombres identique qui se suivent.

@vileroi
Merci pour ton conseil, mais en clair sa donne quoi en programmation? je ne suis qu'un simple débutant et je ne maitrise pas tout le langage Arduino?
je vous joint mon code:

const int LED12 = 13;
const int LED13 = 12;
const int LED11 = 11;
const int LED10 = 10;
const int LED9 = 9;
const int LED8 = 8;
const int LED7 = 7;
const int LED6 = 6;
const int LED5 = 5;
const int LED4 = 4;
const int LED3 = 3;
const int LED2 = 2;
int data;
void setup()
{
  // Serial.begin(9600);
  pinMode(LED13, OUTPUT);
  pinMode(LED12, OUTPUT);
  pinMode(LED11, OUTPUT);
  pinMode(LED10, OUTPUT);
  pinMode(LED9, OUTPUT);
  pinMode(LED8, OUTPUT);
  pinMode(LED7, OUTPUT);
  pinMode(LED6, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED2, OUTPUT);
}
void loop()
{
data = random(2,14);
  digitalWrite(data, HIGH);
  delay(400);
  digitalWrite(data, LOW);
 // Serial.println(data);
}

C'est la Fx Serial.println(data); qui m'a permis de voir que deux même chiffres se suivaient, et de ce fait j'ai la LED tirée au sort par random qui reste allumée plus longtemps.
Au plaisir de vous lire.
Tous mes vœux pour 2024
@++

Bonjour Loulou17700

Ceci:

int data;     // Nombre tiré au hasard

void setup()
{
	Serial.begin(115200);

	for (int h = 2; h < 14; h ++)
	{
		static int dataPrecedent;     // Pour stocker la valeur précédente

		while (true)
		{
			data = random(2,14);
			if (data != dataPrecedent)     // On peut sortire de la boucle
			{
				dataPrecedent = data;
				break;
			}
		}
		Serial.println(data);
		digitalWrite(data, HIGH);
		delay(400);
		digitalWrite(data, LOW);
		delay(400);
	}
}

void loop()
{
}

Tu devrait t'intéresser aux tableaux, pour simplifier ton programme :wink:

Cordialement
jpbbricole

@jpbbricole

Tu devrait t'intéresser aux tableaux, pour simplifier ton programme

Oui surement mais je ne sais pas faire!!
Je me suis orienté vers ce code car j'ai peut de paramètre a changer pour accélérer ou ralentir la vitesse
Merci pour le code je vais le tester
Cordialement
@++

@jpbbricole
J'ai testé le bout de code problème c'est que il s’exécute une fois et s’arrête
Le Serial.println me renvoie des???????
Est ce normal?
@++

Bonjour @Loulou17700

Le Serial.println me renvoie des???????
Est ce normal?

Oui c'est normal si dans l'IDE tu n'as pas réglé le débit du Moniteur Série sur la même vitesse que celle fixée dans le Serial.begin()

C'est normal, le morceau de code en question se trouve dans setup() qui ne s'exécute qu'une fois.
Prends ce qui t'intéresse et utilise-le là où tu en as besoin.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.