Multi-function Shield XD-203 с кнопками, зуммером, потенциометром и индикатром представляет многофункциональную плату расширения, выполненную в виде шилда для установки на Arduino Uno, Mega и подобные им по размерам платы.
Примеры
1. Мигание одного светодиода
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* XD-203 Пример 1 */ int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } |
2. Мигание всех светодиодов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* XD-203 Пример 2 */ int led1 = 13; int led2 = 12; int led3 = 11; int led4 = 10; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); } void loop() { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(1000); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(1000); } |
3. Кнопки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* XD-203 Пример 3 */ const byte LED[] = {13,12,11,10}; #define BUTTON1 A1 #define BUTTON2 A2 void setup() { pinMode(LED[0], OUTPUT); pinMode(LED[1], OUTPUT); pinMode(LED[2], OUTPUT); pinMode(LED[3], OUTPUT); } void loop() { if(!digitalRead(BUTTON1)) { digitalWrite(LED[0], HIGH); digitalWrite(LED[1], HIGH); digitalWrite(LED[2], HIGH); digitalWrite(LED[3], HIGH); } if(!digitalRead(BUTTON2)) { digitalWrite(LED[0], LOW); digitalWrite(LED[1], LOW); digitalWrite(LED[2], LOW); digitalWrite(LED[3], LOW); } } |
4. Подстроечный резистор
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* XD-203 Пример 4 */ #define Pot1 0 void setup() { Serial.begin(9600); } void loop() { Serial.print("Potentiometer reading: "); Serial.println(analogRead(Pot1)); /* Ждем 0.5 с до повторного считывания */ delay(500); } |
5. Подстроечный резистор и светодиоды
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/* XD-203 Пример 5 */ const byte LED[] = {13,12,11,10}; #define Pot1 0 void setup() { Serial.begin(9600); pinMode(LED[0], OUTPUT); pinMode(LED[1], OUTPUT); pinMode(LED[2], OUTPUT); pinMode(LED[3], OUTPUT); } void loop() { int PotValue; PotValue = analogRead(Pot1); /* Ждем 0.5 с до повторного считывания */ // если значение меньше 400, светодиоды выкл if(PotValue < 400) { digitalWrite(LED[0], LOW); digitalWrite(LED[1], LOW); digitalWrite(LED[2], LOW); digitalWrite(LED[3], LOW); Serial.print("Potentiometer: "); Serial.println(PotValue); } // иначе вкл else { digitalWrite(LED[0], HIGH); digitalWrite(LED[1], HIGH); digitalWrite(LED[2], HIGH); digitalWrite(LED[3], HIGH); Serial.print("Potentiometer: "); Serial.println(PotValue); } delay(500); } |
6. Индикатор
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* XD-203 Пример 6 */ /* Регистры для индикатора */ #define LATCH_DIO 4 #define CLK_DIO 7 #define DATA_DIO 8 /* для чисел от 0 до 9 */ const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; /* для выбора разряда от 1 до 4 */ const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8}; void setup () { /* DIO пины на вывод */ pinMode(LATCH_DIO,OUTPUT); pinMode(CLK_DIO,OUTPUT); pinMode(DATA_DIO,OUTPUT); } void loop() { /* Обновляем индикатор с актуальными значениями */ WriteNumberToSegment(0 , 1); WriteNumberToSegment(1 , 4); WriteNumberToSegment(2 , 8); WriteNumberToSegment(3 , 8); } /* Функция: целое число (0…9) для каждого разряда (1–4) */ void WriteNumberToSegment(byte Segment, byte Value) { digitalWrite(LATCH_DIO,LOW); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] ); digitalWrite(LATCH_DIO,HIGH); } |
7. Значение потенциометра (АЦП) на индикаторе
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/* XD-203 Пример 7 */ /* Регистры для индикатора */ #define LATCH_DIO 4 #define CLK_DIO 7 #define DATA_DIO 8 // потенциометр А0 #define Pot1 0 /* для чисел от 0 до 9 */ const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; /* для выбора разряда от 1 до 4 */ const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8}; void setup () { pinMode(LATCH_DIO,OUTPUT); pinMode(CLK_DIO,OUTPUT); pinMode(DATA_DIO,OUTPUT); } void loop() { int PotValue; PotValue = analogRead(Pot1); /* Обновляем индикатор с актуальными значениями */ WriteNumberToSegment(0 , PotValue / 1000); WriteNumberToSegment(1 , (PotValue / 100) % 10); WriteNumberToSegment(2 , (PotValue / 10) % 10); WriteNumberToSegment(3 , PotValue % 10); } /* Функция: целое число (0…9) для каждого разряда (1–4) */ void WriteNumberToSegment(byte Segment, byte Value) { digitalWrite(LATCH_DIO,LOW); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] ); digitalWrite(LATCH_DIO,HIGH); } |