![]() |
![]() |
#51 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 ![]() ![]() ![]() |
![]()
Долго думал, но так и не понял как побитово через switch/case.
Перебирать все 265 значений? И второй вопрос: А чисто гипотетически, может atmega проработать пару секунд на питании от конденсатора? Как можно рассчитать необходимую емкость конденсатора? Последний раз редактировалось Tohin; 12.05.2017 в 23:33. |
![]() |
![]() |
![]() |
#52 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Извиняюсь, написал глубоко не вникая в суть вопроса
Тогда через If |
![]() |
![]() |
![]() |
#53 | |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 ![]() ![]() ![]() |
![]()
Да я тоже тормоз. Кнопок-то всего 4. и нажимаются они по одной. То есть всего 4 комбинации.
На профильном форуме подсказали еще вариант, для 4 кнопок: Цитата:
Минус - Неочевидность задания соответствия. У меня родился вот такой бред (еще не прошивал): Код:
void led_update(char led_status){ const int ledPin[] = {4,5,6,3}; int i; for (i = 0; i < 4; i++) { if (led_status&(1<<i)){ PORTB |= (1<<ledPin[i]); } else{ PORTB &= ~(1<<ledPin[i]); } } } |
|
![]() |
![]() |
![]() |
#55 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 ![]() ![]() ![]() |
![]()
Как обычно, не хватает времени изучить ВСЁ
![]() На easyelectronics (кстати видел там ALS'a) подсказали интересный код для переставки бит в байте: Код:
void led_update(uint8_t led_status){ uint8_t bo = 0x00; __asm__ __volatile__( "bst %[b_in], 0\n\t" "bld %[b_out], 3\n\t" "bst %[b_in], 1\n\t" "bld %[b_out], 6\n\t" "bst %[b_in], 2\n\t" "bld %[b_out], 5\n\t" "bst %[b_in], 3\n\t" "bld %[b_out], 4\n\t" : [b_out] "=&r" (bo) : [b_in] "r" (led_status) ); PORTD = bo; // или как вариант: PORTD |= bo; PORTD &= bo | 0b10000111; - это чтобы не менять другие биты в PORTD } |
![]() |
![]() |
![]() |
#56 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 ![]() ![]() ![]() |
![]()
Снова продолжаю мучать несчастную атмегу...
Задача передать несколько числовых значений в рандомном порядке. Чтобы их различать решил слать буковку перед циферкой. Типа: a45y18b10x12 Написал так: Код:
int y,x,a,b,d; void loop() { if (Serial.available()) { // wait a bit for the entire message to arrive delay(100); char c = Serial.read(); if (c == 'y') { y=Serial.parseInt(); } if (c == 'x') { x=Serial.parseInt(); } if (c == 'a') { a=Serial.parseInt(); } if (c == 'b') { b=Serial.parseInt(); } if (c == 'd') { d=Serial.parseInt(); } if (c == '\n') { //обработка полученных значений } } } Есть ли иные варианты? |
![]() |
![]() |
![]() |
#57 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
я бы switch-case использовал
|
![]() |
![]() |
![]() |
#58 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 ![]() ![]() ![]() |
![]()
Так, опять я не могу алгритм подобрать.
Есть 2 условия и 2 участка кода которые выполняются по этим условиям. И есть третий кусок кода, который должен выполнится только при наличии одного из условий. Пока написал так: Код:
if (условие1) { код1 } if (условие2){ код2 } if (условие1 || условие2){ код3 } |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|