Действительно функция ожидания ввода или фикция? Никак не усмотрю обещанного.

Comoq
Offline
Зарегистрирован: 08.02.2019

Всем доброго времени суток, есть код известного блогера гайвера для управления 3-мя устройствами дистанционно посредством беспроводного модуля nrf24l01, в конце которого он делает интересную вставку, призванную сократить энергопотребление, а именно:

(Как вставлять код - читал, пишу с телефона, панель с кнопками не отображается)

/* Данный скетч делает следующее: передатчик (TX) отправляет массив
данных, который генерируется согласно показаниям с кнопки и с
двух потенциомтеров. Приёмник (RX) получает массив, и записывает
данные на реле, сервомашинку и генерирует ШИМ сигнал на транзистор.
by AlexGyver 2016
*/

#include
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte button = 3; // кнопка на 3 цифровом
byte potent = 0; // потенциометр на 0 аналоговом
byte slider = 1; // движковый потенциометр на 1 аналоговом пине

byte transmit_data[3]; // массив, хранящий передаваемые данные
byte latest_data[3]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных

void setup() {
Serial.begin(9600); //открываем порт для связи с ПК

pinMode(button, INPUT_PULLUP); // настроить пин кнопки

radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах

radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных
radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приёмнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!!

radio.powerUp(); //начать работу
radio.stopListening(); //не слушаем радиоэфир, мы передатчик
}

void loop() {

transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки
transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 180); // получить значение
// в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);

for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
flag = 1; // поднять флаг отправки по радио
latest_data[i] = transmit_data[i]; // запомнить последнее изменение
}
}

if (flag == 1) {
radio.powerUp(); // включить передатчик
radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
flag = 0; //опустить флаг
radio.powerDown(); // выключить передатчик
}

}

Я не вижу тут именно обещанного ожидания в функции for. Я вижу тут некоторое понижение количества отправлений, благодаря непостоянному соответствию условия condition благодаря итерации i++.
Данную задумку хотел использовать в своем устройстве, но возникли сомнения. Прошу разъяснить прав ли я, а если нет, в чем я ошибаюсь. Спасибо.

Гриша
Offline
Зарегистрирован: 27.04.2014
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Comoq пишет:
Всем доброго времени суток
Доброго

Comoq пишет:
есть код известного блогера гайвера

Ну, так и идите с такими вопросами на ... форум известного блогера гайвера

Comoq пишет:
Как вставлять код - читал, пишу с телефона

Если читал, то вставляйте правильно. Не можете с телефона - вставляйте с телевизора, холодильника или чего-нибудь другого. В таком виде коды здесь не читают.

Comoq пишет:
прав ли я

Нет

Comoq пишет:
в чем я ошибаюсь

1. Пришли не на тот форум

2. Вставили код без номеров строк

bwn
Offline
Зарегистрирован: 25.08.2014

Comoq пишет:
Всем доброго времени суток, есть код известного блогера гайвера для ......

Вот где логика? Гайвер код написал, а с вопросами сюда пришли. Он живой, вот и выносите моск ему.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq -вы умудрились сделать просто все. чтоб разозлить местных старожилов :) Во-первых, зашли с телефона и неправильно вставили код. Во-вторых - притащили код Гайвера, имя которого на нашем форуме считается ругательным. И в третьих - плохо сформулировали вопрос, сколько не перечитывал ваш текст - так и не понял, о чем, собственно, вы спрашиваете.

Comoq
Offline
Зарегистрирован: 08.02.2019

Зайдите с телефона, и попробуйте вставить сами. У меня не было другой возможности.

Comoq
Offline
Зарегистрирован: 08.02.2019

ЕвгенийП пишет:

Comoq пишет:
Всем доброго времени суток
Доброго

Comoq пишет:
есть код известного блогера гайвера

Ну, так и идите с такими вопросами на ... форум известного блогера гайвера

Comoq пишет:
Как вставлять код - читал, пишу с телефона

Если читал, то вставляйте правильно. Не можете с телефона - вставляйте с телевизора, холодильника или чего-нибудь другого. В таком виде коды здесь не читают.

Comoq пишет:
прав ли я

Нет

Comoq пишет:
в чем я ошибаюсь

1. Пришли не на тот форум

2. Вставили код без номеров строк

 

У меня не было другой возможности вставить код, кроме как с телефона, там нет панели, гайвер не отвечает, куда я ему только не писал, решил что здесь помогут.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

