Не могу разобраться с многокнопочной рацией
- Войдите на сайт для отправки комментариев
Чт, 21/01/2021 - 08:15
помогите с кодом!
Иммется рация, хочу его руссифицировать произношение каналов и приветствия,
переключатель на 16 каналов
при постановке на первый канал напряжение подается 3,5 В в следующей последовательности:
на 1 канале
0 1 1 0
на 2м канале
0 0 1 0
3 канал
1 0 0 1
и т.д. ...
Звуковые файлы: 1.wav, 2.wav и т.д.
написал код но я слабоват в программировании:
#include <SD.h> // необходимо включить SD библиотеку
#include <TMRpcm.h> // также необходимо включить данную библиотеку...
#include <SPI.h>
#define chipSelect 4
File root;
TMRpcm music;
int Pin = 5;
int Pin1 = 6;
int Pin2 = 7;
int Pin3 = 8;
void setup() {
// music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д.
// music.volume(7); // от 0 до 7. Установка уровня громкости
// music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима
music.play("s.wav");
Serial.begin(9600);
Serial.println("Initializing SD card...");
if (!SD.begin(chipSelect))
{
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д.
music.setVolume(7); // от 2 до 7. Установка уровня громкости
music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима
}
void loop() {
int volts = digitalRead(Pin);
Serial.println(volts);
int volts1 = digitalRead(Pin1);
Serial.println(volts1);
int volts2 = digitalRead(Pin2);
Serial.println(volts2);
int volts3 = digitalRead(Pin3);
Serial.println(volts3);
delay(1000);
{
{
int k1 = (volts == 0 && volts1 > 0 && volts2 > 0 && volts3 == 0);
if (k1) {music.play("1.wav");
}}
int k2 = (volts == 0 && volts1 == 0 && volts2 > 0 && volts3 == 0);
while (k2) {music.play("2.wav"); break;}
int k3 = (volts > 0 && volts1 == 0 && volts2 == 0 && volts3 > 0);
while (k3) {music.play("3.wav"); break;}
int k4 = (volts == 0 && volts1 > 0 && volts2 == 0 && volts3 > 0);
int k5 = (volts > 0 && volts1 > 0 && volts2 == 0 && volts3 == 0);
int k6 = (volts > 0 && volts1 == 0 && volts2 == 0 && volts3 == 0);
int k7 = (volts == 0 && volts1 == 0 && volts2 > 0 && volts3 > 0);
int k8 = (volts == 0 && volts1 > 0 && volts2 > 0 && volts3 > 0);
int k9 = (volts > 0 && volts1 > 0 && volts2 > 0 && volts3 > 0);
int k10 =(volts > 0 && volts1 > 0 && volts2 > 0 && volts3 == 0);
int k11 =(volts == 0 && volts1 == 0 && volts2 == 0 && volts3 == 0);
int k12 =(volts == 0 && volts1 == 0 && volts2 == 0 && volts3 > 0);
int k13 =(volts > 0 && volts1 > 0 && volts2 == 0 && volts3 > 0);
int k14 =(volts == 0 && volts1 > 0 && volts2 == 0 && volts3 == 0);
int k15 =(volts > 0 && volts1 == 0 && volts2 > 0 && volts3 == 0);
int k16 =(volts > 0 && volts1 == 0 && volts2 > 0 && volts3 > 0);
delay(1000);
}
}
сейчас он говорит и повторяет канал, а нужно чтоб один раз сказал и все, и еще нужно чтоб он в то время когда говорил любой канал подавал напряжение на какую нибудь ножку для унч
чисто спортивный интерес, имеется ардуйно нано и сд
А правила форума почитать не судьба?
я тут новенький так что прошу сильно не пинать, только заметил ...
Ну, а если
заметил
так почему не перевыложил?
помогите с кодом!
Иммется рация, хочу его руссифицировать произношение каналов и приветствия,
переключатель на 16 каналов
при постановке на первый канал напряжение подается 3,5 В в следующей последовательности:
на 1 канале
0 1 1 0
на 2м канале
0 0 1 0
3 канал
1 0 0 1
и т.д. ...
Звуковые файлы: 1.wav, 2.wav и т.д.
написал код но я слабоват в программировании:
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> #define chipSelect 4 File root; TMRpcm music; int Pin = 5; int Pin1 = 6; int Pin2 = 7; int Pin3 = 8; void setup() { // music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. // music.volume(7); // от 0 до 7. Установка уровня громкости // music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима music.play("s.wav"); Serial.begin(9600); Serial.println("Initializing SD card..."); if (!SD.begin(chipSelect)) { Serial.println("initialization failed!"); while (1); } Serial.println("initialization done."); music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(7); // от 2 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима } void loop() { int volts = digitalRead(Pin); Serial.println(volts); int volts1 = digitalRead(Pin1); Serial.println(volts1); int volts2 = digitalRead(Pin2); Serial.println(volts2); int volts3 = digitalRead(Pin3); Serial.println(volts3); delay(1000); { { int k1 = (volts == 0 && volts1 > 0 && volts2 > 0 && volts3 == 0); if (k1) {music.play("1.wav"); }} int k2 = (volts == 0 && volts1 == 0 && volts2 > 0 && volts3 == 0); while (k2) {music.play("2.wav"); break;} int k3 = (volts > 0 && volts1 == 0 && volts2 == 0 && volts3 > 0); while (k3) {music.play("3.wav"); break;} int k4 = (volts == 0 && volts1 > 0 && volts2 == 0 && volts3 > 0); int k5 = (volts > 0 && volts1 > 0 && volts2 == 0 && volts3 == 0); int k6 = (volts > 0 && volts1 == 0 && volts2 == 0 && volts3 == 0); int k7 = (volts == 0 && volts1 == 0 && volts2 > 0 && volts3 > 0); int k8 = (volts == 0 && volts1 > 0 && volts2 > 0 && volts3 > 0); int k9 = (volts > 0 && volts1 > 0 && volts2 > 0 && volts3 > 0); int k10 =(volts > 0 && volts1 > 0 && volts2 > 0 && volts3 == 0); int k11 =(volts == 0 && volts1 == 0 && volts2 == 0 && volts3 == 0); int k12 =(volts == 0 && volts1 == 0 && volts2 == 0 && volts3 > 0); int k13 =(volts > 0 && volts1 > 0 && volts2 == 0 && volts3 > 0); int k14 =(volts == 0 && volts1 > 0 && volts2 == 0 && volts3 == 0); int k15 =(volts > 0 && volts1 == 0 && volts2 > 0 && volts3 == 0); int k16 =(volts > 0 && volts1 == 0 && volts2 > 0 && volts3 > 0); delay(1000); } }#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> #define chipSelect 4 File root; TMRpcm music; const uint8_t inPins[]={8,7,6,5}; const uint8_t outPin=10; // на этой ножке появляется единичка при запуске файла на проигрывание void setup() { music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.volume(7); // от 0 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима music.play("s.wav"); Serial.begin(9600); Serial.println("Initializing SD card..."); if (!SD.begin(chipSelect)) { Serial.println("initialization failed!"); while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(7); // от 2 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима for(uint8_t i=0; i<sizeof(inPins);i++){ pinMode(inPins[i],INPUT); } pinMode(outPin,OUTPUT); digitalWrite(outPin,LOW); Serial.println("initialization done."); } void loop() { static uint8_t old=0xFF; static uint32_t timer=0; uint8_t in=0; for(uint8_t i=0; i<sizeof(inPins);i++){ in<<=1; if(digitalRead(inPins[i])==HIGH){ in|=1; } } if(in!=old){ digitalWrite(outPin,HIGH); char buf[10]={0}; sprintf(buf, "%d.wav", in+1); music.play(buf); old=in; timer=millis(); } if(digitalRead(outPin)==HIGH){ if(millis()-timer>2000){ digitalWrite(outPin,LOW); } } }спасибо большое, но каналы не правильно читает ...(((
Ну так переименуй файлы на SD как тебе надо. Или в "ищу исполнителя".
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> #define chipSelect 4 File root; TMRpcm music; const uint8_t inPins[]={8,7,6,5}; const uint8_t outPin=10; // на этой ножке появляется единичка при запуске файла на проигрывание const uint8_t chan[]={11,6,14,5,2,16,1,10,12,3,4,13,7,16,8,9}; // таблица каналов void setup() { music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.volume(7); // от 0 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима music.play("s.wav"); Serial.begin(9600); Serial.println("Initializing SD card..."); if (!SD.begin(chipSelect)) { Serial.println("initialization failed!"); while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(7); // от 2 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима for(uint8_t i=0; i<sizeof(inPins);i++){ pinMode(inPins[i],INPUT); } pinMode(outPin,OUTPUT); digitalWrite(outPin,LOW); Serial.println("initialization done."); } void loop() { static uint8_t old=0xFF; static uint32_t timer=0; uint8_t in=0; for(uint8_t i=0; i<sizeof(inPins);i++){ in<<=1; if(digitalRead(inPins[i])==HIGH){ in|=1; } } if(in!=old){ digitalWrite(outPin,HIGH); char buf[10]={0}; sprintf(buf, "%d.wav", chan[in]); music.play(buf); old=in; timer=millis(); } if(digitalRead(outPin)==HIGH){ if(millis()-timer>2000){ digitalWrite(outPin,LOW); } } }спасибо большое, так и сделал ...
взял fd mini player как перевести чтоб стабильно работал?
взял модуль DFmini и ошибка выходит ... (invalid conversion from 'const char*' to 'uint16_t {aka unsigned int}' [-fpermissive])
что это значит?
что это значит?
Именно то, что написано: недопустимое преобразование из 'const char *' в 'uint16_t
как исправить?
Сконвертить из текстового представления в цифровое.
не получается ни в какую, новичок)
Новичек, тогда учись. Я тебе и так много чем помог. Решение твоего второго вопроса элементарно и вообще не интересно, никак....
купил df mini, так как вольтаж маленький, а там встроенный усилок, записал голоса уже чище, + добавил голос "приветствия", названия каналов 0001,0002 и т.д., приветствие s.mp3, вот теперь не могу программу допилить ...
конечно, спасибо тебе за это! будем пробывать ...
купил df mini, так как вольтаж маленький, а там встроенный усилок, записал голоса уже чище, + добавил голос "приветствия", названия каналов 0001,0002 и т.д., приветствие s.mp3, вот теперь не могу программу допилить ...
Бывает, нужно работать над собой ;)
пробывать ...
Тут явно буква пропущена
я попытался написать свой, но Ваш лучше работал, может подскажете как Сконвертить из текстового представления в цифровое?
#include <SoftwareSerial.h> #include <DFPlayer_Mini_Mp3.h> const int inPins[]={8,7,6,5}; String chanel[16]={"0110","0010","1001","0101","1100","1000","0011","0111","1111","1110","0000","0001","1101","0100","1010","1011"}; void setup() { Serial.begin (9600); // открываем порт для консоли mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module mp3_set_volume (30); //устанавливаем уровень громкости for(int i=5; i<=8; i++) { pinMode(i,INPUT); } mp3_play(20); //приветствие ... delay(5000); } String old=""; bool hi=false; void loop() { String signal=""; for(int i=5; i<=8; i++) { if(digitalRead(i)) signal+='1'; else signal+='0'; } Serial.print(signal); Serial.println("|"); if(!signal.equals(old)) { int ck; for(int i=0; i<16; i++) { if(signal.equals(chanel[i])) { ck=i; mp3_play(ck+1); Serial.println("True"); } } old=signal; } }xwep, тут ничего "конвертировать" не надо. Вы сами себе проблемы создаете.
Нафига вы список каналов храните в текстовых строках :
String chanel[16]={"0110","0010","1001","0101","1100","1000","0011","0111","1111","1110","0000","0001","1101","0100","1010","1011"};храните сразу в числовом виде. как у brokly - и не надо будет ничего конвертировать
чтобы этот код пел только в mp3 используя df player
#include <SD.h> // необходимо включить SD библиотеку #include <TMRpcm.h> // также необходимо включить данную библиотеку... #include <SPI.h> #define chipSelect 4 File root; TMRpcm music; const uint8_t inPins[]={8,7,6,5}; const uint8_t outPin=10; // на этой ножке появляется единичка при запуске файла на проигрывание const uint8_t chan[]={11,6,14,5,2,16,1,10,12,3,4,13,7,16,8,9}; // таблица каналов void setup() { music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.volume(7); // от 0 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима music.play("s.wav"); Serial.begin(9600); Serial.println("Initializing SD card..."); if (!SD.begin(chipSelect)) { Serial.println("initialization failed!"); while (1); } music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д. music.setVolume(7); // от 2 до 7. Установка уровня громкости music.quality(0); // 1 для 2x передескритезации, 0 for для нормального режима for(uint8_t i=0; i<sizeof(inPins);i++){ pinMode(inPins[i],INPUT); } pinMode(outPin,OUTPUT); digitalWrite(outPin,LOW); Serial.println("initialization done."); } void loop() { static uint8_t old=0xFF; static uint32_t timer=0; uint8_t in=0; for(uint8_t i=0; i<sizeof(inPins);i++){ in<<=1; if(digitalRead(inPins[i])==HIGH){ in|=1; } } if(in!=old){ digitalWrite(outPin,HIGH); char buf[10]={0}; sprintf(buf, "%d.wav", chan[in]); music.play(buf); old=in; timer=millis(); } if(digitalRead(outPin)==HIGH){ if(millis()-timer>2000){ digitalWrite(outPin,LOW); } } }