Program do DF PLAYER - mini

0 głosów
57 wizyt
pytanie zadane 23 listopada 2016 przez użytkownika maja35 (6)

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>

  1. #include <SoftwareSerial.h>

  2. int czujnik_1 = 7;

  3. int czujnik_2 = 9;

  4. int play_state = 3;

  5. SoftwareSerial mySerial(10, 11); // RX, TX

  6. void setup() {

  7.   mySerial.begin (9600);

  8.   Serial.begin (9600);

  9.   mp3_set_serial (mySerial);

  10.   delay(1);

  11.   mp3_set_volume (15);

  12.   pinMode(czujnik_1, INPUT);

  13.   pinMode(czujnik_2, INPUT);

  14.   pinMode(play_state, INPUT);

  15. }

  16. void zapal() {

  17.   delay(16000);                                                         // czekaj 16 sekund

  18.   boolean play_state = digitalRead(3);

  19.   if (play_state == HIGH) {

  20.     if ( digitalRead(czujnik_1) == HIGH && digitalRead(czujnik_2) == LOW)// sprawdź czy dalej czujnik 1 jest włączony

  21.                                                                        // i jeżeli czujnik 2 się nie włączył

  22.       mp3_play(1);                                                    // graj to

  23.   }

  24. }

  25. void zgas() {

  26.   delay( 3000);                                             // czekaj 3 sekundy

  27.   boolean play_state = digitalRead(3);

  28.   if (play_state == HIGH) {

  29.     if (digitalRead(czujnik_2) == HIGH && digitalRead(czujnik_1) == LOW )// sprawdź czy dalej czujnik 2 jest włączony

  30.                                                                         // i jeżeli czujnik 1 jest  się wyłączył                

  31.       mp3_play(2);                                                     // graj to

  32.   }

  33. }

  34. void loop() {

  35.   if ( digitalRead(czujnik_1) == HIGH) {//jeśli czujnik 1 dał sygnał wysoki

  36.      zapal();//wykonaj to

  37.   }

  38.   if ( digitalRead(czujnik_2) == HIGH){// jeśli czujnik 2 dał sygnał wysoki

  39.      zgas();// wykonaj to

  40.   }

  41. }

2 odpowiedzi

0 głosów
odpowiedź 3 marca 2017 przez użytkownika tomekatomek123456789 (558)
Polecam z kodu usunąć te numerki xd. A tak na serio pokaż zdj tego podłaczenia.

PS może są zakłucenia
0 głosów
odpowiedź 9 marca 2017 przez użytkownika hamer_ (447)
usuń delay. Pamiętaj jeśli użyjesz funkcji delay zatrzymujesz program na dany czas co za tym idzie jeśli w tych 16s coś się zmieni arduino odnotuje to dopiero po upłynięciu danego czasu. Są biblioteki do pomiaru czasu można w ostateczności użyć przerwań
...