ARDUINO Вопрос по random'у

Gridzilla

★✩✩✩✩✩✩
29 Ноя 2019
26
14
Привет всем.

Имеется randon (min, max). И имеется три кнопки. Можно ли привязать сигнал с этих кнопок с max в рандоме? То есть если, допустим, нажаты две кнопки, то было бы random (0, 2), одна кнопка - random (0, 1)?
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,407
976
58
Марий-Эл
Можно.
Если кнопки повешены на 2 отдельных пина, читаешь пины. Если читается только пин 1й кнопки, значит выбираете один вариант, если читаются обе кнопки, выбираете другой вариант. Так как обе кнопки совершенно одновременно нажать не возможно, нужно при нажатии любой из кнопок произвести задержку и повторно считать порты кнопок. После этого уже решать сколько кнопок нажато.​
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,407
976
58
Марий-Эл
Чтение производится быстрее чем нажатие. Нужно по любому повторное чтение что бы убедиться какие кнопки нажаты. Плюс антидребезг.
Библиотека Гайвера позволяет читать несколько кнопок одновременно? А то я как то над этим не задумывался.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Там по другому. библиотека читает и запоминает. А потом ты уже проверяешь было ли нажатие в момент чтения.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Одновременно нет. Одна кнопка - одно чтение. На С++ тоже можно читать состояние нескольких пинов одновременно.
 

Gridzilla

★✩✩✩✩✩✩
29 Ноя 2019
26
14
так привязывай.
random (0, digitalRead(кнопка1)+ digitalRead(кнопка2)+ digitalRead(кнопка3))
Как-то об этой конструкции не подумал. Спасибо, буду пробовать, как вернусь с командировки.

И так, в теории, для развития кругозора: а если это аналоговые выходы и там не жесткий 0 или 1, а какое-то значение сравнивается? Далеко ходить на надо. Взять те же оптические датчики, например, от того же наливатора, которые сейчас народ делает. Там определенный порог учитывается. Допустим имеем (вроде правильно написал)

const byte Opt[] = {0, 1, 2 };
const unsigned int Opt_porog[] = {1000, 1000, 1000};


и потом они сравниваются,

for (int m = 0; m < 3; m++) {
if (analogRead(Opt[m]) < Opt_porog[m] ) {
//наливаем и прочее
}
}

Как-то это можно скормить рандому? Я про то же, что если сработал один, два или три и т.д. датчики?

Как некоторые с мобилки здоровенные коды правят? Я это набрал и уже заколупался xDD)
 

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
Как-то об этой конструкции не подумал. Спасибо, буду пробовать, как вернусь с командировки.

И так, в теории, для развития кругозора: а если это аналоговые выходы и там не жесткий 0 или 1, а какое-то значение сравнивается? Далеко ходить на надо. Взять те же оптические датчики, например, от того же наливатора, которые сейчас народ делает. Там определенный порог учитывается. Допустим имеем (вроде правильно написал)

const byte Opt[] = {0, 1, 2 };
const unsigned int Opt_porog[] = {1000, 1000, 1000};


и потом они сравниваются,

for (int m = 0; m < 3; m++) {
if (analogRead(Opt[m]) < Opt_porog[m] ) {
//наливаем и прочее
}
}

Как-то это можно скормить рандому? Я про то же, что если сработал один, два или три и т.д. датчики?

Как некоторые с мобилки здоровенные коды правят? Я это набрал и уже заколупался xDD)
Как вариант: создать массив, в котором сохранять индексы, которые прошли проверку, + счетчик этих записей. Далее ГСЧ скармливаешь значение, которое насчитал счетчик, и получаешь индекс записи массива, который хранит индекс массива выводов АЦП.
 
  • Лойс +1
Реакции: Gridzilla

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
Есть 2 полезные функции : map и constrain , может они помогут как то.
С аналоговых датчиков А0-А5 можно получить 0 или 1 используя digitalRead, но порог будет строго фиксированный. Используя массив с порогами, или одно значение для всех можно по условию получить свои 0 или 1
 
  • Лойс +1
Реакции: Gridzilla

Gridzilla

★✩✩✩✩✩✩
29 Ноя 2019
26
14
Спасибо, друзья. Много незнакомых слов :) Но, думаю, чтение поможет :) Пойду разбираться.
Хотя все равно интересно, может есть более простой способ скормить рандому данные с оптодатчиков.
Может кто уже делал просто что-то подобное.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,301
Москва
А какой смысл скармливать именно в рандом ?
к примеру две кнопки . дают 0 и 1. Допустим зажигаем светодиод 0 будет не горит, 1 50% яркости 2 - 100%
если просто зажигать , то по яркости можно судить о том сколько кнопок нажато.0 1 или 2.
Если делать рандом, то есть определенная вероятность, что при нажатии 2х кнопок (1+1) получим случайный 0.
 
  • Лойс +1
Реакции: Arhat109