Генератор случайных чисел

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

Помогите с генератором. Простейший пример из туториала

[code]
long randNumber;

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

  // если порт 0 неподключен, то генератор псевдослучайных чисел
  // будет инициализироваться функцией randomSeed() со случайного
  // значения при каждом запуске программы из-за "шума" на порту
  randomSeed(analogRead(0));
}

void loop() 
{
  // выводим случайное число из диапазона 0..29
  randNumber = random(30);
  Serial.println(randNumber);  

  delay(500);
  if (randNumber = 21)
  {Serial.println("BUX");}
  
}


[/code]

Как поймать число в "числоизлиянии" генератора? А в сериале  после каждого числа пишет "BUX"

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015
if (randNumber == 21)

Что такое "числоизлияние" не понял.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Операнд "=" - это присваивание, любая операция присваивания возвращает true, поэтому и срабатывает после каждого "сравнения".

Для сравнения используйти операнд "==", как верно подметил andriano

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

Да уж. . . невнимательность.

Спасибо!

Числоизлияния -генерация :)

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

еще проблема с выводом на LCD.

[code]
// ПРОГРАММА Бомбочка для игры

long randNumber;

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,20,4);  // установка  LCD 

void setup()
{
  
  lcd.init();                      // Инициализируем lcd 
  pinMode(13, OUTPUT);
  // Печать приветствия на  LCD.
  lcd.backlight();
  lcd.setCursor(8, 0);
  lcd.print("BOMB");
   lcd.setCursor(5, 1);
  lcd.print("PLAY  GAME");
  delay(1000);
  lcd.clear();
  randomSeed(analogRead(0));
  
}

void loop()
{
 // выводим случайное число из диапазона 10-29
  randNumber = random(10,30);
  lcd.setCursor(0, 0);
  Lcd.print(randNumber);  //выводим генерируемые числа на экран
  
  delay(1000);
  if (randNumber == 21)
{digitalWrite(13, HIGH);   
  delay(2000);             
  digitalWrite(13, LOW);}
  
}

[/code]

Выдает ошибку 
BOMB.ino: In function 'void loop()':
BOMB.ino:32:3: error: 'Lcd' was not declared in this scope

Как я его должен представить в этой области?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Опять невнимательность)33

33 строчка в Вашем коде - объект lcd с большой буквы, а надо с маленькой)

 

 

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Тяжело переходить с Паскаля... :)

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

Да, в этом проблема. Еще вопрос - в разных версиях Arduino IDE разными операторами инициализируеся LCD. в одних init  в других begin Почему?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вячеслав 151 пишет:

Да, в этом проблема. Еще вопрос - в разных версиях Arduino IDE разными операторами инициализируеся LCD. в одних init  в других begin Почему?

Это не имеет никакого отношения к версиям IDE. Библиотеки разные.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yarik.Yar пишет:

любая операция присваивания возвращает true

Оххх. Когда говорите с начинающими нужно быть особо аккуратным в выражениях. В данном-то случае (при данной операции) Вы правы, но он ведь запомннит буквально "любая", а это ведь не так. Начинающий не поймёт где неаккуратность в Ваших словах, а просто запомнит неверную информацию.

Вячеслав 151
Offline
Зарегистрирован: 25.03.2015

ЕвгенийП пишет:

Вячеслав 151 пишет:

Да, в этом проблема. Еще вопрос - в разных версиях Arduino IDE разными операторами инициализируеся LCD. в одних init  в других begin Почему?

Это не имеет никакого отношения к версиям IDE. Библиотеки разные.

Да в том то и дело, что библиотека одна

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Прошу прощения, конечно не совсем любая) Но абсолютное большинство при аккуратности с типами

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вячеслав 151 пишет:

ЕвгенийП пишет:

Вячеслав 151 пишет:

Да, в этом проблема. Еще вопрос - в разных версиях Arduino IDE разными операторами инициализируеся LCD. в одних init  в других begin Почему?

Это не имеет никакого отношения к версиям IDE. Библиотеки разные.

Да в том то и дело, что библиотека одна

В одной библитотеке используются разные методы инициализации в зависимости от версии IDE? Простите, но это бред. Либо там действительно два метода и в разных примерах используются разные по каким-то причинам, либо это разные версии билиотек, но от версии IDE это никак не зависит. Или Вы считаете, что при изменении версии IDE в библиотеке каким-то волшебным образом поменяется название метода?