Странное поведение, меняется переменная которая не должна

Здравствуйте, столкнулся со странной проблемой. Есть два устройства, одно ведущее, второе ведомое. Определяется кто есть кто, при включении, перемычкой между +5в и д5. Перемычка - резистор на 15ком.
При запуске, перемычка считывается, и роль определяется правильно, но потом - что то переменную меняет. И устройство резко меняет роль…
Небольшой кусок кода, в котором судя по всему проблема

unsigned int modePin = 2; // Пин к которому идет перемычка
unsigned int isReader = 0;  // 0 - ридер, 1 мастер

int request = 0; // Сюда складываем данные по запросу
unsigned int response[4] = {0,0,0,0}; // Сюда пишем ответ от модуля

void setup() {
  // определяем кто мы, мастер или ридер
  pinMode(modePin, INPUT);
  isReader = digitalRead(modePin);
}

void loop() {
  Serial.print("isReader");
  Serial.println(isReader);
  if (isReader) {
// после этого куска, меняется переменная isReader, если закоментировать - не меняется. 
    for (int i = 0; i < sizeof(response); i++) //convert to char array
        {
          response[i] = 0;
        }
   }
}

Пардон, перемычка не на д5 - а на д2. Это я перепроверил, несколько раз )

А это сколько, не в курсе?

4 байта

уверен?

Я тут ни в чем не уверен, это не питон ))

Так может выяснишь?

1 лайк

А не 4, а 8. Спасибо ) проблему понял.

Откуда 8 то?))) Как ты считал?

Serial.println(sizeof(response));```

```sizeof response8```

А, ну да. У тебя же unsigned int (перепутал с unsigned long)…

А вообще формула для количества элементов массива такая:

size = sizeof(array)/sizeof(array[0]);

блин, почему отрезали array.length ??

патамушта это не питон тебе.

2 лайка

И что теперь, нормальные методы обрезать? )
Вопрос, а модуль NRF24 он же байты передает? И ему соответственно не скормить массив int?

radio.writeAckPayload(pipeNo, &response, sizeof(response));

Или проще сразу туда вкатить unsigned long?

ну так сделай response байтовым и передавай.

Вообще это так делается

for (auto &x:response) {
  x = 0;
}
1 лайк

я обычно double вкатываю…)

1 лайк

проблема в том, что millis() возвращает unsigned long.

да, это проблема.

1 лайк