Например TDA7294

Форум РадиоКот • Просмотр темы - Arduino. Непонятное выражение в скетче
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 11:20:56

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Пт апр 27, 2018 22:40:27 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
Иногда в скетчах попадается вот такое:

Код:
digitalWrite(dataPin, data & 1 ? HIGH : LOW);


Что это значит, как этим пользоваться?

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 00:20:15 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
C ternary operator


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 00:28:26 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0

Не вяжется. По смыслу функция должна последовательно выдвигать байт

Код:
void t_send(byte data)
{
  for (int i = 0; i < 8; i++) {
    digitalWrite(clockPin, LOW);
    digitalWrite(dataPin, data & 1 ? HIGH : LOW);
    data >>= 1;
    digitalWrite(clockPin, HIGH);
  }

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 04:18:41 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
тогда вопрос у вас в чем? Что делает digitalWrite()?


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 06:53:55 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
...Не вяжется...


Все там вяжется, Вам arkhnchul правильную ссылку дал. Функция digitalWrite устанавливает на выводе МК (определяемым clockPin) бит данных, равный значению второго аргумента функции. В цикле, в выражении data & 1 ? HIGH : LOW выполняется проверка состояния 0-го бита переменной data и выводится HIGH, или LOW в зависимости находится в нём 1, или 0 соответственно. После выполняется data >>= 1; что есть сдвиг в нулевой бит переменной data значения очередного бита.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 11:24:46 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
shindax писал(а):
Все там вяжется, Вам arkhnchul правильную ссылку дал

Понял, спасибо.
Но вот вопрос мучает. Ведь получается, что data & 1 - это if (data & 1), но разве "&" - это оператор сравнения? В описании языка ардуины как бы и нет такого вообще.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 11:51:17 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
Голимый писал(а):
В описании языка ардуины как бы и нет такого вообще.
Разве есть язык ардуино? Еще скажите что разработчики ардуины написали свой компилятор? :)))
В ардуине язык C++ и компилятор GCC. :)

По теме. http://cppstudio.com/post/304/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 13:36:23 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
...Понял, спасибо.
Но вот вопрос мучает. Ведь получается, что data & 1 - это if (data & 1), но разве "&" - это оператор сравнения? В описании языка ардуины как бы и нет такого вообще.

Мучения никому не нужны. Повторюсь, arkhnchul дал Вам ссылку, где Вы найдёте ответы решительно на все вопросы, касаемо языка Си. Тогда Вы уже не будете сомневаться, чем отличаются операторы & и && к примеру. data & 1 означает побитовое И переменной data c числом 0b00000001. Чувствуете разницу? Понятие "алгебра Буля" Вам говорит о чем-то? Электроникой, хотя-бы поверхностно, занимались когда-нибудь?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 13:59:14 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
shindax писал(а):
Электроникой, хотя-бы поверхностно, занимались когда-нибудь?

Я пишу на ассемблере для MCS-51, и знаю что такое логические операции. Мне непонятно вот что: как логическая операция может становится условием.
Допустим,
если "А" (больше, меньше, равно, не равно и т.д) "B", тогда - что нибудь.
Понятно, нет вопросов
но, чего-то никак не въеду в ситуацию, когда условие: если "А" лог.И "B"... здесь затык.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 14:12:42 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
Операции в Си.
Побитовое И два слагаемых собираются по И. Например 0b000000001 & 0b00000011 на выходе будет 0b00000001, что есть побитовое И. Логическое И. Будет единица, при любом ненулевом значении. Т.Е. 0 && 1 будет 0, 0b00000001 && 0b00000010 будет 1. То же самое касается побитовом и логическом ИЛИ (| и ||), инверсии (~), отрицании (!). Для простоты картины запишите один операнд сверху, второй снизу, сложите их по И ( по ИЛИ ). В результате получите искомую величину. Либо логического характера, либо числового, если Вам это будет нужно. Для экономии памяти и логической определенности часто делается так:
Код:
#define STAGE ONE  0b00000001
#define STAGE TWO  0b00000010
#define STAGE THREE 0b00000100
...
unsigned char state;
...
if( state & STAGE_ONE )
{
... // действия на уровне ONE
state = 0b00000010;
...
}
if( state & STAGE_TWO )
{
... // действия на уровне TWO
state = 0b00000100;
}
if( state & STAGE_THREE )
{
... // действия на уровне THREE
state = 0;
}


много "конечных автоматов" на данном принципе устроено.


Последний раз редактировалось shindax Сб апр 28, 2018 14:32:37, всего редактировалось 6 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 14:13:21 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
Голимый писал(а):
если "А" лог.И "B"
если "А" лог.И "B" не равно нулю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 14:29:26 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
Мурик писал(а):
если "А" лог.И "B" не равно нулю.

Так "А" после лог.И с единицей никогда не будет равна нулю.
Ладно, я понял. Не стоит доискиваться, надо просто запомнить.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 14:37:09 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
...Ладно, я понял. Не стоит доискиваться, надо просто запомнить.

Так любой жизненный опыт так устроен. Есть туева хуча доказательств теоремы Пифагора. Но большинству людей достаточно получить правильный конечный результат. Цепь доказательств интересует немногих. :) В данном случае следует запомнить, что есть логическое сравнение ( &&, || ) и алгебраическое ( &, | )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 15:04:34 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
shindax писал(а):
что есть логическое сравнение ( &&, || ) и алгебраическое ( &, | )


Кстати, вот тут ( https://www.arduino.cc/reference/en/lan ... reference/
про "&" в языке Arduino пишут что:
Цитата:
&
[Pointer Access Operators]
Description

Referencing is one of the features specifically for use with pointers. The ampersand operator & is used for this purpose. If x is a variable, then &x represents the address of the variable x.

Благодаря чему, "определенности" становится больше. :))
То ли дело строгий ассемблер.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 15:14:28 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
...То ли дело строгий ассемблер.


Не бывает плохих ЯП, бывают плохие программисты. :) В холиуорах С_Vs_asm я давно уже не участвую, потому, как в теме. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 15:32:55 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
Так "А" после лог.И с единицей никогда не будет равна нулю.
A и не меняется, вычисляется результат операции.

Голимый писал(а):
Благодаря чему, "определенности" становится больше. :))
ну да, в С/С++ местами есть зависимость от контекста.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 19:03:03 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
Голимый писал(а):
Так "А" после лог.И с единицей никогда не будет равна нулю.
Почему?
К примеру этой строке
Голимый писал(а):
digitalWrite(dataPin, data & 1 ? HIGH : LOW);
условие будет ложно (равно 0) если 0 в нулевом бите переменной data. Не путайте И и ИЛИ.
Найдите учебник по С/С++ для начинающий и хорошо изучите язык чтобы не возникало путаницы. Или думали что ардуино это легко и просто и можно обойтись без знаний программирования?

Если Си кажется сложным, для ардуино можно писать в BASCOM-AVR.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Arduino. Непонятное выражение в скетче
СообщениеДобавлено: Сб апр 28, 2018 20:05:15 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
Мурик писал(а):
Не путайте И и ИЛИ

Виноват, бес попутал.
Спасибо, вопрос закрыт.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y