mirror of
https://github.com/DashyFox/MusicRing.git
synced 2025-12-16 08:09:42 +00:00
add class
This commit is contained in:
104
MusicRing.ino
104
MusicRing.ino
@ -1,87 +1,27 @@
|
||||
#include <Arduino.h>
|
||||
//#include <avr/iom328.h>
|
||||
|
||||
#include "modules/LED_Ring.h"
|
||||
#include "implement/Display__Adafruit_SSD1306.h"
|
||||
#include "misc/bitmaps.h"
|
||||
|
||||
Display_Adafruit_SSD1306 screen(128, 32, Display::Ori_HORIZONTAL);
|
||||
LED_Ring_PINOUT pinout { 5, 6, 7, 8, 9 };
|
||||
|
||||
#define pin_Data 5 // yellow
|
||||
#define pin_CLK_inside 6 // orange
|
||||
#define pin_CLK_outside 7 // red
|
||||
|
||||
#define pin_RESET 8 // green
|
||||
#define pin_OutputEnable 9 // purple
|
||||
|
||||
#define LED_count 32
|
||||
|
||||
|
||||
void shift(uint16_t, bool = true);
|
||||
|
||||
volatile uint8_t position = 1; // позиция сдвига
|
||||
volatile uint16_t frec = 42; // частота MusicRing
|
||||
volatile uint16_t t_period_takts = F_CPU / 8 / LED_count / frec;
|
||||
LED_Ring ring(32, pinout);
|
||||
Display_Adafruit_SSD1306 screen(128, 32, Display::Ori_HORIZONTAL);
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(115200);
|
||||
|
||||
pinMode(pin_Data, OUTPUT);
|
||||
pinMode(pin_CLK_inside, OUTPUT);
|
||||
pinMode(pin_CLK_outside, OUTPUT);
|
||||
pinMode(pin_RESET, OUTPUT);
|
||||
pinMode(pin_OutputEnable, OUTPUT);
|
||||
|
||||
ring.begin();
|
||||
screen.begin();
|
||||
|
||||
|
||||
screen.adafruit->drawBitmap(0, 0, DashyFox_logo, 128, 32, WHITE);
|
||||
screen.adafruit->display();
|
||||
|
||||
digitalWrite(pin_RESET, HIGH);
|
||||
|
||||
reset();
|
||||
|
||||
|
||||
for (size_t j = 0; j < 1; j++) {
|
||||
for (size_t i = 1; i <= LED_count * 2; i++) {
|
||||
digitalWrite(pin_Data, i <= LED_count ? HIGH : LOW);
|
||||
shift(1);
|
||||
delay(11);
|
||||
}
|
||||
}
|
||||
|
||||
delay(100);
|
||||
|
||||
for (size_t i = 0; i < 3; i++) {
|
||||
uint8_t del = 42;
|
||||
digitalWrite(pin_Data, HIGH);
|
||||
shift(LED_count);
|
||||
delay(del * 1.5);
|
||||
reset();
|
||||
delay(del);
|
||||
}
|
||||
|
||||
// инициализация Timer1
|
||||
cli(); // отключить глобальные прерывания
|
||||
TCCR1A = 0; // установить регистры в 0
|
||||
TCCR1B = 0;
|
||||
|
||||
OCR1A = t_period_takts; // установка регистра совпадения
|
||||
TCCR1B |= (1 << WGM12); // включение в CTC режим
|
||||
|
||||
// Установка битов CS на коэффициент деления 8
|
||||
TCCR1B |= 0b00000010;
|
||||
|
||||
TIMSK1 |= (1 << OCIE1A); // включение прерываний по совпадению
|
||||
sei(); // включить глобальные прерывания
|
||||
}
|
||||
|
||||
ISR(TIMER1_COMPA_vect) {
|
||||
if (position >= LED_count) {
|
||||
point_ini(1);
|
||||
position = 1;
|
||||
} else shift(1);
|
||||
}
|
||||
ISR(TIMER1_COMPA_vect) { ring.isr(); }
|
||||
|
||||
void loop() {
|
||||
|
||||
@ -96,34 +36,4 @@ void loop() {
|
||||
f = !f;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void point_ini(uint8_t width) {
|
||||
|
||||
reset();
|
||||
|
||||
digitalWrite(pin_Data, HIGH);
|
||||
shift(width);
|
||||
digitalWrite(pin_Data, LOW);
|
||||
|
||||
}
|
||||
|
||||
void shift(uint16_t count, bool isVisible = true) {
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
|
||||
digitalWrite(pin_CLK_inside, HIGH);
|
||||
if (isVisible) digitalWrite(pin_CLK_outside, HIGH);
|
||||
|
||||
digitalWrite(pin_CLK_inside, LOW);
|
||||
digitalWrite(pin_CLK_outside, LOW);
|
||||
|
||||
position++;
|
||||
}
|
||||
};
|
||||
|
||||
void reset() {
|
||||
digitalWrite(pin_RESET, LOW);
|
||||
digitalWrite(pin_RESET, HIGH);
|
||||
digitalWrite(pin_CLK_outside, HIGH);
|
||||
digitalWrite(pin_CLK_outside, LOW);
|
||||
}
|
||||
Reference in New Issue
Block a user