#ifndef shield_h_ #define shield_h_ #include "Arduino.h" #define ON 1 #define OFF 0 #define BUTTON_1_PIN A1 #define BUTTON_2_PIN A2 #define BUTTON_3_PIN A3 #define BEEPER_PIN 3 #define LED_1_PIN 13 #define LED_2_PIN 12 #define LED_3_PIN 11 #define LED_4_PIN 10 #define LED_1 1 #define LED_2 2 #define LED_3 4 #define LED_4 8 #define LED_ALL 15 #define LATCH_DIO 4 // Линия синхронизации данных #define CLK_DIO 7 // Линия тактирования #define DATA_DIO 8 // Линия передачи данных #define BUTTON_PRESSED_IND (0 << 6) #define BUTTON_SHORT_RELEASE_IND (1 << 6) #define BUTTON_LONG_PRESSED_IND (2 << 6) #define BUTTON_LONG_RELEASE_IND (3 << 6) #define BUTTON_1_PRESSED (1 | BUTTON_PRESSED_IND) #define BUTTON_1_SHORT_RELEASE (1 | BUTTON_SHORT_RELEASE_IND) #define BUTTON_1_LONG_PRESSED (1 | BUTTON_LONG_PRESSED_IND) #define BUTTON_1_LONG_RELEASE (1 | BUTTON_LONG_RELEASE_IND) #define BUTTON_2_PRESSED (2 | BUTTON_PRESSED_IND) #define BUTTON_2_SHORT_RELEASE (2 | BUTTON_SHORT_RELEASE_IND) #define BUTTON_2_LONG_PRESSED (2 | BUTTON_LONG_PRESSED_IND) #define BUTTON_2_LONG_RELEASE (2 | BUTTON_LONG_RELEASE_IND) #define BUTTON_3_PRESSED (3 | BUTTON_PRESSED_IND) #define BUTTON_3_SHORT_RELEASE (3 | BUTTON_SHORT_RELEASE_IND) #define BUTTON_3_LONG_PRESSED (3 | BUTTON_LONG_PRESSED_IND) #define BUTTON_3_LONG_RELEASE (3 | BUTTON_LONG_RELEASE_IND) const byte LED[] = {LED_1_PIN, LED_2_PIN, LED_3_PIN, LED_4_PIN}; const byte SEGMENT_DIGITS[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; const byte SEGMENT_ALPHA[] = {136, 131, 167, 161, 134, 142, 144, 139 ,207, 241, 182, 199, 182, 171, 163, 140, 152, 175, 146, 135, 227, 182, 182, 182, 145, 182}; const byte SEGMENT_NUM[] = {0xF1,0xF2,0xF4,0xF8}; void initShield() { pinMode(LED[0], OUTPUT); pinMode(LED[1], OUTPUT); pinMode(LED[2], OUTPUT); pinMode(LED[3], OUTPUT); digitalWrite(LED[0], HIGH); digitalWrite(LED[1], HIGH); digitalWrite(LED[2], HIGH); digitalWrite(LED[3], HIGH); pinMode(LATCH_DIO,OUTPUT); // Устанавливаем вывод как выход pinMode(CLK_DIO,OUTPUT); // Устанавливаем вывод как выход pinMode(DATA_DIO,OUTPUT); // Устанавливаем вывод как выход pinMode(BEEPER_PIN, OUTPUT); digitalWrite(BEEPER_PIN, HIGH); pinMode(BUTTON_1_PIN, INPUT); pinMode(BUTTON_2_PIN, INPUT); pinMode(BUTTON_3_PIN, INPUT); } byte getButton() { int val; val = digitalRead(BUTTON_1_PIN); if (val == LOW) return 1; val = digitalRead(BUTTON_2_PIN); if (val == LOW) return 2; val = digitalRead(BUTTON_3_PIN); if (val == LOW) return 3; return 0; } void beep(unsigned int on_period = 50, unsigned int off_period = 0, byte cycles = 0, unsigned int loop_cycles = 0, unsigned int loop_delay_period = 0 ) { cycles = cycles == 0 ? 1 : cycles; loop_cycles = loop_cycles == 0 ? 1 : loop_cycles; if (on_period == 0) { digitalWrite(BEEPER_PIN, OFF); return; } for (int i = 0; i < cycles; ++i) { for (int j = 0; j < loop_cycles; ++j) { digitalWrite(BEEPER_PIN, LOW); delay(on_period); digitalWrite(BEEPER_PIN, HIGH); delay(off_period); } delay(loop_delay_period); } // digitalWrite(BEEPER_PIN, LOW); // delay(on_period); // digitalWrite(BEEPER_PIN, HIGH); // delay(off_period); } void blinkLeds(byte led, int millsec, bool turnoff_delay) { digitalWrite(led, LOW); delay(millsec); digitalWrite(led, HIGH); if (turnoff_delay) delay(millsec); } void blinkLeds(byte led1, byte led2, int millsec, bool turnoff_delay) { digitalWrite(led1, LOW); digitalWrite(led2, LOW); delay(millsec); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); if (turnoff_delay) { delay(millsec); } } void blinkLeds(byte led1, byte led2, byte led3, int millsec, bool turnoff_delay) { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); delay(millsec); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); if (turnoff_delay) { delay(millsec); } } void blinkLeds(int millsec, bool turnoff_delay) { for (int i = 10; i < 14; ++i) { digitalWrite(i, LOW); } delay(millsec); for (int i = 10; i < 14; ++i) { digitalWrite(i, HIGH); } if (turnoff_delay) delay(millsec); } void writeNumber(byte seg, byte val) { digitalWrite(LATCH_DIO, LOW); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_DIGITS[val]); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_NUM[seg]); digitalWrite(LATCH_DIO, HIGH); } void writeAlpha(byte seg, byte val) { digitalWrite(LATCH_DIO, LOW); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_ALPHA[val]); shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_NUM[seg]); digitalWrite(LATCH_DIO, HIGH); } void writeDisplay(int val) { writeNumber(0, (val / 1000) % 10); writeNumber(1, (val / 100) % 10); writeNumber(2, (val / 10) % 10); writeNumber(3, val % 10); writeNumber(4, 0); } byte AsciiToSegmentValue (byte ascii) { byte segmentValue = 182; } #endif