RFID RC552

arduinschik
Offline
Зарегистрирован: 06.07.2017

Я новичок, с языка Processing и Arduino начал свой путь программиста. Помогите разобраться с функциями библиотеки RFID master, а ещё, расскажите пожалуйста, что такое всякие там HEX, DEC и 00*F

negavoid
Offline
Зарегистрирован: 09.07.2016

arduinschik пишет:

Помогите разобраться с функциями библиотеки RFID master, а ещё, расскажите пожалуйста, что такое всякие там HEX, DEC и 00*F

Помогаю, разбираюсь, ура, разобрался!

HEX - это, разумеется, Неведомая Ё***ная Х***ня

DEC - это ДЕЦимация, то, чего ардуинщики увы, ныне успешно избегают, чай, не древний Рим, а иногда может стоило бы и подпасть под неё ))

С 00*F всё вообще просто - это 0.0 градусов по буржуйской шкале Фаренгейта, что соответствует -17.77 по Цельсию

negavoid
Offline
Зарегистрирован: 09.07.2016

И это я ещё добрый, так что, пока не набежали остальные помогуны, быстро марш в гугл читать и про библиотеку, и про неведомые сокращения, раскладывать всё это в голове, и возвращаться, но уже с адекватными вопросами :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

negavoid пишет:

И это я ещё добрый

Даже слишком!

Честно говоря, тоже хотел помочь, но после Вашего блестящего поста понял, что любая моя помощь будет бледной и ТС в ней уже не нуждается :)

Viktor1306
Viktor1306 аватар
Offline
Зарегистрирован: 19.05.2016
В мире электроники применяются, в основном, 3 вида исчислений двоичное, десятичное и шестнадцатиричное. Число 108 - это десятичное. 01101100 - двоичное, а 6С - шестнадцатиричное. 
 
Десятичная система - понятная человеку, поэтому в ней, как правило, осуществляется вывод данных. Так же она используется в языках программирования высокого уровня (С, Pascal(delphi) и т.п.).  Десятичная система представлена арабскими цифрами 0,1,2,3,4,5,6,7,8,9 и обозначается DEC - от английского слова decimal - децимальная. Сопоставленный десятичной системе тип - integer. Пример использования: программирования 9 вывода Ардуины на выход с высоким импендансом. pinMode(9,OUTPUT); digitalWrite(9,HIGH); Тут номер вывода записан в десятичной системе.
 
Двоичная система - это система машинных кодов, именно на ней работают все процессоры, контролееры и прочая цифровая электроника. Простейший пример - бит. Бит может иметь всего 2 значения 0 - напряжение нет, и 1 - напряжение есть. Пример битовой ячейки - обычный выключатель. Из бит состоят байты, комбинации из 8 бит. В байте каждый отдельный бит имеет свой "вес" 0-ой (справа налево) равен 1, 1-ой - 2, 2-й - 4, 3-й - 8, 4-й - 16, 5-ый - 32, 6-ой - 64 и последний, 7-ой - 128. Для того, чтоб перевести из десятичной ситемы в двоичную нужно целую часть числа делить на основание новой, а для перевода из двоичной в десятичную - сложить значения всех бит, имеющих состояние 1. В данном примере 64+32+8+4 = 108. Из за неудобства работы с данной системой, она используется только на самом низком уровне программирования - машинных кодах. Обозначается эта система BIN - от английского binary - бинарная, представлена 2-мя арабскими цифрами 0 и 1 либо словами low-high, false-true и т.д. Для того, чтоб запрограммировать вывод 9 ардуины на выход с высоким импендансом используя двоичную систему придётся сначала посмотреть схему Ардуины. Например для про-мини мы видим, что вывод D9 соответствует порту PB1 микроконтроллера, значит сначала нужно перевести этот порт в режим вывода командой DDRB = 0b00000010 а после установить на нём высокий уровень PORTB = 0b00000010. Использовать такой способ для ардуин крайне неудобно, во первых нужно постоянно заглядывать в принципиальную схему, для сопоставления выводов ардуины портам МК, а во вторых это годится только при инициализации, так как при изменении состояния выхода таким способом, необходимо позаботится о том, чтоб сохранить состояния остальных выводов порта. Если попробовать перевести 9-ый вывод ардуины в 0 с помощью PORTB = 0b00000000 то за одно переведёте и выводы с 8 по 13 в состояние лог 0.
 
