Skocz do zawartości

Arduino i DF PLAYER mini


maja35

Pomocna odpowiedź

Witam wszystkich.

Mam mały problem z odtwarzaczem a raczej z kodem, ale od początku. Jakiś czas temu wymyśliłem sobie, że zrobię sobie taki mały komunikator, który będzie mnie informował mnie o pewnych zdarzeniach głosowo. Chodzi mniej więcej o to, aby dane komunikaty zostały odtworzone jak czujniki podadzą sygnały na określone piny. Wymyśliłem sobie takie założenia:

Czujnik 1 podaje sygnał na pin 7 i ma się po 16 sekundach odtworzyć komunikat nr.1.

Następnie jeśli czujnik 2 nie poda sygnału na pin 9, komunikat ma zostać powtórzony po 16 sekundach. I tak aż do załączenia czujnika 2.

Następnie jeśli czujnik 2, poda sygnał na pin 9, odtwarzanie komunikatu ma zostać przerwane. Do tego momentu program wykonuje się poprawnie.

Następnie jeśli czujnik 2 zostanie rozłączony odtwarzanie komunikatu powinno zostać wznowione ale dopiero po 16 sek.- i tutaj jest problem, nie zawsze jest to po 16 sekundach. zależy w którym monecie czujnik 2 wstrzeli się z rozłączeniem. Czasami następuje to prawie natychmiast, czasami czeka tylko parę sekund. Owszem nieraz trafi w to 16 sekund.

Z kolei jeśli czujnik 1 przestanie podawać sygnał na pin 7, a czujnik 2 będzie nadal podawał sygnał na pin 9, to po 3 sekundach odtworzyć ma się komunikat nr.2. i tak aż do rozłączenia czujnika 2. I tutaj też nie zawsze po rozłączeniu czujnika 1, komunikat jest po trzech sekundach zależy kiedy wstrzeli się rozłączenie, czasami natychmiast a czasami po trzech sekundach.

Jestem bardzo, bardzo początkujący. Jeśli któryś z kolegów chciałby pomóc w rozwiązaniu mojego problemu będę wdzięczny.

Janusz.

#include <DFPlayer_Mini_Mp3.h>
#include <SoftwareSerial.h>

int czujnik_1 = 7;
int czujnik_2 = 9;
int play_state = 3;
SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
 mySerial.begin (9600);
 Serial.begin (9600);
 mp3_set_serial (mySerial);
 delay(1);
 mp3_set_volume (15);
 pinMode(czujnik_1, INPUT);
 pinMode(czujnik_2, INPUT);
 pinMode(play_state, INPUT);
}

void zapal() {
 delay(16000);                                                         // czekaj 16 sekund
 boolean play_state = digitalRead(3);
 if (play_state == HIGH) {
   if ( digitalRead(czujnik_1) == HIGH && digitalRead(czujnik_2) == LOW)// sprawdź czy dalej czujnik 1 jest włączony 
                                                                      // i jeżeli czujnik 2 się nie włączył
     mp3_play(1);                                                    // graj to
 }
}

void zgas() {
 delay( 3000);                                             // czekaj 3 sekundy
 boolean play_state = digitalRead(3);
 if (play_state == HIGH) {
   if (digitalRead(czujnik_2) == HIGH && digitalRead(czujnik_1) == LOW )// sprawdź czy dalej czujnik 2 jest włączony
                                                                       // i jeżeli czujnik 1 jest  się wyłączył                 
     mp3_play(2);                                                     // graj to 
 }
}

void loop() {
 if ( digitalRead(czujnik_1) == HIGH) {//jeśli czujnik 1 dał sygnał wysoki
    zapal();//wykonaj to
 }

 if ( digitalRead(czujnik_2) == HIGH){// jeśli czujnik 2 dał sygnał wysoki
    zgas();// wykonaj to
 }
}

" alt="" />

Link do komentarza
Share on other sites

Dziękuję za pomoc. Na tę chwilę poradziłem sobie w ten sposób, że w miejsce delay wstawiłem pętlę i kazałem płytce migać diodą co sekundę. Ale z maszyną stanów muszę spróbować. Czuję, że jeszcze da się to jakoś ładniej napisać.

Pozdrawiam Janusz.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.