Ардуино синхронизация дисплея с пьезопищалкой

bzend

✩✩✩✩✩✩✩
6 Фев 2025
1
0
Оформи код соответствующим тэгом, см. Правила
#define CLK 13
#define DIN 11
#define CS 10
#define BZR 8
#define X_SEGMENTS 4
#define Y_SEGMENTS 4
#define NUM_SEGMENTS (X_SEGMENTS * Y_SEGMENTS)
int tonePin = 8;
// буфер кадров для хранения состояния всей матрицы светодиодов
// отображается в растровом порядке, с (0, 0) в верхнем левом углу
byte fb[8 * NUM_SEGMENTS];
void shiftAll(byte send_to_address, byte send_this_data) {
digitalWrite(CS, LOW);
for (int i = 0; i < NUM_SEGMENTS; i++) {
shiftOut(DIN, CLK, MSBFIRST, send_to_address);
shiftOut(DIN, CLK, MSBFIRST, send_this_data);
}
digitalWrite(CS, HIGH);
}
void setup() {
Serial.begin(115200);
pinMode(CLK, OUTPUT);
pinMode(DIN, OUTPUT);
pinMode(CS, OUTPUT);
// Настройка каждого MAX7219
shiftAll(0x0f, 0x00); //отображение тестового регистра - режим тестирования выключен
shiftAll(0x0b, 0x07); //регистр ограничения сканирования - отображает цифры от 0 до 7
shiftAll(0x0c, 0x01); //регистр выключения - нормальная работа
shiftAll(0x0a, 0x0f); //регистр интенсивности - максимальная яркость
shiftAll(0x09, 0x00); //код регистра - узла режима декодирования
}
void midi() {
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 195, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 346.1535);
delay(384.615);
tone(tonePin, 220, 346.1535);
delay(384.615);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 146, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 146, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 783, 692.307);
delay(769.23);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 174, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 195, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 346.1535);
delay(384.615);
tone(tonePin, 220, 346.1535);
delay(384.615);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 146, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 146, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 195, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 346.1535);
delay(384.615);
tone(tonePin, 220, 346.1535);
delay(384.615);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 195, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 346.1535);
delay(384.615);
tone(tonePin, 220, 346.1535);
delay(384.615);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 261, 346.1535);
delay(384.615);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 220, 173.07675);
delay(192.3075);
tone(tonePin, 195, 346.1535);
delay(384.615);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 233, 86.538375);
delay(96.15375);
tone(tonePin, 293, 86.538375);
delay(96.15375);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 783, 692.307);
delay(769.23);
tone(tonePin, 523, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 391, 346.1535);
delay(384.615);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 587, 173.07675);
delay(192.3075);
tone(tonePin, 523, 346.1535);
delay(384.615);
tone(tonePin, 466, 346.1535);
delay(384.615);
tone(tonePin, 440, 346.1535);
delay(384.615);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 523, 346.1535);
delay(384.615);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 233, 86.538375);
delay(96.15375);
tone(tonePin, 293, 86.538375);
delay(96.15375);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 391, 346.1535);
delay(384.615);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 587, 173.07675);
delay(192.3075);
tone(tonePin, 523, 346.1535);
delay(384.615);
tone(tonePin, 466, 346.1535);
delay(384.615);
tone(tonePin, 440, 346.1535);
delay(384.615);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 523, 346.1535);
delay(384.615);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 233, 86.538375);
delay(96.15375);
tone(tonePin, 293, 86.538375);
delay(96.15375);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 391, 346.1535);
delay(384.615);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 587, 173.07675);
delay(192.3075);
tone(tonePin, 523, 346.1535);
delay(384.615);
tone(tonePin, 466, 346.1535);
delay(384.615);
tone(tonePin, 440, 346.1535);
delay(384.615);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 523, 346.1535);
delay(384.615);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 233, 86.538375);
delay(96.15375);
tone(tonePin, 293, 86.538375);
delay(96.15375);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 97, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 440, 173.07675);
delay(192.3075);
tone(tonePin, 466, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 233, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 293, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 261, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 349, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 391, 173.07675);
delay(192.3075);
tone(tonePin, 783, 1384.614);
delay(1538.46);
}
void loop() {
// создайте фигуру Лиссажу
// Фигуры Лиссажу — замкнутые траектории, прочерчиваемые точкой, совершающей одновременно два гармонических колебания в двух взаимно перпендикулярных направлениях.
static int16_t sx1 = 15 << 8, sx2 = sx1, sy1, sy2;
sx1 = sx1 - (sy1 >> 6);
sy1 = sy1 + (sx1 >> 6);
sx2 = sx2 - (sy2 >> 5);
sy2 = sy2 + (sx2 >> 5);
static byte travel = 0;
travel--;
byte *dst = fb;
byte output = 0;
int8_t x_offset = (sx1 >> 8) - X_SEGMENTS * 4;
int8_t y_offset = (sx2 >> 8) - Y_SEGMENTS * 4;
uint8_t screenx, screeny, xroot, yroot;
uint16_t xsumsquares, ysumsquares, xnextsquare, ynextsquare;
int8_t x, y;

// смещение начала координат в пространстве экрана
x = x_offset;
y = y_offset;
ysumsquares = x_offset * x + y_offset * y;
yroot = int(sqrtf(ysumsquares));
ynextsquare = yroot * yroot;
// Квадрант II (вверху слева)
screeny = Y_SEGMENTS * 8;
while (y < 0 && screeny) {
x = x_offset;
screenx = X_SEGMENTS * 8;
xsumsquares = ysumsquares;
xroot = yroot;
if (x < 0) {
xnextsquare = xroot * xroot;
while (x < 0 && screenx) {
screenx--;
output <<= 1;
output |= ((xroot + travel) & 8) >> 3;
if (!(screenx & 7))
*dst++ = output;
xsumsquares += 2 * x++ + 1;
if (xsumsquares < xnextsquare)
xnextsquare -= 2 * xroot-- - 1;
}
}
// Квадрант I (вверху справа)
if (screenx) {
xnextsquare = (xroot + 1) * (xroot + 1);
while (screenx) {
screenx--;
output <<= 1;
output |= ((xroot + travel) & 8) >> 3;
if (!(screenx & 7))
*dst++ = output;
xsumsquares += 2 * x++ + 1;
if (xsumsquares >= xnextsquare)
xnextsquare += 2 * ++xroot + 1;
}
}
ysumsquares += 2 * y++ + 1;
if (ysumsquares < ynextsquare)
ynextsquare -= 2 * yroot-- - 1;
screeny--;
}
// Квадрант III (снизу слева)
ynextsquare = (yroot + 1) * (yroot + 1);
while (screeny) {
x = x_offset;
screenx = X_SEGMENTS * 8;
xsumsquares = ysumsquares;
xroot = yroot;
if (x < 0) {
xnextsquare = xroot * xroot;
while (x < 0 && screenx) {
screenx--;
output <<= 1;
output |= ((xroot + travel) & 8) >> 3;
if (!(screenx & 7))
*dst++ = output;
xsumsquares += 2 * x++ + 1;
if (xsumsquares < xnextsquare)
xnextsquare -= 2 * xroot-- - 1;
}
}
// Квадрант IV (снизу справа)
if (screenx) {
xnextsquare = (xroot + 1) * (xroot + 1);
while (screenx--) {
output <<= 1;
output |= ((xroot + travel) & 8) >> 3;
if (!(screenx & 7))
*dst++ = output;
xsumsquares += 2 * x++ + 1;
if (xsumsquares >= xnextsquare)
xnextsquare += 2 * ++xroot + 1;
}
}
ysumsquares += 2 * y++ + 1;
if (ysumsquares >= ynextsquare)
ynextsquare += 2 * ++yroot + 1;
screeny--;
}
show();

// воспроизведение MIDI
midi();
}
void set_pixel(uint8_t x, uint8_t y, uint8_t mode) {
byte *addr = &fb[x / 8 + y * X_SEGMENTS];
byte mask = 128 >> (x % 8);
switch (mode) {
case 0: // четкий пиксель - минимальный элемент изображения, составляющий его цвет и положение на экране
*addr &= ~mask;
break;
case 1: // пиксель графика
*addr |= mask;
break;
case 2: // пиксель XOR - это результат применения операции XOR к отдельным пикселям изображения
*addr ^= mask;
break;
}
}

