Если использовать конструкцию с ВЫЧИТАНИЕМ то при наступлении ВЕЛИКОГО ПЕРЕПОЛНЕНИЯ millis() результатом будет ОГРОМНОЕ число. Но так как тип UNSIGNED LONG оно будет ПОЛОЖИТЕЛЬНОЕ, и по любому БОЛЬШЕ нашего интервала. Единственное что с большой вероятностью случиться - это то что интервал получиться меньше чем мы задали константой на неопределенную величину. Если это не критично (в болшинстве случаев интервал контролируем по принципу не более чем ... ) то и бог с ним. Если же важна точная длительность интервала то применяем дополнительные меры для контроля значения millis() или используем другие алгоритмы.
Если использовать конструкцию с ВЫЧИТАНИЕМ то при наступлении ВЕЛИКОГО ПЕРЕПОЛНЕНИЯ millis() результатом будет ОГРОМНОЕ число.
Неправильно. Если использовать вычитание, то до перполнения, во время и после - ВСЕГДА будет правильный результат. То есть если вы задали интервал в 300 миллисекунд, то даже если начало интервала попадет до переполнения, а конец после - при вычитании вы получите именно 300 и никак иначе.
Вообще, вместо теоретических умствований - просто напишите тестовую программку в 10 строчек и убедитесь сами.
maxvalin, ваш "пример" из сообщения #35 по смыслу полностью аналогичен тому тексту Евгения. что вы просите обьяснить.
А код Евгения кажется сложным, потому что он не предназначен быть заготовкой скетчей для новичков. Он написан для того, чтобы наглядно показать разницу между сложением и вычитанием миллис. Поэтому в нем нет комментрариев "вставлять свой код сюда" - это не шаблон для ваших скетчей, это пособие для изучения.
А что касается книжек - их же тыщи. Мне в свое время очень понравился Монк - правда не уверен, что с него стоит начинать. Мне он понравился именно тем, что книжка не начинается с элементарщины, как большинство других.
А еще вот длинные список по IT книжкам на самые разные темы. Можно посмотреть оглавление, почитать выложенные для просмотра главы - чтобы решить стоит ли искать эту книжку целиком или нет:
книга по ссылке, ИМХО, как раз менее интересна, чем та. что я советовал выше. Ваша слишком начальная - таких много. Моя начально-продвинутая - это куда интереснее
книга по ссылке, ИМХО, как раз менее интересна, чем та. что я советовал выше. Ваша слишком начальная - таких много. Моя начально-продвинутая - это куда интереснее
Неправильно. Если использовать вычитание, то до перполнения, во время и после - ВСЕГДА будет правильный результат. ....
Поставил опыты с вычитаением беззнаковых целых в которых уменшаемое МЕНЬШЕ вычитаемого.
Для себя понял откуда берется результат в таком случае. Просто прибавляем (занимаем) к уменьшаемому с лева еще один разряд который равен 1. Это типа тот разряд в который уходит перепонение при сложении :-)
И тогда легко понять и заранее посчитать результат. Пример в табличке для целого беззнакового однобайтового чила. При двух и четырех байтовом числе принцип тот же.
Что бы не переживать за переполнение millis() и точно представлять что будет с вычислениямив этот момент - мне этого достаточно. :-)
//кусок кода из wiring.c
#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ISR(TIM0_OVF_vect)
#else
ISR(TIMER0_OVF_vect)
#endif
{
/* // copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
*/
//допишем две строки
TCNT0 = 5;//подводим счетчик.
timer0_millis++;
}
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
unsigned long micros() {
/* unsigned long m;
uint8_t oldSREG = SREG, t;
cli();
m = timer0_overflow_count;
#if defined(TCNT0)
t = TCNT0;
#elif defined(TCNT0L)
t = TCNT0L;
#else
#error TIMER 0 not defined
#endif
#ifdef TIFR0
if ((TIFR0 & _BV(TOV0)) && (t < 255))
m++;
#else
if ((TIFR & _BV(TOV0)) && (t < 255))
m++;
#endif
SREG = oldSREG;
return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
*/
//новая функция
unsigned int m;
uint8_t oldSREG = SREG, t;
t = TCNT0;//5-255
cli();
m = timer0_millis;
SREG = oldSREG;
return (((m & 0x3F) * 1000) + 4*(t-5));
}
void delay(unsigned long ms)
{
/* uint16_t start = (uint16_t)micros();
while (ms > 0) {
yield();
if (((uint16_t)micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
*/
//новая функция
uint16_t k = 64000;
uint32_t start = micros();
uint32_t carrMicros = start;
while (ms > 0) {
yield();
carrMicros = micros();
if((carrMicros + k - start) % k >= 1000) {
ms--;
start = carrMicros;
}
}
}
Прерывание по переполнению ТС0 теперь каждые 1000 мкс. Было 1024 мкс. Обработчик стал короче.
millis() без изменения. Не "перескакивает".
micros() переполняется чез 64 мс.
Код показывает возвращаемые значения миллис и микрос
Так вроде в комментариях к коду я пометил, что нужно дописать, а что закомментировать.
Но, повторюсь, что это только для ардуино 16МГц можно так по простому сделать.
Что значит переполнение? Разве может регистр переполнится? Мне кажется такого не бывает. Или речь про переполнение long long? В общем ничего не понял...
Так вроде в комментариях к коду я пометил, что нужно дописать, а что закомментировать.
Но, повторюсь, что это только для ардуино 16МГц можно так по простому сделать.
открыл в версии 1.8.5 там код несколько иной...
void delay(unsigned long ms)
{
/* uint32_t start = micros();
while (ms > 0) {
yield();
while ( ms > 0 && (micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
*/
Нет, конечно! Берёте восьмибитовый регистр и пихаете в него любое число, хоть дофигаллиард! Главное утрамбовать как следует - всё поместится!
А те, кто говорят, что памяти иногда не хватает - брешут! Им производители памяти приплачивают!
Там чего-то типа нужно больше суток для переполнения для обычной ардуинки миллисами. Но потом он должен сбросится я думаю. Ну ладно, рано мне так глубоко лезть.
Мое мнение - корни проблемы Великого Пареполнения в начальной школе, а именно в числовой прямой, той самой бесконечной палке с 0 посередине, которая преследует нас всю оставшуюся жизнь. Любой из тех, кто пытается программировать что либо, наверняка слышал о системах координат, отличных от Декартовых. Но когда мы пытаемся оперировать числами у нас перед глазами мимо воли возникает та самая пресловутая палка. И мы даже мысленно не можем ее изогнуть, тем более представить в виде спирали - вера не позволяет. Ведь она ПРЯМАЯ.
Если бы мне пришлось объяснять 9-летнему ребенку принцип хранения чисел в памяти я бы начал не с арифметики в доп. коде и даже не с 0 и 1, битов и байтов. Да, это фундамент, но моя задача показать фассад здания и растолковать принцип работы его курантов.
Я бы нарисовал циферблат. Секундный. С 0 наверху 1, 2, 3,... справа и ...57, 58, 59 слева. И сказал бы ему:" Представь, что есть тип беззнаковых целых "секунда". А циферблат - это место хранения этих секунд в компьютере (м. процессоре). И принимать он может только те значения, которые написаны на циферблате. Почему? Это сложно, пока просто прийми это как аксиому. Давай с тобой поставим точечку на 15 секундах. И прибавим еще 30. Давай сначала на бумажке. 15 + 30 = 45. А теперь на циферблате от точечки 15 отсчитаем 30 и поставим еще одну точечку. На какой она циферке? Правильно, 45, так же как и на бумажечке. А к 45 + 20 на бумажечке = 65, а на циферблате на 5. Упс. Вот это и есть переполнение..."
Так же объяснил бы и вычитание 15 - 20 = 55 (тип секунда) для условного компьютера , но на бумажечке = -5, и сравнение - (45+20)<15 (сек)для компьютера, но (45+20 )> 15 для бумажечки (читай бесконечной цифровой палки). Протм к циферблату я бы приладил секундную стрелку от дешевых китайских часов, дрыгающихся раз/сек и сказал бы, что. что примерно так работает и millis() у нашего условного компьютера - мы всегда можем узнать, на какую цифру указывает стрелочка. Только миллисов этих у нас не 60, а 4294967296 и слева от "0" стоит число 4294967295.
И только после этого попытася бы объяснить, почему правильно сравнивать ЧИСЛО (типа секунда) от метки до текущего millis() (разность) , а не пытаться поставить метку наперед (сумма), напоровшись на переполнение и некорректное сравнение.
Ардуина для большинства лишь хобби. И в хобби приходят люди разного возраста, с разным уровнем подготовки (часто 0) Взрослому человеку с его устоявшимися понятиями втолковать такие вещи труднее, чем ребенку. Поэтому проблема Великого Пареполнения вечна.
Вы не первый. Уже рисовали, в т.ч. и на этом форуме. Кто б ещё читал :(
kolyn пишет:
мысленно не можем ее изогнуть, тем более представить в виде спирали - вера не позволяет. Ведь она ПРЯМАЯ.
Не клевещите на прямые! Прямая - это линия, имеющая перегиб в каждой точке! Именно так в советское время студенты-первокурсники доказывали, что линия партии прямая :)))
Мое мнение - корни проблемы Великого Пареполнения в начальной школе, а именно в числовой прямой, той самой бесконечной палке с 0 посередине, которая преследует нас всю оставшуюся жизнь...
Замечу, что не только этой проблемы, но и многих других.
Например, человеку от рождения присуще логарифмическое восприятие масштаба. Но в школе его принудительно переучивают на линейный. Причем, преуспевают в этом до такой степени, что естественный логарифмический масштаб уже представляется "человеку цивилизованному" чем-то невообразимо сложным.
Замечу, что не только этой проблемы, но и многих других.
Например, человеку от рождения присуще логарифмическое восприятие масштаба. Но в школе его принудительно переучивают на линейный. Причем, преуспевают в этом до такой степени, что естественный логарифмический масштаб уже представляется "человеку цивилизованному" чем-то невообразимо сложным.
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
Замечу, что не только этой проблемы, но и многих других.
Например, человеку от рождения присуще логарифмическое восприятие масштаба. Но в школе его принудительно переучивают на линейный. Причем, преуспевают в этом до такой степени, что естественный логарифмический масштаб уже представляется "человеку цивилизованному" чем-то невообразимо сложным.
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
Например, психологическое восприятие цены первой бутылки водки и последующих.
Помнится старинный анекдот, когда профессор спрашивает у студентов мединститута "какая часть тела при возбуждении увеличивается в 10 раз". И это не то что вы подумали.)
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
зрение, слух
касательно зрения так особенно, не существует датчика со столь же большим динамическим диапазном по свету, как человеческий глаз.
И будете не правы. Там квадратичная зависимость. Естественна для человека это линейность, квадратичность и кубичность. Все это есть в природе и известно с древности. А степени и логарифмичность это искусственные математические понятия позворяющие человеку необъятный мир.
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
1. Кучку из трех орешков Вы легко отличите от кучки из двух орешков. А вот кучку из 100 орешков - вряд ли столь легко отличите от кучки в 99 орешков.
2. Ряд кучек 2-4-8-16-32-64 на газ воспринимается более равномерно возрастающей, чем ряд 2-4-6-8-10. В последнем случае "рост" визуально замедляется.
3. Если у Вас о спине бегают две белки, то Вы почувствуете, когда их станет, скажем, 6. Но если белок изначально было 20, то добавление еще 4 Вы вряд ли почувствуете.
4. Ну а в звуке - даже сомнений не вызывает: и дБ и октава (полутон) - единицы логарифмические. Правда, на слух к линейному масштабу не переучивают, поэтому в естественности логарифимческого никто и не сомневается.
И будете не правы. Там квадратичная зависимость. Естественна для человека это линейность, квадратичность и кубичность. Все это есть в природе и известно с древности. А степени и логарифмичность это искусственные математические понятия позворяющие человеку необъятный мир.
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
1. Кучку из трех орешков Вы легко отличите от кучки из двух орешков. А вот кучку из 100 орешков - вряд ли столь легко отличите от кучки в 99 орешков.
2. Ряд кучек 2-4-8-16-32-64 на газ воспринимается более равномерно возрастающей, чем ряд 2-4-6-8-10. В последнем случае "рост" визуально замедляется.
3. Если у Вас о спине бегают две белки, то Вы почувствуете, когда их станет, скажем, 6. Но если белок изначально было 20, то добавление еще 4 Вы вряд ли почувствуете.
4. Ну а в звуке - даже сомнений не вызывает: и дБ и октава (полутон) - единицы логарифмические. Правда, на слух к линейному масштабу не переучивают, поэтому в естественности логарифимческого никто и не сомневается.
Сережа! Видит Б..г, мы часто спорим, но тут я неистово плюсую!!!!! +100500!!!!!
Учитывая систематически подтверждаемые доказательства нелинейности сущности ряда величин, подтверждаемые экспериментами с водкой, я бы не стал так торопиться в выводах...
К слову - некоторые личности, как мне кажется, вовсе имеют бинарную систему восприятия. Например, это видно из системы их исчисления: них... и дох... ("ничтожно мало" и "достаточно много").
Мое мнение - корни проблемы Великого Пареполнения в начальной школе, а именно в числовой прямой, той самой бесконечной палке с 0 посередине, которая преследует нас всю оставшуюся жизнь. Любой из тех, кто пытается программировать что либо, наверняка слышал о системах координат, отличных от Декартовых. Но когда мы пытаемся оперировать числами у нас перед глазами мимо воли возникает та самая пресловутая палка. И мы даже мысленно не можем ее изогнуть, тем более представить в виде спирали - вера не позволяет. Ведь она ПРЯМАЯ.
Позвольте сделать Вам замечание (только ради срача, а не для пользы дела)
Вот вы наезжаете на ПРЯМУЮ, а сами в примере для часов используете ОТРЕЗОК.
К тому что вы его изгибаете привращая в кривую и замыкаете в круг - притензий нет. :-) хороший пример.
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
зрение, слух
касательно зрения так особенно, не существует датчика со столь же большим динамическим диапазном по свету, как человеческий глаз.
Зрение тож логарифмично. Почитайте про видимые звездные величины. Изменение линейно, на 1 величину, глазом при измерении приборами оказалось логарифмическим. И ДД глаза по свету давно превзойден телескопами. Фотоаппараты уступают глазу конечно по ДД, отсюда и ползут такие мысли. Но бытовая мылница (сорри, Ваш суперпрофиаппарат;) далеко не предел.
Позвольте сделать Вам замечание (только ради срача, а не для пользы дела)
Вот вы наезжаете на ПРЯМУЮ, а сами в примере для часов используете ОТРЕЗОК.
Прошу прощения за рисунок "от ноги". Красным - то, как хранится безнаковый целый тип (секунда) в нашем условном компьютере. Если быть совсем точным, на рисунке должна быть не окружность, а множество из 60 точек. Синим - числовая СПИРАЛЬ. Проекция синего на красное - то, что будет храниться в памяти а(сек)=-45==15==75. И если мы вдруг запишем в коде а(сек) = 75.4; то Великое Нечто обязательно пошлет нас ... разбираться со своими ошибками. Это Нечто пытается сделать проекцию синего на красное, но там нет нужной точки, там пустота.
Любой целочисленный тип можно представить в виде такой модели, нужно лишь правильно расставить точки на красной окружности. И тогда задачи из первого поста этой темы легко решить в уме.
Это Нечто пытается сделать проекцию синего на красное, но там нет нужной точки, там пустота
Круто! +1
Вот за что не любил вышку в инстите -всякие там комплексные числа, операции с матрицами и т.д. - все это вычислять научился и даже экзамены сдавал на 4-5. Но вот то что этого в реале не существует - меня очень сильно напрягало и не давало понять их суть. И никакие аналогии не помогали.
То ли дело програмирование - 0,1, разрядность - все четко детерминивано, все можно потрогать - красота!
Даже великое переполнение милис можно потрогать руками. :-)
А что, натуральные (или какие-то ещё) числа существуют в реале?
А пин Вы вводите что комплексными или матрицей. Четыре натуральных числа :)))
ПС: Извините что немного не полно написал. ПИН у Банковской карточки . Регуляно требуют при расплате карточкой. Вот где очень сильно надо знать !! цифры и не путать с буквами.
Это Нечто пытается сделать проекцию синего на красное, но там нет нужной точки, там пустота
Круто! +1
Вот за что не любил вышку в инстите -всякие там комплексные числа, операции с матрицами и т.д. - все это вычислять научился и даже экзамены сдавал на 4-5. Но вот то что этого в реале не существует - меня очень сильно напрягало и не давало понять их суть. И никакие аналогии не помогали.
Всяко бывает. Мне вот когда-то пришлось применять в расчете гиперболические функции; до того они как-то не представлялись мне реальными.
комплексные числа, операции с матрицами и т.д. ... этого в реале не существует
А что, натуральные (или какие-то ещё) числа существуют в реале?
Сложил в кучку ардуинки - вот тебе и натуральное число. Сложил в кучку сгоревшие ардуинки (или другу ЦЕЛЫЕ :-) отдал)- отрицательное целое число. Дробь - когда сломал ардуинку пополам (или в другой пропорции). А комплексное число - ?
/ хочу ардуинку но еще не купил, купила на али но посылка не пришла :-) /
Сложил в кучку ардуинки - вот тебе и натуральное число. Сложил в кучку сгоревшие ардуинки (или другу ЦЕЛЫЕ :-) отдал)- отрицательное целое число. Дробь - когда сломал ардуинку пополам (или в другой пропорции). А комплексное число - ?
/ хочу ардуинку но еще не купил, купила на али но посылка не пришла :-) /
А здесь еще изящнее. Вот если бы Вы были сыном американского миллиардера, то у вас этих ардуинок было дофига. Или если бы нерельно разбагатели. А так и багатство у вас мнимое, и ардуинки мнимые. Так что эти комплесные числа нам с зомбоящеков льют потоком. А за эти действия платят реальные деньги. Но Вы же математику не знаете. Так что и комплексных чисел просто не видете в жизни. А раз не видете , то их нет для вас.
Добрый день!
Правильно ли я понимаю?
Если использовать конструкцию с ВЫЧИТАНИЕМ то при наступлении ВЕЛИКОГО ПЕРЕПОЛНЕНИЯ millis() результатом будет ОГРОМНОЕ число. Но так как тип UNSIGNED LONG оно будет ПОЛОЖИТЕЛЬНОЕ, и по любому БОЛЬШЕ нашего интервала. Единственное что с большой вероятностью случиться - это то что интервал получиться меньше чем мы задали константой на неопределенную величину. Если это не критично (в болшинстве случаев интервал контролируем по принципу не более чем ... ) то и бог с ним. Если же важна точная длительность интервала то применяем дополнительные меры для контроля значения millis() или используем другие алгоритмы.
Добрый день!
Правильно ли я понимаю?
Если использовать конструкцию с ВЫЧИТАНИЕМ то при наступлении ВЕЛИКОГО ПЕРЕПОЛНЕНИЯ millis() результатом будет ОГРОМНОЕ число.
Неправильно. Если использовать вычитание, то до перполнения, во время и после - ВСЕГДА будет правильный результат. То есть если вы задали интервал в 300 миллисекунд, то даже если начало интервала попадет до переполнения, а конец после - при вычитании вы получите именно 300 и никак иначе.
Вообще, вместо теоретических умствований - просто напишите тестовую программку в 10 строчек и убедитесь сами.
maxvalin, ваш "пример" из сообщения #35 по смыслу полностью аналогичен тому тексту Евгения. что вы просите обьяснить.
А код Евгения кажется сложным, потому что он не предназначен быть заготовкой скетчей для новичков. Он написан для того, чтобы наглядно показать разницу между сложением и вычитанием миллис. Поэтому в нем нет комментрариев "вставлять свой код сюда" - это не шаблон для ваших скетчей, это пособие для изучения.
А что касается книжек - их же тыщи. Мне в свое время очень понравился Монк - правда не уверен, что с него стоит начинать. Мне он понравился именно тем, что книжка не начинается с элементарщины, как большинство других.
А еще вот длинные список по IT книжкам на самые разные темы. Можно посмотреть оглавление, почитать выложенные для просмотра главы - чтобы решить стоит ли искать эту книжку целиком или нет:
http://it-ebooks.info/
Только не спрашивайте, где потом эти книги скачать :) - это сами
О! Так вот на чьих прошивках летают Коптеры )))
Главное - штоб на прошивках АлексаГувера не начали летать...
О! Так вот на чьих прошивках летают Коптеры )))
книга по ссылке, ИМХО, как раз менее интересна, чем та. что я советовал выше. Ваша слишком начальная - таких много. Моя начально-продвинутая - это куда интереснее
Другого способа не нашел как отписаться от темы.
О! Так вот на чьих прошивках летают Коптеры )))
книга по ссылке, ИМХО, как раз менее интересна, чем та. что я советовал выше. Ваша слишком начальная - таких много. Моя начально-продвинутая - это куда интереснее
Так вроде как перевод этой книги...
Добрый день!
Правильно ли я понимаю? ...
Поставил опыты с вычитаением беззнаковых целых в которых уменшаемое МЕНЬШЕ вычитаемого.
Для себя понял откуда берется результат в таком случае. Просто прибавляем (занимаем) к уменьшаемому с лева еще один разряд который равен 1. Это типа тот разряд в который уходит перепонение при сложении :-)
И тогда легко понять и заранее посчитать результат. Пример в табличке для целого беззнакового однобайтового чила. При двух и четырех байтовом числе принцип тот же.
Что бы не переживать за переполнение millis() и точно представлять что будет с вычислениямив этот момент - мне этого достаточно. :-)
Добрый день!
Правильно ли я понимаю? ...
Поставил опыты с вычитаением беззнаковых целых ....
Вот так делать каждому, у кого голоса в голове шепчут "переполнение миллиса"!! Также и тем, у кого кредо "всегда лонг для миллиса".
Ну вобщем дурная голова рукам покоя не дает..)
Покажу что получилось. Даже работает...
Прерывание по переполнению ТС0 теперь каждые 1000 мкс. Было 1024 мкс. Обработчик стал короче.
millis() без изменения. Не "перескакивает".
micros() переполняется чез 64 мс.
Код показывает возвращаемые значения миллис и микрос
Уточните, надо править wiring.c ???
Уточните, надо править wiring.c ???
Так вроде в комментариях к коду я пометил, что нужно дописать, а что закомментировать.
Но, повторюсь, что это только для ардуино 16МГц можно так по простому сделать.
Что значит переполнение? Разве может регистр переполнится? Мне кажется такого не бывает. Или речь про переполнение long long? В общем ничего не понял...
Скоро Новый Год, а под Новый Год возможно всё...
А те, кто говорят, что памяти иногда не хватает - брешут! Им производители памяти приплачивают!
Не могли бы вы рассказать, что вам еще кажется? Есть у меня ощущение, что это может оказаться крайне занимательным.
Уточните, надо править wiring.c ???
Так вроде в комментариях к коду я пометил, что нужно дописать, а что закомментировать.
Но, повторюсь, что это только для ардуино 16МГц можно так по простому сделать.
открыл в версии 1.8.5 там код несколько иной...
А те, кто говорят, что памяти иногда не хватает - брешут! Им производители памяти приплачивают!
Там чего-то типа нужно больше суток для переполнения для обычной ардуинки миллисами. Но потом он должен сбросится я думаю. Ну ладно, рано мне так глубоко лезть.
на самом деле почти 2 месяца.
Но как только вы начнете делать автономные устройства - быстро столкнетесь с тем. что это не так и долго
открыл в версии 1.8.5 там код несколько иной...
Я в 1.6.5 делал. Версии поновей даже не скачивал. Как я отстал)
Мое мнение - корни проблемы Великого Пареполнения в начальной школе, а именно в числовой прямой, той самой бесконечной палке с 0 посередине, которая преследует нас всю оставшуюся жизнь. Любой из тех, кто пытается программировать что либо, наверняка слышал о системах координат, отличных от Декартовых. Но когда мы пытаемся оперировать числами у нас перед глазами мимо воли возникает та самая пресловутая палка. И мы даже мысленно не можем ее изогнуть, тем более представить в виде спирали - вера не позволяет. Ведь она ПРЯМАЯ.
Если бы мне пришлось объяснять 9-летнему ребенку принцип хранения чисел в памяти я бы начал не с арифметики в доп. коде и даже не с 0 и 1, битов и байтов. Да, это фундамент, но моя задача показать фассад здания и растолковать принцип работы его курантов.
Я бы нарисовал циферблат. Секундный. С 0 наверху 1, 2, 3,... справа и ...57, 58, 59 слева. И сказал бы ему:" Представь, что есть тип беззнаковых целых "секунда". А циферблат - это место хранения этих секунд в компьютере (м. процессоре). И принимать он может только те значения, которые написаны на циферблате. Почему? Это сложно, пока просто прийми это как аксиому. Давай с тобой поставим точечку на 15 секундах. И прибавим еще 30. Давай сначала на бумажке. 15 + 30 = 45. А теперь на циферблате от точечки 15 отсчитаем 30 и поставим еще одну точечку. На какой она циферке? Правильно, 45, так же как и на бумажечке. А к 45 + 20 на бумажечке = 65, а на циферблате на 5. Упс. Вот это и есть переполнение..."
Так же объяснил бы и вычитание 15 - 20 = 55 (тип секунда) для условного компьютера , но на бумажечке = -5, и сравнение - (45+20)<15 (сек)для компьютера, но (45+20 )> 15 для бумажечки (читай бесконечной цифровой палки). Протм к циферблату я бы приладил секундную стрелку от дешевых китайских часов, дрыгающихся раз/сек и сказал бы, что. что примерно так работает и millis() у нашего условного компьютера - мы всегда можем узнать, на какую цифру указывает стрелочка. Только миллисов этих у нас не 60, а 4294967296 и слева от "0" стоит число 4294967295.
И только после этого попытася бы объяснить, почему правильно сравнивать ЧИСЛО (типа секунда) от метки до текущего millis() (разность) , а не пытаться поставить метку наперед (сумма), напоровшись на переполнение и некорректное сравнение.
Ардуина для большинства лишь хобби. И в хобби приходят люди разного возраста, с разным уровнем подготовки (часто 0) Взрослому человеку с его устоявшимися понятиями втолковать такие вещи труднее, чем ребенку. Поэтому проблема Великого Пареполнения вечна.
Я бы нарисовал циферблат.
Вы не первый. Уже рисовали, в т.ч. и на этом форуме. Кто б ещё читал :(
Не клевещите на прямые! Прямая - это линия, имеющая перегиб в каждой точке! Именно так в советское время студенты-первокурсники доказывали, что линия партии прямая :)))
Мое мнение - корни проблемы Великого Пареполнения в начальной школе, а именно в числовой прямой, той самой бесконечной палке с 0 посередине, которая преследует нас всю оставшуюся жизнь...
Например, человеку от рождения присуще логарифмическое восприятие масштаба. Но в школе его принудительно переучивают на линейный. Причем, преуспевают в этом до такой степени, что естественный логарифмический масштаб уже представляется "человеку цивилизованному" чем-то невообразимо сложным.
Замечу, что не только этой проблемы, но и многих других.
Например, человеку от рождения присуще логарифмическое восприятие масштаба. Но в школе его принудительно переучивают на линейный. Причем, преуспевают в этом до такой степени, что естественный логарифмический масштаб уже представляется "человеку цивилизованному" чем-то невообразимо сложным.
Замечу, что не только этой проблемы, но и многих других.
Например, человеку от рождения присуще логарифмическое восприятие масштаба. Но в школе его принудительно переучивают на линейный. Причем, преуспевают в этом до такой степени, что естественный логарифмический масштаб уже представляется "человеку цивилизованному" чем-то невообразимо сложным.
Как профессионал, скажу, если не хватило одной, пофиг, скока стоит вторая...
А ещё есть выражение "две много, а три мало". Обратный логарифм получается.)
А ещё есть выражение "две много, а три мало". Обратный логарифм получается.)
зрение, слух
касательно зрения так особенно, не существует датчика со столь же большим динамическим диапазном по свету, как человеческий глаз.
Помнится старинный анекдот, когда профессор спрашивает у студентов мединститута "какая часть тела при возбуждении увеличивается в 10 раз". И это не то что вы подумали.)
Этта зрачок, я знаю :-)
А то, что вы подумали, всего в 2,5 раза.
зрение, слух
касательно зрения так особенно, не существует датчика со столь же большим динамическим диапазном по свету, как человеческий глаз.
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
2. Ряд кучек 2-4-8-16-32-64 на газ воспринимается более равномерно возрастающей, чем ряд 2-4-6-8-10. В последнем случае "рост" визуально замедляется.
3. Если у Вас о спине бегают две белки, то Вы почувствуете, когда их станет, скажем, 6. Но если белок изначально было 20, то добавление еще 4 Вы вряд ли почувствуете.
4. Ну а в звуке - даже сомнений не вызывает: и дБ и октава (полутон) - единицы логарифмические. Правда, на слух к линейному масштабу не переучивают, поэтому в естественности логарифимческого никто и не сомневается.
И будете не правы. Там квадратичная зависимость. Естественна для человека это линейность, квадратичность и кубичность. Все это есть в природе и известно с древности. А степени и логарифмичность это искусственные математические понятия позворяющие человеку необъятный мир.
Естественна для человека это линейность, квадратичность и кубичность.
Пикассо с Малевичем могли бы с Вами не согласиться. Насчет Эвклида не уверен, правда.
Конечно могли БЫ, но ведь не сделали этого! )))
А можно пример изначально логарифмического восприятия масштаба? Как-нибудь на "белочках и орешках"?
2. Ряд кучек 2-4-8-16-32-64 на газ воспринимается более равномерно возрастающей, чем ряд 2-4-6-8-10. В последнем случае "рост" визуально замедляется.
3. Если у Вас о спине бегают две белки, то Вы почувствуете, когда их станет, скажем, 6. Но если белок изначально было 20, то добавление еще 4 Вы вряд ли почувствуете.
4. Ну а в звуке - даже сомнений не вызывает: и дБ и октава (полутон) - единицы логарифмические. Правда, на слух к линейному масштабу не переучивают, поэтому в естественности логарифимческого никто и не сомневается.
Сережа! Видит Б..г, мы часто спорим, но тут я неистово плюсую!!!!! +100500!!!!!
Конечно могли БЫ, но ведь не сделали этого! )))
Учитывая систематически подтверждаемые доказательства нелинейности сущности ряда величин, подтверждаемые экспериментами с водкой, я бы не стал так торопиться в выводах...
К слову - некоторые личности, как мне кажется, вовсе имеют бинарную систему восприятия. Например, это видно из системы их исчисления: них... и дох... ("ничтожно мало" и "достаточно много").
Отключите от рассылок..
Позвольте сделать Вам замечание (только ради срача, а не для пользы дела)
Вот вы наезжаете на ПРЯМУЮ, а сами в примере для часов используете ОТРЕЗОК.
К тому что вы его изгибаете привращая в кривую и замыкаете в круг - притензий нет. :-) хороший пример.
зрение, слух
касательно зрения так особенно, не существует датчика со столь же большим динамическим диапазном по свету, как человеческий глаз.
Зрение тож логарифмично. Почитайте про видимые звездные величины. Изменение линейно, на 1 величину, глазом при измерении приборами оказалось логарифмическим. И ДД глаза по свету давно превзойден телескопами. Фотоаппараты уступают глазу конечно по ДД, отсюда и ползут такие мысли. Но бытовая мылница (сорри, Ваш суперпрофиаппарат;) далеко не предел.
Позвольте сделать Вам замечание (только ради срача, а не для пользы дела)
Вот вы наезжаете на ПРЯМУЮ, а сами в примере для часов используете ОТРЕЗОК.
Прошу прощения за рисунок "от ноги". Красным - то, как хранится безнаковый целый тип (секунда) в нашем условном компьютере. Если быть совсем точным, на рисунке должна быть не окружность, а множество из 60 точек. Синим - числовая СПИРАЛЬ. Проекция синего на красное - то, что будет храниться в памяти а(сек)=-45==15==75. И если мы вдруг запишем в коде а(сек) = 75.4; то Великое Нечто обязательно пошлет нас ... разбираться со своими ошибками. Это Нечто пытается сделать проекцию синего на красное, но там нет нужной точки, там пустота.
Любой целочисленный тип можно представить в виде такой модели, нужно лишь правильно расставить точки на красной окружности. И тогда задачи из первого поста этой темы легко решить в уме.
Круто! +1
Вот за что не любил вышку в инстите -всякие там комплексные числа, операции с матрицами и т.д. - все это вычислять научился и даже экзамены сдавал на 4-5. Но вот то что этого в реале не существует - меня очень сильно напрягало и не давало понять их суть. И никакие аналогии не помогали.
То ли дело програмирование - 0,1, разрядность - все четко детерминивано, все можно потрогать - красота!
Даже великое переполнение милис можно потрогать руками. :-)
ПС: Извините что немного не полно написал. ПИН у Банковской карточки . Регуляно требуют при расплате карточкой. Вот где очень сильно надо знать !! цифры и не путать с буквами.
Да, пин то можно как угодно обозначать. Вопрос был не об обозначении пина.
Круто! +1
Вот за что не любил вышку в инстите -всякие там комплексные числа, операции с матрицами и т.д. - все это вычислять научился и даже экзамены сдавал на 4-5. Но вот то что этого в реале не существует - меня очень сильно напрягало и не давало понять их суть. И никакие аналогии не помогали.
Сложил в кучку ардуинки - вот тебе и натуральное число. Сложил в кучку сгоревшие ардуинки (или другу ЦЕЛЫЕ :-) отдал)- отрицательное целое число. Дробь - когда сломал ардуинку пополам (или в другой пропорции). А комплексное число - ?
/ хочу ардуинку но еще не купил, купила на али но посылка не пришла :-) /
/ хочу ардуинку но еще не купил, купила на али но посылка не пришла :-) /
+100500
- Что там сегодня по телевизору?
- Комплексные числа!
:-))))