Зайдите с телефона, и попробуйте вставить сами. У меня не было другой возможности.

ну так зайдите НЕ С ТЕЛЕФОНА и вставьте еще раз. Если, конечно, вам интересно продолжить дискуссию.

Comoq
Offline
Зарегистрирован: 08.02.2019

bwn пишет:

Comoq пишет:
Всем доброго времени суток, есть код известного блогера гайвера для ......

Вот где логика? Гайвер код написал, а с вопросами сюда пришли. Он живой, вот и выносите моск ему.

Конечно, он же сразу ломанулся мне помогать, ведь кроме моих проблем его больше в жизни ничто не волнует, так??
Я везде писал, он не отвечает.

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Comoq -вы умудрились сделать просто все. чтоб разозлить местных старожилов :) Во-первых, зашли с телефона и неправильно вставили код. Во-вторых - притащили код Гайвера, имя которого на нашем форуме считается ругательным. И в третьих - плохо сформулировали вопрос, сколько не перечитывал ваш текст - так и не понял, о чем, собственно, вы спрашиваете.

Ситуация такова: нигде не написано про отношение к гайверу - раз, про телефон тоже - 2 (раз все такие крутые, что же никто не додумался подружить сайт с мобильными устройствами?? Критиковать каждый может.) Я понадеялся на принципы уважения и справедливости, которые явно отсутствуют из-за синдрома вахтера. А вопрос был первый раз не понят за всё время опроса. Вот код как Вам нравится:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte button = 3;  // кнопка на 3 цифровом
byte potent = 0; // потенциометр на 0 аналоговом
byte slider = 1; // движковый потенциометр на 1 аналоговом пине

byte transmit_data[3]; // массив, хранящий передаваемые данные
byte latest_data[3]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных

void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК

  pinMode(button, INPUT_PULLUP); // настроить пин кнопки

  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS

  radio.powerUp(); //начать работу
  radio.stopListening();  //не слушаем радиоэфир, мы передатчик
}
void loop() {
  transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки
  transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 180); // получить значение
  // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
  transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);

  for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1; // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i]; // запомнить последнее изменение
    }
  }
  if (flag == 1) {
    radio.powerUp(); // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    flag = 0; //опустить флаг
    radio.powerDown(); // выключить передатчик
  }
}

В итоге вопрос заново:

Конструкция 

for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
    if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data
      flag = 1; // поднять флаг отправки по радио
      latest_data[i] = transmit_data[i]; // запомнить последнее изменение
    }
  }
  if (flag == 1) {
    radio.powerUp(); // включить передатчик
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    flag = 0; //опустить флаг
    radio.powerDown(); // выключить передатчик
  }
}

Должна ожидать изменения массива вводом данных пользователя с крутилки, кнопки или слайдера, и как увидит изменение - сразу поднимает флаг, по которому дальше код запускает передачу. Так вот формулировка у того-кого-нельзя-называть именно в ожидании, для энергосбережения, я не вижу тут ожидания. Была постоянная отправка, а эта конструкция просто на треть уменьшает эту постоянную отправку, 0.7(7) расходуемой мощности вместо 1.

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Comoq пишет:

Зайдите с телефона, и попробуйте вставить сами. У меня не было другой возможности.

ну так зайдите НЕ С ТЕЛЕФОНА и вставьте еще раз. Если, конечно, вам интересно продолжить дискуссию.

Сделал.

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Comoq -вы умудрились сделать просто все. чтоб разозлить местных старожилов :) Во-первых, зашли с телефона и неправильно вставили код. Во-вторых - притащили код Гайвера, имя которого на нашем форуме считается ругательным. И в третьих - плохо сформулировали вопрос, сколько не перечитывал ваш текст - так и не понял, о чем, собственно, вы спрашиваете.

В качестве оффтопа подскажите, где я могу почитать, почему здесь так не любят александра майорова.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

 Так вот формулировка у того-кого-нельзя-называть именно в ожидании, для энергосбережения, я не вижу тут ожидания.

Вы не видите - а оно есть. Судя по коду, если данные не меняются - они вообще не передаются. И с чего вы решили, что уменьшение именно на треть? - если данные почти не меняются - уменьшение будет близким к 100%, если меняются постоянно - то вообще уменьшения не будет

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

В качестве оффтопа подскажите, где я могу почитать, почему здесь так не любят александра майорова.

