Несколько задач (ssd1306, таймеры, прерывания и энергосбережение, оптимизация, уровень заряда)
- Войдите на сайт для отправки комментариев
Добрый день!
Есть ряд задач по программированию ардуины (за вознаграждение)
Опишу конфигурацию:
- leonardo pro micro (клон ардуины)
- дисплей на ssd1306 управляемый по i2c
- блок из 3х кнопок
- батарейка на 7.2в
А теперь список задач - буду благодарен за решение любой задачи. Если вы можете решить задачу, и знаете, сколько стоит её выполнение - пишите или сюда или на почту [neonmind собака яндекс.ру] или в скайп neonmind.
Задачи по дисплею (если вообще возможно)
- функция типа invertLine( line_num ) инвертирующая выбранную строку (темные пиксели засвечиваются, а яркие гаснут)
- функция скролла вверх вниз диапазона пикселей выбранной строки (не затрагивая другие области)
- функция blinkchar(line_num,start_px,end,px) которая позволяет мигать выбранным символом (при этом я не знаю какой там символ, и нельзя просто записать " ", а потом снова вывести символ)
Задачи по прерываниям и энергосбережению
- функция sleep(&on_button_click) уводящая микросхему в режим сна^ до нажатия кнопки
- функция сна^ на выбранный промежуток времени
^(совсем сна, чтоб абсолютный минимум потреблялся, не обычный делэй)
Общие задачи
- необходимо измерить примерный уровень заряда от батарейки (напомню 7.2 на gnd и raw) без аппаратных вмешательств, максимум подпояться к какому-нибудь выводу. Хотя бы на 3 сегмента - полный заряд, средний, слабый. Натыкался в интернете на функцию readVcc() ... но мне не помогло, может кто сможет помочь.
- *(со звездочкой)
Есть необходимость вещать сглаживание на разные параметры, поэтому
требуется элегантное решение функции smooth(), которая должна вернуть значение параметра в зависимости от текущего прогресса. Например, зная, что сглаживание начинается с 20го шага и длится 10шагов (и значение должно начать изменяться со 100попугаев до 200 попугаев) функция должна возвращать значение
100 - до 20го шага,
150 на 25 шаге
200 на 30 шаге
200 после 30 шага
+ есть возможность активации по кнопке, то есть процедура сглаживания начинается если была нажата кнопка.
главная сложность в том, что все это нужно делать в категориях FIXED
static int32_t FIXED_Mul(int32_t a, int32_t b) {
return(((int32_t)a*(int32_t)b) >> FIXED_FBITS);
}
static int32_t FIXED_Div(int32_t a, int32_t b) {
return(((int32_t)a << FIXED_FBITS)/(int32_t)b);
}
повторюсь, за все задания я готов заплатить, а уж если решение красивое и лаконичное - обещаю бонус.
Спасибо!
Здравствуйте!
По поводу энергосбережения есть хорошая библиотека LowPower можно посмотреть тут или тут.
Там есть функция:
1
LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF,
2
SPI_OFF, USART0_OFF, TWI_OFF);
Прерывания на 8 сек.
Скачайте библиотеку там есть порядка 3-х примеров, там все описано.
спасибо большое!
да, уже видел эту библиотеку) сейчас не могу сам копаться, нужно уводить в слип на произвольный промежуток времени (последовательными уводами в сон до нужной длительности)
сколько стоит написать 2 такие функции?