Создать номер
Я хочу сделать набросок для генерации числа, представляющего значение датчика, в диапазоне от высокого (900) до низкого (670), это число уменьшается в диапазоне от 1 до 10 и с некоторой задержкой числа переключения в диапазоне от 5 до 15 секунд:
void setup() {
Serial.begin(9600);
}
void number(){
int sensor = 0; //переменная датчика
int a = random(0, 10); //значение датчика вычитания диапазона
int delay = random(5000, 15000); //значение переключения диапазона задержки
for(sensor = 900; sensor >= 670; sensor -=a){ // повторение значения датчика в диапазоне 670-900
Serial.println(sensor);
delay(delay);}
}
void loop() {
number();
}
с выводом:
- 900 (задержка 7 сек.)
- 894 (задержка 3 сек.)
- 988 (задержка 5 секунд)
- 979 (задержка 9 секунд)
Приведенный выше скетч тоже работал, но я все еще не могу использовать результат переменной "sensor" после итерации "for" в пустом цикле. Я надеюсь, что вы можете мне помочь, спасибо.
@Ulinnuha Luthfi, 👍0
Обсуждение1 ответ
Лучший ответ:
int sensor = 900; //переменный датчик
void setup() {
Serial.begin(9600);
while (!Serial);
randomSeed(analogRead(A0));
}
int number() {
int a = random(0, 10); //сенсор дальности Pengurang nilai
int d = random(500, 1500); //диапазон задержки perubahan nilai
if (sensor < 670) {
sensor = 900;
}
sensor -= a;
delay(d);
return sensor;
}
void loop() {
int val = number();
Serial.println(val);
}
Я изменил задержку для проверки.
randomSeed обеспечивает разные случайные значения при каждом запуске
EDIT: неблокирующая версия, которая возвращает те же значения для случайного интервала:
int sensor = 900; //переменный датчик
unsigned long nextChangeMillis = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
randomSeed(analogRead(A0));
}
int number() {
if (millis() < nextChangeMillis)
return sensor;
int a = random(0, 10); //сенсор дальности Pengurang nilai
int d = random(500, 1500); //диапазон задержки perubahan nilai
if (sensor < 670) {
sensor = 900;
}
sensor -= a;
nextChangeMillis += d;
return sensor;
}
void loop() {
int val = number();
Serial.println(val);
}
@Juraj Почему ты скопировал мой ответ? Кстати, вам не нужно возвращать датчик в number(), так как это все равно глобальная переменная., @Michel Keijzers
@MichelKeijzers, ваша функция возвращает только последнее значение. функция number() должна имитировать значения, возвращаемые датчиком, @Juraj
@Juraj ... спасибо ... я думал, что это было намерением, но я думаю, вопрос был не так ясен. Проголосовал!, @Michel Keijzers
@UlinnuhaLuthfi (я удалил свой ответ, этот ответ уже должен ответить на ваш вопрос., @Michel Keijzers
и когда на практике аналоговый порт A0 использовался фактическим датчиком, могу ли я переключить значение со случайного начального значения на постоянное значение?, @Ulinnuha Luthfi
@UlinnuhaLuthfi, не постоянно. вы всегда будете получать одну и ту же «случайную» последовательность, @Juraj
извините все, я только понял, как голосовать, @Ulinnuha Luthfi
Чтобы «скрыть» переменную sensor
, вы можете поместить ее внутрь number()
и сделать ее static
. Таким образом, становится ясно, что никому не разрешен доступ к нему., @the busybee
@thebusybee, да, я знаю. но тогда я должен был бы объяснить это, @Juraj
большое спасибо, ребята, этот скетч работал хорошо, но у меня снова возникла проблема, когда скетч работает, задержка диапазона 5-15 секунд слишком велика и прерывает всю систему, есть ли альтернативные способы заменить функцию «задержки» ?, @Ulinnuha Luthfi
@Juraj, спасибо, @Ulinnuha Luthfi
ты так быстро отреагировал чувак, круто, @Ulinnuha Luthfi
@UlinnuhaLuthfi, я понял, что датчик не блокируется, а возвращает то же значение, поэтому я добавил улучшенную версию за несколько часов до вашего запроса., @Juraj
- Как использовать SPI на Arduino?
- Разница между массивом char и массивом unsigned char
- Отправка строки из RPi в Arduino - Рабочий код
- Сбой связи SPI
- Использовать светодиод или подтягивающий резистор для предотвращения «плавания» или «фантомного изображения» матричной клавиатуры?
- GPS автономный робот
- Правильно ли сделана эта схема?
- Автоматизированную парковка с воротами, датчиком, кнопкой. Как определить, сколько времени каждая машина провела внутри?
голосование за хорошо представленный вопрос... это вопрос программирования, поэтому тег
c++
действителен, но остальные 4 тега недействительны... не совсем понятно, о чем вы спрашиваете, но это, похоже, потому что языковой разницы, @jsotolaя просто хочу сгенерировать случайное число с диапазоном, может быть, у меня есть другой альтернативный скетч?, @Ulinnuha Luthfi
Чтобы использовать переменную итерации цикла
for()
после окончания цикла, она должна быть определена *вне* цикла. Определение переменной в цикле удобно, когда она нужна только внутри цикла., @JRobertкак проголосовать? так что мне нужно сделать переменную вне цикла?, @Ulinnuha Luthfi