зачем вам это?  это сложный вопрос из разаряда общественной психологии :)

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Вы не видите - а оно есть. И с чего вы решили, что уменьшение именно на треть? - в коде ничего похожего нет.

Судя по коду. если данные не меняются - они вообще не передаются.

Не вижу из-за сути счётчика for. Так как void loop прогоняет цикл постоянно, значит и i будет расти постоянно из-за i++, а так как у нас всего 3 "бита", то условие i < 3 будет выполняться периодически при переполнении переменной и отсчёта заново (про треть погорячился), вот и выходит, что отправка иногда, но будет выполняться и без команд пользователя.

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

зачем вам это?  это сложный вопрос из разаряда общественной психологии :)

Для расширения кругозора, так как у меня тоже имеются кое-какая неприязнь. Можно одним предложением, кратко, я пойму в чём суть.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Comoq пишет:

Ситуация такова: нигде не написано ... про телефон 

А при чём тут телефон вообще? Написано про вставку кода. Код должен быть вставлен правильно, а с телефона Вы его вставляете или с холодильника - никого не волнует.

И это не прихоть. То, как Вы вставили код делает невозможным его обсуждение. Вас устроит ответ: исправьте ошибку в строке № ХЗ?

Так что, пришли на форум - соблюдайте его правила. Именно это и есть

Comoq пишет:
принципы уважения и справедливости

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Comoq пишет:

почему здесь так не любят александра майорова.

http://arduino.ru/forum/programmirovanie/neskolko-interesnykh-i-poleznyk...

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Но самое забавное, что если вообще ничего не передавать, то экономии скорее всего не будет - автор забыл занулить флаг в сетапе.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

Не вижу из-за сути счётчика for. Так как void loop прогоняет цикл постоянно, значит и i будет расти постоянно из-за i++, а так как у нас всего 3 "бита", то условие i < 3 будет выполняться периодически при переполнении переменной и отсчёта заново (про треть погорячился), вот и выходит, что отправка иногда, но будет выполняться и без команд пользователя.

если честно, ничего не понял из абзаца выше.

Никакая "суть счетчика" там не влияет. Тут все предельно просто - отправка происходит только в том случае. если хотя бы один  из 3х элементов массива изменился. Если ничего не менялось - ничего и не отправляется.

По гайверу - одним предложением - "средний по уровню программист с гонором на уровне Гейтса" :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida пишет:

автор забыл занулить флаг в сетапе.

Что в целом характерно для этого автора. По ссылке, что я дал чуть выше вагон пруфов подобной "забывчивости".

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Никакая "суть счетчика" там не влияет. Тут все предельно просто - отправка происходит только в том случае. если хотя бы один  из 3х элементов массива изменился. Если ничего не менялось - ничего и не отправляется.

Как Вы писали в теме про библиотеки гайвера - новичкам нужны эти мучения. Вот значит одно и моих: я не могу понять, как в этом примере for ожидает изменение массива, я разобрался в for, я понимаю как он работает, я даже конспект сделал по разным источникам, сам сделал пример скетча из него одного (бегущие числа с увеличением на 1 в мониторе порта), но не могу понять как оно работает в этом коде, именно в качестве ожидания, можете объяснить?

Comoq
Offline
Зарегистрирован: 08.02.2019

ЕвгенийП пишет:

mykaida пишет:

автор забыл занулить флаг в сетапе.

Что в целом характерно для этого автора. По ссылке, что я дал чуть выше вагон пруфов подобной "забывчивости".

Так ведь он объявил её локальной, прямо в цикле for, а если объявлять глобальной как он про глобальные переменные говорит "это не нужно, можно запутаться".

Comoq
Offline
Зарегистрирован: 08.02.2019

Что происходит с переменной i когда мы ничего не трогаем? Разве она не растёт?

Comoq
Offline
Зарегистрирован: 08.02.2019

mykaida пишет:

Но самое забавное, что если вообще ничего не передавать, то экономии скорее всего не будет - автор забыл занулить флаг в сетапе.

Вопрос снимается.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

Так ведь он объявил её локальной, прямо в цикле for

вы о какой переменной? переменная flag - глобальная, определена в строке 16

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

я разобрался в for, я понимаю как он работает, я даже конспект сделал по разным источникам, сам сделал пример скетча из него одного (бегущие числа с увеличением на 1 в мониторе порта), но не могу понять как оно работает в этом коде, именно в качестве ожидания, можете объяснить?

Цитата:

Что происходит с переменной i когда мы ничего не трогаем? Разве она не растёт?