Шестнадцатиричная система - используется в языке ассемблер и для типа Byte в С, Pascal и др. Представлена арабскими цифрами от 0 до 9 и латинскими буквами от A до F, записыватся в ассемблере и С от 0х00 до 0хFF, в Паскале и Делфи от $00 до $FF. Обозначается как HEX, от слова hexadecimal - шестнадцатиричный. 1 байт записывается 2-мя символами от 00 до FF. Конкретно 0х00 означает т.н. нуль строку записанную в шестнадцатиричной системе, в двоичной нуль строка имеет вид 0b00000000, и может иметь значения от 00000000 до 11111111, в десятичной системе 0d000, имеет значения от 0 до 255. Потому что сумма всех бит одного байта равняется 128+64+32+16+8+4+2+1 = 255. Хорошим примером служит ip адрес компьютера, он состоит из 4 байт, и поэтому не может быть, допустим 10.583.290.20. Максимальное значение каждого байта не может превышать 255. Для программирования порта PB1 МК нужно записать DDRB = 0x02 PORTB = 0x02. Для управления выводом нужно прибавить или отнять байт пина к заначению PORTx или DDRx если нужно изменить режим ввода/вывода. Пример скетча для того, чтобы помигать светодиодом на выводе А0 ардуины где используются все системы счисления:
void setup() {
  DDRC = 0b00000001; //записываем в регистр DDR что вывод PC0 - OUTPUT 
  PORTC = 0x00; // Устанавливаем на нём низкий импенданс
}

void loop() {
  // put your main code here, to run repeatedly:
PORTC = PORTC + 0x01; //зажигаем диод
 delay(250);
PORTC = PORTC - 0x01; //гасим диод
 delay(250);
}

Усложним скетч, сделаем бегущий огонь, диоды подключаются к выводам А0, А1 и А2 ардуины:

void setup() {
  DDRC = 0b00000111; //записываем в регистр DDR что выводы PC0, РС1 и РС2 - OUTPUT 
}

void loop() {
 PORTC = 0x01;
 delay(250);
 PORTC = 0x02;
 delay(250);
 PORTC = 0x04;
 delay(250);
}

Хотя, для использования в Arduino это не удобно (проект Arduino создавался, чтоб избавить от неудобочитаемых значений), но иногда бывает полезно в случаях, если допустим катастрофически не хватает цифровых выходов / входов, а аналоговые не используются. Или если нужно выводов, поддерживающих прерывания более чем 2. И объём памяти, занимаемый скетчем уменьшается в разы, что видно из скрина, на котором те же бегущие огни реализованы средствами Arduino.  /sites/default/files/u20472/bezymyannyy.png Хотя при загрузке на сервер скрин был сжат, на нём всё же можно разглядеть что в первом случае скетч занимает 1 кБ ППЗУ, а во втором всего 640 байт. И это в такой простой программе, в случае, более сложных скетчей, можно сэкономить до 65% ППЗУ.

Если тебя интересуют функции библиотеки rfid конкретно, посмотри в примерах. Папка Example в этой библиотеке. Лично я осваивал их таким способом. А всякие там HEX, DEC означают в каждой функции своё. Поэтому, если твой вопрос был что означают ВООБЩЕ эти слова, я надеюсь, что ответил на него. А если в каком то ЧАСТНОМ случае, то вопрос твой не полный, и ответить на него сможет, ну разве только телепат.

З.Ы.

Уважаемый negavoid, я конечно понимаю, такие детские вопросы могут раздражать. Но так мы отобьём охоту у многих новичков заниматься Ардуино, да и программированием - электроникой вообще. Сам поставь себя на место того, кто хочет найти ответ на вопрос, а на форумах, да и вообще в интернетах, получает только насмешки...

 

negavoid
Offline
Зарегистрирован: 09.07.2016

Viktor1306 пишет:
Уважаемый negavoid, я конечно понимаю, такие детские вопросы могут раздражать. Но так мы отобьём охоту у многих новичков заниматься Ардуино, да и программированием - электроникой вообще. Сам поставь себя на место того, кто хочет найти ответ на вопрос, а на форумах, да и вообще в интернетах, получает только насмешки...

Во-первых, мы с вами на брудершафт пока ещё не пили. И во-вторых, вы немножечко заблуждаетесь. Я с удовольствием помогаю новичкам, отвечая на любые, самые детские вопросы - но с некоторым условием - если этот человек не поленится сперва самостоятельно что-то сделать, попытаться, немножко поискать, почитать, (а это всё обычно помогает) и уже если и после этого не получилось - приходит и задаёт вопрос. Вы же всё же ответили на вопрос ТС - потакая его лени и нежеланию затратить время на поиск ответов самостоятельно - следовательно, вы заплатили своим временем - оторвав его от себя, семьи, своих детей и внуков, хобби, ещё чего-нибудь. Из чего я делаю вывод, что этот человек (ТС) украл! это время у вас - если вы согласны раздаривать самый драгоценный ресурс в жизни халявщикам - ну что ж, добрый вы человек... (это констатация факта).

