Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Re: Передать переменную в функцию

Пн авг 28, 2023 08:52:29

Чтобы избежать путаницы в отношении того, что и где выполняется, во-первых, не используйте глобальные и локальные переменные с одинаковыми именами.
Во-вторых, у вас есть функция, которая не возвращает значение (void func(..)). Чего ожидаете от return arrr; не знаю. Разве используемый компилятор не возвращает предупреждение?
Либо заставьте функция возвращать значение, либо для выходного значения используйте, напр. изменение глобальной переменной.

Имена переменных исправил, спасибо
А вот на return надеялся именно так как вы написали. И я получаю результат, который ожидаю.
Компилятор wokwi.com

Добавлено after 11 minutes 2 seconds:
rss-999, а
Код:
randomSeed()
где?

Добавил через analogRead(0), спасибо

Добавлено after 4 minutes 54 seconds:
Нет кнопки правка, вот полный код:
Код:
int i,n,t,r,h,x,f; //Создать массив пинов из 12 чисел
int j; //Создать массив пинов из 12 чисел
int o; // присвоить переменной каждое число из массива
int lenarr; //вычислить длинну массива
int k; //сравнить
int d; //Создать массив без нужного числа
int arr[12];
//int arrr[11];
int randNumber;
#define size 11
unsigned char arrrr[size];
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
}
 
void loop() {
  label: 
randNumber = random(4, 15);
 if (r == randNumber) {goto label;}
 r = randNumber;
 Serial.print("randNumber=");
  Serial.println(randNumber);
func(arrrr);
for (n = 0; n < 11; n++){ 
  Serial.println(arrrr[n]);}
  delay(3000);
}
void func(unsigned char* arrr)
{
for (i=0, j=4; i<12; i++){  //Создать массив пинов из 12 чисел
      arr[i] = j;
      j++;
      }
 lenarr = sizeof(arr)/sizeof(int); //вычислить длинну массива
for (o = 0; o < lenarr; o++) { // присвоить переменной каждое число из массива
k=arr[o];
if (randNumber != k) { //сравнить
   //for (d=0; d<12; d++){ //Создать массив без нужного числа
      arrr[d] = k;
      d++;
  } //if (randNumber != k)
  } //for (o = 0; o < lenarr; o++)
return arrr;
}

Re: Передать переменную в функцию

Пн авг 28, 2023 10:34:24

Ладно, себя не уважаешь - уважай читателей. ^T неужто тяжело сделать? ППЦ, писатель!
И таких дятлов пруд пруди. Ужос.

Re: Передать переменную в функцию

Пн авг 28, 2023 10:58:05

for rss-999
wokwi.com
Тогда ясно откуда "роги" ростут!
:tea:
Есть же родная ардуиноIDE на все вкусы и возможности (с отловом ошибок).
Да еще и приличный симулятор.
И все не онлайн, а в оффлайн компе.
Видимо разницца в некоторых моментах и дает ....... ...
К примеру в "родной" IDE согласно даже последней онлайн версии "референса"
https://www.arduino.cc/reference/en/lan ... rs/random/
тип возвращаемых данных для random long (хотя и на int матюков не наблюдается).
А вот предупреждение о функции "ничего не возвращающей" все же выпадает:
Спойлер
Код:
C:\...\sketch_aug28a\sketch_aug28a.ino: In function 'void func(unsigned char*)':

C:\...\sketch_aug28a\sketch_aug28a.ino:44:8: warning: return-statement with a value, in function returning 'void' [-fpermissive]

Скетч использует 2674 байт (8%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 255 байт (12%) динамической памяти, оставляя 1793 байт для локальных переменных. Максимум: 2048 байт.

в то же время в func передается некий указатель на unsigned char* arrr (что из себя представляет то, на что данный указатель указывает и где он берется Х/З)...
а чуток выше указывается, что аргументом у func(arrrr); а где тот аргумент берется то??
далее непонятно зачем arrr[d] = k; .... (указатель на char равен значению типа int)...
и на закусь пытаемся куда-то послать указатель на char (о чем и выдано предупреждение в IDE).
:roll:
Лучше уж ежли хочется чего путнего по сути прожки услышать - опишите словами то, чего хочется сделать.
Просто текстом обычными словами.
Похоже Вы сами не сильно понимаете, чего хотите сотворить.
8)
Пы.Сы.
Единственным достоверным симулятором любой конструкции является МАКЕТ данной конструкции.
:wink:

Позволю себе малость погадать:
похоже rss-999 всего лишь пытается выделить (для последующей установки в 1 или 0) один из 11 выводов МК(с D4 по D14), значение которого задаётся результатом очередного прохода ГСЧ.
Ну дык и нахрена такие монструозности городить-то?
:wink:
Ну и спойлером не помешало бы научиться пользоваться для выкладывания исходника.
:tea:
Ответить