Ви не увійшли.
Для примера решил сделать говорящие часы. Не бог весть, что, но понять, как работать с этим модулем вполне можно. Для начала, из перечня семплов модуля, выбрал необходимые и для удобства создал свою таблицу звуков.
В таблице сделал перевод значений в десятичные значения.
/*
********** Pin - D - **********
Arduino 00 – ATmega pin 02/0 – RXD **
Arduino 01 – ATmega pin 03/1 – TXD ** выход на кибервойс
Arduino 02 – ATmega pin 04/2 –
Arduino 03 – ATmega pin 05/3 –
Arduino 04 – ATmega pin 06/4 –
Arduino 05 – ATmega pin 11/5 –
Arduino 06 – ATmega pin 12/6 –
Arduino 07 – ATmega pin 13/7 –
********** Pin - B - **********
Arduino 08 – ATmega pin 14/0 – кнопка включения звука
Arduino 09 – ATmega pin 15/1 – кнопка регулировки громкости
Arduino 10 – ATmega pin 16/2 – CS **
Arduino 11 – ATmega pin 17/3 – MOSI **
Arduino 12 – ATmega pin 18/4 – MISO **
Arduino 13 – ATmega pin 19/5 – CLK **
Arduino RC – ATmega pin 09/6 – ( ZQ )
Arduino RC – ATmega pin 10/7 – ( ZQ )
********** Pin - C - **********
Arduino 14_A0 – ATmega pin 23/0 –
Arduino 15_A1 – ATmega pin 24/1 –
Arduino 16_A2 – ATmega pin 25/2 –
Arduino 17_A3 – ATmega pin 26/3 –
Arduino 18_A4 – ATmega pin 27/4 – LCD-RTC: SDA
Arduino 19_A5 – ATmega pin 28/5 – LCD-RTC: SCL
****************************************************
*/
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
RTC_DS1307 rtc;
char daysOfTheWeek[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
LiquidCrystal_I2C lcd(0x27,16,2);
String String00 = "";
String String01 = "";
byte Sec, Min, Hrs, Day, Mnt;
int Yer;
byte vS0, vM0, vH0, vS1, vM1, vH1, Hv, Mv;
boolean voise = true;
boolean volume = true;
byte db, vlm;
void setup() {
// DDRD = B11111000; // назначает выводы со 0 по 2 входными с 3 по 7 выходными
// PORTD = B00000000; // устанавливает LOW на цифровых выводах с 0 по 7
DDRB = B000000; // назначает вывод с 8 по 13 входными
PORTB = B111111; // устанавливает HIGH на выводах с 8 по 13
// DDRC = B000000; // назначает выводы с 14 по 19 входными
// PORTC = B011111; // устанавливает HIGH на выводах с 14 по 19 (на 19 LOW)
Serial.begin(9600);
rtc.begin();
lcd.init(); lcd.backlight();
lcd.clear();
}
void loop() {
DateTime now = rtc.now();
Yer = now.year();
Mnt = now.month();
Day = now.day();
Hrs = now.hour();
Min = now.minute();
Sec = now.second();
String00 = "";
String00 += (" ");
if (InRange(Hrs)) {String00 += ("0");} String00 += (Hrs); String00 += (":");
if (InRange(Min)) {String00 += ("0");} String00 += (Min); String00 += (":");
if (InRange(Sec)) {String00 += ("0");} String00 += (Sec);
String01 = "";
if (InRange(Day)) {String01 += ("0");} String01 += (Day); String01 += (".");
if (InRange(Mnt)) {String01 += ("0");} String01 += (Mnt); String01 += (".");
String01 += (Yer); String01 += (" "); String01 += (daysOfTheWeek[now.dayOfTheWeek()]);
LCDinf ();
// если на Arduino 08 – ATmega pin 14/0 лог 0
if (((PINB&(1<<0)) == 0) && (voise == true)) { voise = false; delay(500); Voise (); }
if (((PINB&(1<<0)) != 0) && (voise == false)) { voise = true; }
// если на Arduino 09 – ATmega pin 15/1 лог 0
if (((PINB&(1<<1)) == 0) && (volume == true)) { volume = false; delay(500); Volume (); }
if (((PINB&(1<<1)) != 0) && (volume == false)) { volume = true; }
}
void Volume () {
if (db > 15) { db = 0; }
if (db == 0) { vlm = 143; }
if (db == 3) { vlm = 142; }
if (db == 6) { vlm = 141; }
if (db == 9) { vlm = 140; }
if (db == 12) { vlm = 137; }
if (db == 15) { vlm = 136; }
delay(50);
// ***** синхро байт
Serial.write(85); // 55
delay (5);
// ***** команда изменения громкости
Serial.write(vlm); delay (5);
// ***** команда на завершение передачи
Serial.write(0);
delay (10); // Stop
lcd.clear();
String00 = "";
String00 += (" volume -");
if (InRange(db)) {String00 += ("0");} String00 += (db); String00 += (" db");
String01 = ""; LCDinf (); delay (1500); lcd.clear();
db = db + 3;
}
void Voise () {
// ********** число часов **********
Hv = 116;
vH0 = Hrs; vS0 = 255; vH1 = 0;
if (Hrs > 20) { vH0 = 20; vS0 = 0; vH1 = (Hrs - 20); }
// ********** "ЧАСОВ" **********
if (Hrs == 21) { Hv = 114; }
if (Hrs == 23 || Hrs == 22 || (Hrs >= 2 && Hrs <= 4)) { Hv = 115; }
// ********** число минут **********
Mv = 119;
vM0 = Min; vS1 = 255; vM1 = 0;
if (Min == 1) { vM0 = 37; }
if (Min == 2) { vM0 = 39; }
if (Min == 30) { vM0 = 21; }
if (Min == 40) { vM0 = 22; }
if (Min == 50) { vM0 = 23; }
if (Min > 20 && Min < 30) { vM0 = 20; vS1 = 0; vM1 = (Min - 20);
if (vM1 == 1) { vM1 = 37; Mv = 118; }
if (vM1 == 2) { vM1 = 39; Mv = 118; } }
if (Min > 30 && Min < 40) { vM0 = 21; vS1 = 0; vM1 = (Min - 30);
if (vM1 == 1) { vM1 = 37; Mv = 117; }
if (vM1 == 2) { vM1 = 39; Mv = 118;} }
if (Min > 40 && Min < 50) { vM0 = 22; vS1 = 0; vM1 = (Min - 40);
if (vM1 == 1) { vM1 = 37; Mv = 117; }
if (vM1 == 2) { vM1 = 39; Mv = 118; } }
if (Min > 50) { vM0 = 23; vS1 = 0; vM1 = (Min - 50);
if (vM1 == 1) { vM1 = 37; Mv = 117; }
if (vM1 == 2) { vM1 = 39; Mv = 118; } }
// ********** "МИНУТ" **********
if ((Min == 1)) { Mv = 117; }
if ((Min >= 2 && Min <= 4) || (vM1 == 3) || (vM1 == 4)) { Mv = 118; }
// **************************************************
// **************************************************
// время vH0 vH1 часов vM0 vM1 минут = 7 семплов
// ***** синхро байт
Serial.write(85); // 55
delay (5);
// ***** количество семплов для воспроизведения
Serial.write(7); // 07
delay (5); // Tbyte
// "время"
Serial.write(1); delay (5);
Serial.write(9); delay (5);
// * часы *
Serial.write(0); delay (5);
Serial.write(vH0); delay (5);
// * часы после 20 *
Serial.write(vS0); delay (5);
Serial.write(vH1); delay (5);
// "часов"
Serial.write(0); delay (5);
Serial.write(Hv); delay (5);
// * минуты *
Serial.write(0); delay (5);
Serial.write(vM0); delay (5);
// * минуты после 20 *
Serial.write(vS1); delay (5);
Serial.write(vM1); delay (5);
// "минут"
Serial.write(0); delay (5);
Serial.write(Mv); delay (5);
// ***** команда на завершение передачи
Serial.write(0);
delay (10); // Stop
voise = false;
}
void LCDinf () {
lcd.setCursor(0,0); lcd.print(String00);
lcd.setCursor(0,1); lcd.print(String01);
String00 = ""; String01 = ""; }
bool InRange(int value) { return (value >= 0) && (value < 10); }
Управляются часы двумя кнопками:
— запускает голосовое воспроизведение текущего времени (часы и минуты)
— устанавливает уровень громкости воспроизводимого сигнала (шесть значений)
Можно посмотреть, как это все работает:
Это просто пример !
Кому нужны такие часы могут сами добавить в программу функции коррекции времени и будильник …
Звуковой модуль с записью 810 слов и звуков, озвученных профессиональным диктором. Модуль специально разработан для голосового меню, поэтому не имеет недостатков, как в других звуковых модулях. Однопроводное управление, легко состыкуется с любым устройством, имеет режим отладки. Автоподстройка под скорость передачи управляющей команды. Возможность поочерёдного проигрывания до 15 слов (звуков) от одной команды - нормированные задержки между словами. Конкурирующие цены при заказе оптимизированных конфигураций. Набор слов может быть из таблицы, под заказ или свой. Подробнее на сайте