Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/ShftOut12

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Один за одним[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. }

См.также

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

  1. www.arduino.cc - ShftOut12