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
}
}
link do schematu