Какой тип требуется для randomSeed

Выдаёт ошибку
sketch.ino:29:1: error: ‘random’ does not name a type
random randomSeed (analogRead(0));
^~~~~~

Error during build: exit status 1
Я не знаю какой тип нужно вставлять здесь. В интернете вообще у всех работает без указания типа

‘’’ #include <Adafruit_NeoPixel.h>

//Яркость менять только в промежутке (0-255)
#define NUM_BRIGH 255

//Длина линии звезды
#define NUM_TRAKS 3

//количество адрессных лент
#define NUM_TAPE 1

//записывать суда PIN каждой ленты
int NUM_PIN = {6};

//Сколько всего пикселей в каждой светодиодной ленте
int NUM_PIXELS = {20};

//Инециализация лент(нужно прописать для каждой)
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_PIXELS[0], NUM_PIN[0], NEO_GRB + NEO_KHZ800);

// Минимальное и максимальное значение для перерыва между звёздами
unsigned long starDurationMIN = 1000;
unsigned long starDurationMAX = 3000;

int currentStarIndex = 0;

// Цвет для падющей звезды в RGB коде
uint32_t starColors = {pixels.Color(255,255,255)};
random randomSeed (analogRead(0));

//Функция для падающих звёзд
void displayStar() {
// Выберает позицию для начала звезды
int NUM_UTAPE = random(0,NUM_TAPE-1);
int starPosition = random(0, NUM_PIXELS[NUM_TAPE] - NUM_TRAKS);
if (NUM_UTAPE = 0){
//Делает звёздный путь
for (int i = 0; i < NUM_TRAKS; i++, starPosition++) {
pixels.setPixelColor(starPosition, starColors[currentStarIndex]);
pixels.show();
delay(100);
}
starPosition = starPosition - NUM_TRAKS;
//уберает звёздный путь
for (int i = 0; i < NUM_TRAKS; i++, starPosition++){
pixels.setPixelColor(starPosition, pixels.Color(0,0,0));
pixels.show();
delay(50);
}
}
if (NUM_UTAPE = 1){
//Делает звёздный путь
for (int i = 0; i < NUM_TRAKS; i++, starPosition++) {
pixels.setPixelColor(starPosition, starColors[currentStarIndex]);
pixels.show();
delay(100);
}
starPosition = starPosition - NUM_TRAKS;
//уберает звёздный путь
for (int i = 0; i < NUM_TRAKS; i++, starPosition++){
pixels.setPixelColor(starPosition, pixels.Color(0,0,0));
pixels.show();
delay(50);
}
}
// обновление ленты
pixels.show();

currentStarIndex++;
if (currentStarIndex >= sizeof(starColors) / sizeof(starColors[0])) {
currentStarIndex = 0;
}
}

void setup() {
// Initialize the NeoPixel strip
pixels.begin();
// меняет яркость в соответствии со значением NUM_BRIGH
pixels.setBrightness(NUM_BRIGH);

}

void loop() {
//перерыв между падающими звёздами
int delayTIME = random (starDurationMIN , starDurationMAX);
delay(delayTIME);

//Вызов функции с звездой
displayStar();

//Обновление ленты
pixels.show();
} ‘’’

Для вставки кода похоже не те апострофы использовали. Нужен тот, который на писишной клавиатуре вместе с буквой ё и ~ живёт.
А зачем Вам приспичило здесь какой-то тип вставить? Это просто вызов функции. Так что в данном случае стоит сделать “как в интернете”.

А что это за конструкция вообще? Такого в языке нет.

Проблема в том что даже если сделать как в интернете то выходит такая ошибка : error: expected constructor, destructor, or type conversion before ‘(’ token
randomSeed (analogRead(0));

А вот дальше уже точно нужен правильно вставленный код. В таком виде читать невозможно.

Что код вставлен не правильно.

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

По логике результат, возвращаемый функцией, должен иметь тот же тип, что и ее параметр.

А вот щас не понял, это что за логика такая? Позитивная? Нечёткая? Женская?

2 лайка

Скорее женская, ибо откуда ей тут взяться, логике.)

Логика - общечеловеческая: если функция служит исключительно для изменения некоторой глобальной характеристики, она должна возвращать старое значение этой характеристики, чтобы при необходимости можно было восстановить исходное состояние.

God of the gaps негадует :grin:

В оригинальном высказывания ничего про это не было. Там было

И всё. А для чего кто там служит - дело десятое.

Но, даже если служит, всё равно не понимаю, по какой логике она кому-то что-то

Неправда.
Речь шла не о любой функции, а о вполне конкретной функции randomSeed, что явно следует из цитаты сообщения №9.

Для чего это нужно. Примерно так (стандартный способ работы с цветом (пером, кистью и т.п.)):

tColor oldColor = setColor(newColor); // устанавливаем цвет рисования
// что-то рисуем
setColor(oldColor); // восстанавливаем цвет по умолчанию

Кто может поручиться, что для какой-либо другой величины (например, затравки ГПСЧ) не понадобится аналогичное действие? Ну, например, нам нужно сохранить строгую последовательность генерируемых ПСЧ вне зависимости от того, будет ли вызываться некоторая функция, которая сама использует ГПСЧ.

Тогда ладно.) Мне показалось о любой.

1 лайк

Лишнее доказательство того, что с нами не функция, а естественный интеллект. )

Возможно, мы как и раз и обсуждаем, различие персональных “логик”.

Но, как я говорил, даже если и так, мне всё равно непонятно.

Ну, да Бог со мною и моей непонятливостью, проехали.

Вот! Обычно стараюсь что бы мне всё разжовывали как дебилу. Иначе, обязательно будут недоразумения. А я думал так - а я понял так…) Неопределённостей быть не должно.

По человеческой.
Функция может возвращать:

  1. Запрашиваемую величину.
  2. Код ошибки.
  3. Ничего не возвращать.
  4. Какую-то величину, которую следовало бы вернуть в соответствии с используемым нами типом логики.

Рассмотрим все перечисленные варианты:

  1. Функция randomSeed ничего не запрашивает. Не подходит.
  2. В процессе работы функции randomSeed она не запрашивает никаких внешних ресурсов и не проверяет входную величину на допустимый диапазон, ошибке взяться неоткуда. Не подходит.
  3. Раз у функции задан тип возвращаемой величины, значит, не подходит.
  4. Это единственный вариант, оставшийся методом исключения. Если функция меняет одну величину на другую, вполне логично, что она вернет старое значение этой величины. Больше возвращать все равно нечего. А старое значение, очевидно, имеет тот же тип, что и новое. Следовательно, тип возвращаемой величины совпадает (или совместим) с типом параметра.

Перечитайте текст: если он содержит такие слова как “значит”, “метод исключения”, “логично”, “очевидно” и “следовательно”, значит, он использует какой-то тип логики.

В этом-то я не сомневаюсь, непонятки в том - какой именно. Но, давайте проедем. Я уже «понял что мне этого не понять»