12.05.2017, 22:38 | #51 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Долго думал, но так и не понял как побитово через switch/case.
Перебирать все 265 значений? И второй вопрос: А чисто гипотетически, может atmega проработать пару секунд на питании от конденсатора? Как можно рассчитать необходимую емкость конденсатора? Последний раз редактировалось Tohin; 12.05.2017 в 23:33. |
13.05.2017, 10:13 | #52 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Извиняюсь, написал глубоко не вникая в суть вопроса
Тогда через If |
13.05.2017, 10:54 | #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]); } } } |
|
16.05.2017, 20:26 | #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 } |
20.05.2018, 22:52 | #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') { //обработка полученных значений } } } Есть ли иные варианты? |
21.05.2018, 00:40 | #57 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
я бы switch-case использовал
|
11.08.2018, 16:28 | #58 |
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1031 |
Так, опять я не могу алгритм подобрать.
Есть 2 условия и 2 участка кода которые выполняются по этим условиям. И есть третий кусок кода, который должен выполнится только при наличии одного из условий. Пока написал так: Код:
if (условие1) { код1 } if (условие2){ код2 } if (условие1 || условие2){ код3 } |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|