Использование Random() и больше, чем

Полный нуб Arduino, я родом из "фона" Python, хотя и этого почти не знаю.

Я пишу супер простой скрипт, который включит лампочку, когда генератор случайных чисел сгенерирует число больше 100. Очевидно, у меня проблема с синтаксисом или что-то в этом роде: что я делаю не так? Во-вторых, как быстро происходит случайный запрос чисел? Можно ли его замедлить? Мне не нужно, чтобы моя лампочка включалась 50 раз в секунду.

Спасибо! И, пожалуйста, будьте добры; Я знаю, что это гуглится, мне просто не хватает необходимых знаний, чтобы эффективно гуглить это.

/*

*/
int relayPin = 7;
int randomNumber = random(1001);


void setup() {
  pinMode(relayPin, OUTPUT);

   
}

void loop() {


if(randomNumber > 100)
  digitalWrite(relayPin, LOW);

else{
   digitalWrite(relayPin, HIGH);}
   
   
}``` 

, 👍-1

Обсуждение

в чем же проблема?, @jsotola

кстати, поставьте букву `` на отдельную строку, чтобы она была невидима, @jsotola

Проблема в том, что релейный модуль не переключается. Я предполагаю, что в моем коде есть ошибка., @Tooluser

да, логическая ошибка ... спросите себя: "когда обновляется значение randomNumber?`, @jsotola

Текущий код (если вы переместите генерацию случайных чисел в *loop()*) будет переключаться не просто 50 раз, а тысячи раз в секунду. Посмотрите на пример кода, чтобы получить представление о том, как это решить., @StarCat

Начните учиться, он же "строить знания", посмотрев на некоторые из приведенных примеров... ;-), @the busybee

Начните с примера blink и подумайте, как вы можете рандомизировать его..., @Majenko


1 ответ


Лучший ответ:

1

Здесь есть несколько вещей, которые следует обсудить.

Во - первых, генерация случайных чисел: на самом деле arduino не генерирует случайные числа. У него есть список чисел в памяти, который просто "кажется" случайным. Вот почему это называется псевдослучайным числом. Итак, вам нужно объявить начальную точку на этой последовательности, из которой вы получите "случайные" числа. Это делается с помощью "randomSeed()" в void setup. Например:

void setup() {
  // put your setup code here, to run once:
  randomSeed(analogRead(0)); /запускает псевдослучайную последовательность в случайной точке,
//в этом случае значение analogRead несоединенного вывод
}

Далее давайте сгенерируем наш номер. Переменная может быть глобальной (как вы объявили ее вне любой функции), но вы должны объявить ее с помощью "random()" только внутри "void loop". В противном случае его значение будет присвоено только один раз (это то, что ваш код говорит ему, чтобы сделать это один раз).

Вот что я бы сделал:

int relayPin = 7;
long randomNumber; //просто объявляет переменную; она должна быть типа "long".

void setup() {
  randomSeed(analogRead(0)); //запускает псевдослучайную последовательность в случайной точке
  pinMode(relayPin, OUTPUT);
}

void loop() {
  randomNumber = random(0, 301);
  //каждый раз, когда код зацикливается, он присваивает другое значение randomNumber
  //в этом случае число будет находиться в диапазоне от 0 до 300 (301-исключенный предел).
    
  if(randomNumber > 100){
    digitalWrite(relayPin, HIGH);
  }
  else{
    digitalWrite(relayPin, LOW);
  }
  delay(500); //half a second delay
     
}

Если вы хотите получить более подробную информацию о том, как генерируются случайные числа в Arduino, посетите справочник языка Arduino: https://www.arduino.cc/reference/en/

,

Спасибо вам за это! Это объяснение было очень любезно и полезно с вашей стороны! Я буду реализовывать это после работы., @Tooluser