здравствуйте,пытаюсь освоить ардуино. суть проэкта воспроизвести аудиофайл waw с cd карты, есть 5 треков и 5 кнопок, при нажатии первой кнопки воспроизводится 1й трек и т.д. и важный момент воспроизведение должно продолжатся пока нажата кнопка. никак не разберусь как взаимодействуют библиотеки.
Искал уже, перерыл весь нэт либо плееры с управлением восп. След.и т д Нашел только прошивку для атмеги но там трек воспроизводится полностью а мне нужно когда кнопку отпустишь чтобы останавливалось воспроизведение.
Как только ваш вопрос изменится на "я хочу вот так, для этого делаю вот это, не разобрался только в том месте" - сразу получите помощь. А пока все выглядит на "задали лабораторку - сделайте за меня, кто умеет"
Код (Text): #include <SD.h>// sd kart kütüphanesi #define Sd_Chip_pin 10 #include <TMRpcm.h>// melodi çalma kütüphanesi TMRpcm tmrpcm; // melodi fonksiyonu oluşturma int SW1; int SW2; int SW3; int SW4; int SW5; void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); tmrpcm.speakerPin = 9; // if (!SD.begin(Sd_Chip_pin)) { // } } void loop() { SW1 = digitalRead(2); SW1 = digitalRead(3); SW1 = digitalRead(4); SW1 = digitalRead(5); SW1 = digitalRead(6); if (SW1 == LOW) { // tmrpcm.play("1.wav");{ } else (SW1 == HIGH);{ tmrpcm.stopPlayback("1.wav"); } } } }
1. Состояние всех входов считано в одну и ту же переменную. 2. В if каша а не код. Разберитесь где какие скобки. 3. Обязательно заведите себе переменную, хранящую состояние "воспроизводим/молчим". Иначе при нажатии на кнопку у вас будет постоянный старт, при отпускании - постоянный останов воспроизведения. А надо посылать одну команду при переключении состояния кнопки (и там еще дребезг будет, но об этом попозже)
Разберитесь, что означают эти две сточки в конце: ----- } else (SW1 == HIGH);{ tmrpcm.stopPlayback("1.wav"); ----- Что такое"else (SW1 == HIGH);"?
3. Обязательно заведите себе переменную, хранящую состояние "воспроизводим/молчим". Иначе при нажатии на кнопку у вас будет постоянный старт, при отпускании - постоянный останов воспроизведения. А надо посылать одну команду при переключении состояния кнопки (и там еще дребезг будет, но об этом попозже)[/QUOTE] про это можно по подробней,это моя первая программа поэтому сильно не ругайте. вот что получилось у меня после танцев с бубном. Код (C++): #include <pcmConfig.h> #include <pcmRF.h> #include <SPI.h> #include <TMRpcm.h> #include <SD.h> #define SD_ChipSelectPin 10 //Определение 3го пина для управления адаптером флешки TMRpcm tmrpcm; const int buttonPin = 2; const int button1Pin = 3;// номер входа, подключенный к кнопке // переменные int buttonState = 0; int button1State = 0;// переменная для хранения состояния кнопки void setup() { tmrpcm.speakerPin = 9; if (!SD.begin(SD_ChipSelectPin)) { //Проверка инициализации флешки return; } tmrpcm.volume(4); // инициализируем пин, подключенный к кнопке, как вход pinMode(buttonPin, INPUT); pinMode(button1Pin, INPUT); } void loop() { // считываем значения с входа кнопки buttonState = digitalRead(buttonPin); button1State = digitalRead(button1Pin); // проверяем нажата ли кнопка // если нажата, то buttonState будет HIGH: if (buttonState == HIGH) { tmrpcm.play("1.wav"); delay(1000); } else { tmrpcm.disable(); } if (button1State == HIGH) { tmrpcm.play("2.wav"); delay(1000); } else { tmrpcm.disable(); } } без "delay" упорно не хочет работать,и так и не получается прервать воспроизведение при размыкании кнопки.
Ну давайте думать как будет поступать контроллер. Разбираем построчно ваш код. Код (C++): if (buttonState == HIGH) { tmrpcm.play("1.wav"); delay(1000); } else { tmrpcm.disable(); } Итак, построчно. 1. Если на входе кнопки 5 вольт, то запускаем на воспроизведение файл 1 и ждем 1 секунду. 2. Иначе отключаем воспроизведение. Согласны? И далее повтор для другой кнопки. А теперь представьте, что вы нажали 1 кнопку, началось воспроизведение, ожидаем 1 секунду и затем идем обрабатывать кнопку 2. Кнопка 2 не нажата, код идет по ветке else и останавливает воспроизведение 1 файла. Мысль понятна? Теперь как бы я решал данную задачу. Я бы убрал все ветки с else. Кнопки должны только запускать воспроизведение. А вот после нужна такая проверка Код (C++): if (buttonState == LOW && button1State == LOW) { tmrpcm.disable(); } То есть если и первая и вторая кнопки не нажаты, то останавливаем воспроизведение. Весь код специально не пишу, думайте.