void safe_pixel(uint8_t x, uint8_t y, uint8_t mode) {
if ((x >= X_SEGMENTS * 8) || (y >= Y_SEGMENTS * 8))
return;
set_pixel(x, y, mode);
}

// выключить все светодиоды в буфере кадров
// Кадровый буфер (англ. framebuffer) — реальное или виртуальное электронное устройство или область памяти для кратковременного хранения одного или нескольких кадров в цифровом виде перед его отправкой на устройство видеовывода.
void clear() {
byte *addr = fb;
for (byte i = 0; i < 8 * NUM_SEGMENTS; i++)
*addr++ = 0;
}
// отправьте фреймбуфер растрового порядка в правильном порядке
// для бустрофедонной компоновки последовательного подключения MAX7219s
// Бустрофедон — способ письма, при котором направление письма чередуется в зависимости от чётности строки. То есть если первая строка пишется слева направо, то вторая — справа налево
void show() {
for (byte row = 0; row < 8; row++) {
digitalWrite(CS, LOW);
byte segment = NUM_SEGMENTS;
while (segment--) {
byte x = segment % X_SEGMENTS;
byte y = segment / X_SEGMENTS * 8;
byte addr = (row + y) * X_SEGMENTS;
if (segment & X_SEGMENTS) { // нечетные ряды сегмента
shiftOut(DIN, CLK, MSBFIRST, 8 - row);
shiftOut(DIN, CLK, LSBFIRST, fb[addr + x]);
} else { // четные ряды сегмента
shiftOut(DIN, CLK, MSBFIRST, 1 + row);
shiftOut(DIN, CLK, MSBFIRST, fb[addr - x + X_SEGMENTS - 1]);
}
}
digitalWrite(CS, HIGH);
}
}

полный ноль в этом, но мне нужно уже завтра защитить проект, нашла пример работы дисплея на просторах интернета и мелодию для пьезодинамика тоже
помогите синхронизировать звук с изображением((
 

Вложения