Arduino:Примеры/ShftOut12

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Один за одним[1]

Это скетч для платы Arduino и одного сдвигового регистра 74HC595. Он считывает данные, присланные пользователем по последовательному порту, передает их сдвиговому регистру, а тот передает их 8 светодиодам.

Код

 1 /*
 2 Один за одним
 3 
 4 Используется вместе со сдвиговым регистром 74HC595.
 5 
 6 Этот скетч считывает входящие последовательные данные и использует их, чтобы задать состояния на контактах сдвигового регистра 74HC595.
 7 
 8 Оборудование:
 9 
10 * Сдвиговый регистр 74HC595, подключенный к контактам 8, 12 и 11
11   на Arduino (более подробно – в самом скетче)
12 * Светодиоды, подключенные ко всем выходным контактам сдвигового 
13   регистра
14 
15 Создан 22 мая 2009 года Томом Иго.
16 Модифицирован 23 марта 2010 года им же.
17 
18 */
19 
20 // Контакт, подключенный к контакту-защелке (ST_CP) на 74HC595:
21 const int latchPin = 8;
22 // Контакт, подключенный к тактовому контакту (SH_CP) на 74HC595:
23 const int clockPin = 12;
24 // Контакт, подключенный к контакту для данных (DS) на 74HC595:
25 const int dataPin = 11;
26 
27 void setup() {
28   // выставляем эти контакты в режим OUTPUT, 
29   // поскольку они будут использоваться в блоке loop():
30   pinMode(latchPin, OUTPUT);
31   pinMode(dataPin, OUTPUT);  
32   pinMode(clockPin, OUTPUT);
33   Serial.begin(9600);
34   Serial.println("reset");
35 }
36 
37 void loop() {
38   if (Serial.available() > 0) {
39     // В таблице ASCII символы с «0» до «9» представлены числами 
40     // от «48» до «57». Поэтому, если пользователь печатает цифру 
41     // от «0» до «9» в формате ASCII, то нам, чтобы получить 
42     // нужное значение, нужно вычесть «48»:
43     int bitToSet = Serial.read() - 48;
44 
45   // передаем значение на сдвиговый регистр, выставляя нужному 
46   // контакту значение HIGH:
47     registerWrite(bitToSet, HIGH);
48   }
49 }
50 
51 // эта функция передает биты сдвиговому регистру:
52 void registerWrite(int whichPin, int whichState) {
53 // биты, которые вы хотите отправить:
54   byte bitsToSend = 0;
55 
56   // отключаем вывод данных, чтобы во время передачи битов 
57   // светодиоды не загорались:
58   digitalWrite(latchPin, LOW);
59 
60   // включаем самый старший бит в переменной bitsToSend:
61   bitWrite(bitsToSend, whichPin, whichState);
62 
63   // перемещаем биты:
64   shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);
65 
66     // включаем вывод данных, чтобы передать значения светодиодам:
67   digitalWrite(latchPin, HIGH);
68 
69 }

См.также

Внешние ссылки