честно говоря. читается как "я выучил все буквы, прослушал 2х годичный курс языка и позанимался с преподавателем... но обьясните же мне, как все-таки читать?!!"

Я не понимаю. что в этих пяти строках может быть непонятно, особенно если даже "написал конспект" - и поэтому я не знаю, что обьяснять

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Comoq пишет:

Так ведь он объявил её локальной, прямо в цикле for

вы о какой переменной? переменная flag - глобальная, определена в строке 16

Увидел.

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

 я не знаю, что обьяснять

Что происходит с переменной когда мы не трогаем управление, что происходит при записи одного из устройств ввода в массив, что творится в этой отдельной конструкции, во время её решения поднять флаг. Вот прям пошагово.

Я пытаюсь научиться, сухим текстом не получается, нужен опыт прошаренных.

sadman41
Offline
Зарегистрирован: 19.10.2016

Comoq пишет:

Как Вы писали в теме про библиотеки гайвера - новичкам нужны эти мучения. 

Новичкам-то да - нам за что они?

Comoq
Offline
Зарегистрирован: 08.02.2019

sadman41 пишет:

Новичкам-то да - нам за что они?

Это надо спросить у того, кто создал раздел для новичков. А если по сути - вопрос данной темы это не перебор вариантов, сам не дойду до понимания. Тут конкретный ступор, который надо разжевать, а кому разжёвывать кроме как знающим?

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, вот я вам "попроще" сделал, чтобы вы от своей i отстали:

 transmit_data[0] = !digitalRead(button); 
 transmit_data[1] = map(analogRead(potent), 0, 1023, 0, 180); 
 transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255);

 needToSend = (0x00 != memcmp(latest_data, transmit_data, sizeof(transmit_data))); // сравниваем массивы
 
 if (needToSend) {
    // отправляем данные, если они изменились
    radio.powerUp(); 
    radio.write(&transmit_data, sizeof(transmit_data)); 
    radio.powerDown();

    // синхронизируем массивы
    memcpy(latest_data, transmit_data, sizeof(transmit_data));
 } 

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

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Comoq пишет:

Это надо спросить у того, кто создал раздел для новичков. А если по сути - вопрос данной темы это не перебор вариантов, сам не дойду до понимания. Тут конкретный ступор, который надо разжевать, а кому разжёвывать кроме как знающим?

Короче - for здесь нужен чтобы упростить работу с массивами transmit_data[i] и latest_data[i]. Больше ни для чего.

Comoq
Offline
Зарегистрирован: 08.02.2019

mykaida пишет:

Короче - for здесь нужен чтобы упростить работу с массивами transmit_data[i] и latest_data[i]. Больше ни для чего.

Ваш коллега говорит, что есть ожидание изменения массива и отправка при изменении, не могу вкурить как эта функция отслеживает изменение именно посредством ввода команд кнопки, слайдера и т.д.

Comoq
Offline
Зарегистрирован: 08.02.2019

sadman41 пишет:

Ну, вот я вам "попроще" сделал, чтобы вы от своей i отстали:

Стало ещё непонятнее...

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну как, как... Сравнивается предыдущее состояние в latest_data и текущее в transmit_data. Если они не равны, то явно что-то изменилось.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

Ваш коллега говорит, что есть ожидание изменения массива и отправка при изменении, не могу вкурить как эта функция отслеживает изменение именно посредством ввода команд кнопки, слайдера и т.д.

послушайте, вы что там курите?

Функция "посредством ввода кнопки" ничего не отслеживает. Что за бред? Функция тупо сравнивает новое и старое содержимое массива. Если новое содержимое такое же, как старое - ничего не отправляем, если содержимое изменилось - отсылаем. Что тут может быть непонятного?

Никакого "изменения кнопки или слайдера" в этой части кода нет и вообще не понятно, зачем о нем говорить

Comoq
Offline
Зарегистрирован: 08.02.2019

sadman41 пишет:

Ну как, как... Сравнивается предыдущее состояние в latest_data и текущее в transmit_data. Если они не равны, то явно что-то изменилось.

Воооот, а вот тут и кроется моё непонимание, как оно может не меняться, если из-за инкремента оно постоянно меняется даже при отсутствии команд пользователя?

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Ну как, как... Сравнивается предыдущее состояние в latest_data и текущее в transmit_data. Если они не равны, то явно что-то изменилось.

пипец какой-то... "знал все буквы, не смог назвать слово"

