Arduino:Примеры/ShftOut23
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Использование двух массивов[1]
Это скетч для платы Arduino и двух сдвиговых регистров 74HC595. Он использует данные из массивов, чтобы с их помощью задать паттерн мигания светодиодов.
Код
//**************************************************************//
// Название : Использование двух массивов //
// Авторы : Кэрлин Мо, Том Иго //
// Дата : 25 октября 2006 года //
// Версия : 1.0 //
// Примечания : Код для использования с двумя о сдвиговым //
// : сдвиговыми регистрами 74РС595 //
//**************************************************************//
// Контакт, подключенный к контакту ST_CP на 74HC595:
int latchPin = 8;
// Контакт, подключенный к контакту SH_CP на 74HC595:
int clockPin = 12;
// Контакт, подключенный к контакту DS на 74HC595:
int dataPin = 11;
// переменные и массивы для хранения информации, которая будет
// передана функции, отвечающей за перемещение битов:
byte dataRED;
byte dataGREEN;
byte dataArrayRED[10];
byte dataArrayGREEN[10];
void setup() {
// выставляем latchPin в режим OUTPUT,
// поскольку он будет использоваться в блоке loop():
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
// Arduino не умеет записывать данные двоичного формата прямо в код,
// поэтому они представлены здесь в шестнадцатеричном виде
// (но подойдет и десятичный формат):
dataArrayRED[0] = 0xFF; //11111111
dataArrayRED[1] = 0xFE; //11111110
dataArrayRED[2] = 0xFC; //11111100
dataArrayRED[3] = 0xF8; //11111000
dataArrayRED[4] = 0xF0; //11110000
dataArrayRED[5] = 0xE0; //11100000
dataArrayRED[6] = 0xC0; //11000000
dataArrayRED[7] = 0x80; //10000000
dataArrayRED[8] = 0x00; //00000000
dataArrayRED[9] = 0xE0; //11100000
// Arduino не умеет записывать данные двоичного формата прямо в код,
// поэтому они представлены здесь в шестнадцатеричном виде
// (но подойдет и десятичный формат):
dataArrayGREEN[0] = 0xFF; //11111111
dataArrayGREEN[1] = 0x7F; //01111111
dataArrayGREEN[2] = 0x3F; //00111111
dataArrayGREEN[3] = 0x1F; //00011111
dataArrayGREEN[4] = 0x0F; //00001111
dataArrayGREEN[5] = 0x07; //00000111
dataArrayGREEN[6] = 0x03; //00000011
dataArrayGREEN[7] = 0x01; //00000001
dataArrayGREEN[8] = 0x00; //00000000
dataArrayGREEN[9] = 0x07; //00000111
// функция, мигающая всеми светодиодами;
// параметры – количество миганий и пауза между ними:
blinkAll_2Bytes(2,500);
}
void loop() {
for (int j = 0; j < 10; j++) {
// загружаем из массива паттерн мигания:
dataRED = dataArrayRED[j];
dataGREEN = dataArrayGREEN[j];
// задаем контакту latchPin значение LOW и оставляем так,
// пока все данные не будут переданы:
digitalWrite(latchPin, 0);
// перемещаем данные:
shiftOut(dataPin, clockPin, dataGREEN);
shiftOut(dataPin, clockPin, dataRED);
// возвращаем latchPin значение HIGH, сообщая чипу,
// что ему больше не нужно прослушивать входящую информацию:
digitalWrite(latchPin, 1);
delay(300);
}
}
// сердце» программы;
// эта функция передает 8 бит данных (первым идет самый старший бит);
// передача осуществляется на возрастающем фронте тактового сигнала:
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// аналог блока setup(), но внутри функции:
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
// стираем все, чтобы подготовить
// сдвиговый регистр к передаче битов:
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
// выполняется для каждого бита в байте myDataOut;
// обратите внимание, что в цикле for() ниже
// СЧЕТ ИДЕТ В ОБРАТНОМ НАПРАВЛЕНИИ, и это значит, что значение
// «%00000001» или «1» будет соответствовать контакту Q0:
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
// если значение было передано переменной myDataOut и проверка
// битовой маской прошла успешно... то есть если i=6
// и наше значение это «%11010100», код сравнит его с «%01000000»,
// а затем запишет в pinState значение «1»:
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
// задаем этому контакту HIGH или LOW в зависимости от pinState:
digitalWrite(myDataPin, pinState);
// если тактовый контакт получает значение HIGH,
// сдвиговый регистр перемещает биты:
digitalWrite(myClockPin, 1);
// после перемещения битов задаем контакту для данных
// значение «0», чтобы избежать «просачивания» данных:
digitalWrite(myDataPin, 0);
}
// останавливаем перемещение битов:
digitalWrite(myClockPin, 0);
}
// эта функция мигает всеми светодиодами, подключенными к регистру;
// переменная «n» – это то, сколько раз нужно мигнуть, а «d» – сколько
// должна длиться пауза между миганиями; запускается с момента,
// когда светодиоды не горят – чтобы визуальный эффект
// от первого мигания был полным:
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
Категории:
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino