Arduino:Примеры/ShftOut12
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</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 }
См.также
Внешние ссылки