b707
Offline
Зарегистрирован: 26.05.2017

Viktor1306 пишет:

Уважаемый negavoid, я конечно понимаю, такие детские вопросы могут раздражать. Но так мы отобьём охоту у многих новичков заниматься Ардуино, да и программированием - электроникой вообще. Сам поставь себя на место того, кто хочет найти ответ на вопрос, а на форумах, да и вообще в интернетах, получает только насмешки...

Виктор1306, пожалуй поддержу. Какое-то совершенно неадекватное хамство, причем совершенно не остроумно. Почему-то кажется, что если спросить у negavoid что-нибудь по сути - окажется что его уровень недалеко ушел от ТС.

negavoid
Offline
Зарегистрирован: 09.07.2016

b707 пишет:
Виктор1306, пожалуй поддержу. Какое-то совершенно неадекватное хамство, причем совершенно не остроумно. Почему-то кажется, что если спросить у negavoid что-нибудь по сути - окажется что его уровень недалеко ушел от ТС.

Спросите - я, как пионер, к адекватным вопросам всегда готов :) https://www.google.com/search?q=site%3Aarduino.ru+negavoid

b707
Offline
Зарегистрирован: 26.05.2017

negavoid пишет:

Спросите - я, как пионер, к адекватным вопросам всегда готов :) https://www.google.com/search?q=site%3Aarduino.ru+negavoid

ну извиняйте  если так... хотя новичков временами жалко. IQ у всех разное, и кто сказал что недалекие программисты не должны получать удовольствия от процесса :)

negavoid
Offline
Зарегистрирован: 09.07.2016

Ну, вопрос просто был такой, видно ж, что человеку было лень сделать несколько движений мышью и прочесть пару статей хотя бы на этом же сайте - и его вопрос бы решился сам собой плюс человек бы разобрался - но нет же, он решил поотнимать время у форумчан, пусть лучше они почитают, разжуют, положат в рот готовый ответ, потратят на это своё время/деньги/.

Viktor1306
Viktor1306 аватар
Offline
Зарегистрирован: 19.05.2016

Да и не так уж много и времени он отнял у меня, всё равно сидим пьём пиво после удачной сдачи проекта в серию. Лично я Ардуино использую для прототипирования, ну а после отладки AVR или PIC. И только ассемблер. Потому что, за примером ходить далеко не надо, последнее что я делал для проекта было устройство чтения/записи карт MIFARE как раз на чипе RC522 и МК атмега 168. Так в Ардуину про-мини скетч чуть ли не ногами утрамбовывал. А после того, как переписал на асм ещё 46% пустого места осталось.

b707
Offline
Зарегистрирован: 26.05.2017

Viktor1306 пишет:

И только ассемблер.

У меня отношение к ассемблеру, если взять автомобильную аналогию - как к уазику. Если надо добраться в глухую деревню по бездорожью - уазик незаменим. Во всех прочих случаях какая-нить трешка БМВ или, ПростиГаспадя, ХундайСолярис довезет вас не в пример удобнее и сильно быстрее.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Viktor1306 пишет:

Сопоставленный десятичной системе тип - integer.
Чушь собачья!
Уж если беретесь что-то объяснять новичку, не следует снабжать его дезинформацией (как известно, чтобы дезинформация сыграла свою роль, т.е. ей поверили, она на 90-95% должна содержать верную информацию, т.е. совершенно как в Вашем посте).
Веутреннее представление integer - двоичное, а внешнее - по умолчанию не определено и при необходимости определяется программистом.
И, кстати, это касается всех целочисленных типов, а не только integer.
 
PS. По поводу ответа negavoid. Жестковато, конечно, но в целом я ним согласен: форум - совершенно не замяет учебный курс (и не должен).
Viktor1306
Viktor1306 аватар
Offline
Зарегистрирован: 19.05.2016

andriano пишет:

Viktor1306 пишет:

Сопоставленный десятичной системе тип - integer.
Чушь собачья!
Уж если беретесь что-то объяснять новичку, не следует снабжать его дезинформацией (как известно, чтобы дезинформация сыграла свою роль, т.е. ей поверили, она на 90-95% должна содержать верную информацию, т.е. совершенно как в Вашем посте).
Веутреннее представление integer - двоичное, а внешнее - по умолчанию не определено и при необходимости определяется программистом.
И, кстати, это касается всех целочисленных типов, а не только integer.
 
PS. По поводу ответа negavoid. Жестковато, конечно, но в целом я ним согласен: форум - совершенно не замяет учебный курс (и не должен).

Извиняюсь что не так объяснил. Внутреннее представление я вообще не брал в расчёт, потому что после придётся объяснять что это такое. А про тип integer я хотел сказать, то, что он не может иметь значение, допустим true или символьное.