![]() |
|
|
#51 |
|
Moderator
Регистрация: 20.07.2014
Адрес: МСК
Сообщений: 991
Вес репутации: 1032 ![]() ![]() ![]() |
Долго думал, но так и не понял как побитово через 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
Вес репутации: 1032 ![]() ![]() ![]() |
Да я тоже тормоз. Кнопок-то всего 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
Вес репутации: 1032 ![]() ![]() ![]() |
Как обычно, не хватает времени изучить ВСЁ
![]() На 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
Вес репутации: 1032 ![]() ![]() ![]() |
Снова продолжаю мучать несчастную атмегу...
Задача передать несколько числовых значений в рандомном порядке. Чтобы их различать решил слать буковку перед циферкой. Типа: 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
Вес репутации: 1032 ![]() ![]() ![]() |
Так, опять я не могу алгритм подобрать.
Есть 2 условия и 2 участка кода которые выполняются по этим условиям. И есть третий кусок кода, который должен выполнится только при наличии одного из условий. Пока написал так: Код:
if (условие1) {
код1
}
if (условие2){
код2
}
if (условие1 || условие2){
код3
}
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|