sadman41
Offline
Зарегистрирован: 19.10.2016

Comoq пишет:

sadman41 пишет:

Ну, вот я вам "попроще" сделал, чтобы вы от своей i отстали:

Стало ещё непонятнее...

Да божешь ты мой. Вот у вас в руках секундомер. Я даю вам задание сообщать мне об истечении каждой минуты. Вы как это будете делать?

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

Воооот, а вот тут и кроется моё непонимание, как оно может не меняться, если из-за инкремента оно постоянно меняется даже при отсутствии команд пользователя?

клиника... занавес.

Я пас

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

клиника... занавес.

Я пас

Я новичок, в разделе для новичков, Вы относитесь как к опытному, который не в себе. Никто не сказал ни слова строго по теме, все вокруг да около либо на другом примере, я прошу прояснить именно этот момент, такое ощущение, что никто не в состоянии этого сделать.

Comoq
Offline
Зарегистрирован: 08.02.2019

sadman41 пишет:

 

Да божешь ты мой. Вот у вас в руках секундомер. Я даю вам задание сообщать мне об истечении каждой минуты. Вы как это будете делать?

Каждые 60 секунд уведомлять Вас, только вопрос не в этом, а в том, где тут энергосбережение, если "секунды" капают хочу я того или нет, потому что у нас есть приращение i++ каждый новый цикл.

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

я прошу прояснить именно этот момент, такое ощущение, что никто не в состоянии этого сделать.

и вы правы - я к примеру, не в состоянии вам что-то обьяснить.

вам уже и цикл FOR вовсе из кода убрали - а у вас все еще какая-то переменная i где-то там прирастает и что-то меняет в данных

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

 а у вас все еще какая-то переменная i где-то там прирастает и что-то меняет в данных

Пост №42 данной темы, надеюсь там я наконец объяснил, что мне не понятно. Это и только это непонятно, а не то, как проверяется изменение массива (я знаю, что сравнением).

b707
Offline
Зарегистрирован: 26.05.2017

Comoq пишет:

потому что у нас есть приращение i++ каждый новый цикл.

и что из того??? (тут должен быть сарказм)

Какое отношение приращение i имеет к данным? разве мы переменную i отправляем??

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Весело тут у вас!

ТС!, Дорогой, ты путаешь основной цикл loop() и этот мелкий for.

В этом for три строчки: при i = 0,1 и 2.

Заходя в loop и проведя все действия мы доходим до этого for . Он выполняется три раз для 0, 1 и 2, сравнивая элементы массива с этими номерами. Если хоть один отличается - взводим флаг на отправку.

Ты не психуй.... Скорее просто смешно получилось. У тебя в голове переклеились главный цикл и этот. Этот фор выполняется внутри ОДНОГО захода в луп, понял? ;)))) Садман41 тебе написал пример с выкинутым этим фор... делающий ровно то же самое.

sadman41
Offline
Зарегистрирован: 19.10.2016

Comoq пишет:

Каждые 60 секунд уведомлять Вас, только вопрос не в этом, а в том, где тут энергосбережение, если "секунды" капают хочу я того или нет, потому что у нас есть приращение i++ каждый новый цикл.

1) Энергосбережение тут условное. Как и всё у Гайвера - оно как будто по тексту исходника есть, но на самом деле, в сущности - его нет. И каждому объяснять подобные финты мы уже заеб...

2) Давайте разберемся, что лично вы считаете энергосбережением. Не Гайвер, а лично вы.

Comoq
Offline
Зарегистрирован: 08.02.2019

b707 пишет:

Какое отношение приращение i имеет к данным? разве мы переменную i отправляем??

Нет, но она определяет равенство/неравенство массивов отправленного и того что нужно отправить, а из-за инкремента это неравенство иногда будет выполняться, так как при приращении перезаписанная i будет время от времени соотвествовать условию i < 3, значит и флаг будет подниматься.

Comoq
Offline
Зарегистрирован: 08.02.2019

sadman41 пишет:

Давайте разберемся, что лично вы считаете энергосбережением.

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

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

2) Давайте разберемся, что лично вы считаете энергосбережением. Не Гайвер, а лично вы.

Гриш, наверно не стоит. Трезво оцени уровень спрашивающего - ты хочешь ему лекцию прочитать начиная с разницы междц битом и байтом?

Говоря по правде - идея сбережения тут есть. Она реализована через попу, как все у Гивера - но не этому... новичку  разъяснять детали, если он сути вовсе не понимает