Ви не увійшли.
Звуковой модуль с записью 810 слов и звуков, озвученных профессиональным диктором. Модуль специально разработан для голосового меню, поэтому не имеет недостатков, как в других звуковых модулях. Однопроводное управление, легко состыкуется с любым устройством, имеет режим отладки. Автоподстройка под скорость передачи управляющей команды. Возможность поочерёдного проигрывания до 15 слов (звуков) от одной команды - нормированные задержки между словами. Конкурирующие цены при заказе оптимизированных конфигураций. Набор слов может быть из таблицы, под заказ или свой. Подробнее на сайте
Неактивний
Для примера решил сделать говорящие часы. Не бог весть, что, но понять, как работать с этим модулем вполне можно. Для начала, из перечня семплов модуля, выбрал необходимые и для удобства создал свою таблицу звуков.
В таблице сделал перевод значений в десятичные значения.
/*
********** 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); }
Управляются часы двумя кнопками:
— запускает голосовое воспроизведение текущего времени (часы и минуты)
— устанавливает уровень громкости воспроизводимого сигнала (шесть значений)
Можно посмотреть, как это все работает:
Это просто пример !
Кому нужны такие часы могут сами добавить в программу функции коррекции времени и будильник …
Неактивний