Oświetlenie sterowane dżwiękiem.

....nie pasujące gdzie indziej...
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Modyfikować. W funkcji loop sprawdzaj czy upłynął czas i w razie potrzeby wyłącz światło.
--
pozdrawiam,
Jarek Andrzejewski
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

Przy próbie wgrania tego:

#include <Timers.h>

Timer ledBlinkTimer;

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
ledBlinkTimer.begin(SECS(2));
}

void loop() {
if (ledBlinkTimer.available())
{
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
ledBlinkTimer.restart();
}
}

mam taki komunikat:
Arduino:1.8.4 (Windows 7), Płytka:"Arduino Nano, ATmega328P"

C:\Users\Andrew\Documents\Arduino\sketch_sep12a\sketch_sep12a.ino:1:20: fatal error: Timers.h: No such file or directory

#include <Timers.h>

^

compilation terminated.

exit status 1
Błąd kompilacji dla płytki Arduino Nano.


W ten sposób do niczego nie dojdziemy i będzie tego za chwilę kilka stron. Nie ogarniam tego jak pisałem więc nie wiem czy jest sens to ciągnąć :zalamany:
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Jak uważasz. Powyższy błąd chyba wynika z tego, że ominąłeś "Jeśli spodobała Ci się ta biblioteka, przejdź na stronę projektu, pobierz ją i zapoznaj się z dodatkowymi funkcjami oraz przykładami."
--
pozdrawiam,
Jarek Andrzejewski
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

Nie ominąłem... Żaden z pobranych plików stąd https://github.com/nettigo/Timers z folderu examples - nie przechodzi u mnie pozytywnie weryfikacji. Dlaczego? Nie wiem. Jak mam ciągnąć temat skoro cały czas pod górkę a konkretnej pomocy w formie gotowych kilku linijek nie zobaczę chyba nigdy. Nie jestem leniem tylko po prostu tego nie rozumiem. Czuję się "grillowany" troszkę na zasadzie zmusimy cię do pracy kolego . Chociaż szukam w sieci czegoś podobnego niczego póki co nie znajduję.
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Musisz zainstalować bibliotekę ("Bibliotekę należy pobrać i umieścić w katalogu libraries, który znajduje się w folderze ze szicami Arduino."). Przykłady nie zadziałają bez tego.
--
pozdrawiam,
Jarek Andrzejewski
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

ptja pisze:Musisz zainstalować bibliotekę ("Bibliotekę należy pobrać i umieścić w katalogu libraries, który znajduje się w folderze ze szicami Arduino."). Przykłady nie zadziałają bez tego.
Zrobiłem jak wskazałeś. Teraz weryfikacja i wgrywanie jest ok, ale dalej nie wiem jak to ma działać u mnie ? Zmieniłem wartość w linijce: ledBlinkTimer.begin(SECS(10)); na 10 sekund i dioda L teraz świeci 10 sekund potem 10 sekund nie świeci i tak w kółko, a mnie chodzi o sterowanie załączaniem z mikrofonu - świeceniem powiedzmy 30 sekund i wyłączeniem do następnego sygnału dżwiękowego zarejestrowanego przez moduł z mikrofonem.
Jaki powinien być mój kolejny krok? Co muszę zmienić i jak?
Ostatnio zmieniony wtorek 12 wrz 2017, 17:14 przez luzik, łącznie zmieniany 1 raz.
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Na początek może prościej (paskudny kod, wiem):

Kod: Zaznacz cały

#define CZAS_SWIECENIA 60

void loop &#40;&#41; &#123;
   nowMic = digitalRead&#40;mic&#41;;
   if &#40;lastMic == LOW && nowMic == HIGH&#41; &#123;
      digitalWrite &#40;lamp, 1&#41;;
      delay&#40;CZAS_SWIECENIA * 1000&#41;;
      digitalWrite &#40;lamp, 0&#41;;
   &#125; 
   lastMic = nowMic;

&#125; 
--
pozdrawiam,
Jarek Andrzejewski
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

Coś nie halo...

Arduino:1.8.4 (Windows 7), Płytka:"Arduino Nano, ATmega328P"

Opcje projektu zmienione, przeładuj całość
C:\Users\Andrew\Desktop\Timers-master\Timers-master\examples\smooth_blink\smooth_blink.ino: In function 'void loop()':

smooth_blink:4: error: 'nowMic' was not declared in this scope

nowMic = digitalRead(mic);

^

smooth_blink:4: error: 'mic' was not declared in this scope

nowMic = digitalRead(mic);

^

smooth_blink:5: error: 'lastMic' was not declared in this scope

if (lastMic == LOW && nowMic == HIGH) {

^

smooth_blink:6: error: 'lamp' was not declared in this scope

digitalWrite (lamp, 1);

^

C:\Users\Andrew\Desktop\Timers-master\Timers-master\examples\smooth_blink\smooth_blink.ino:7:28: warning: integer overflow in expression [-Woverflow]

delay(CZAS_SWIECENIA * 1000);

^

smooth_blink:10: error: 'lastMic' was not declared in this scope

lastMic = nowMic;

^

exit status 1
'nowMic' was not declared in this scope
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Zmień tylko tę jedną funkcję (loop) w swoim pierwotnym kodzie (i dodaj to #define). To, co wkleiłem to tylko fragment programu, ale reszta pozostaje bez zmian.
--
pozdrawiam,
Jarek Andrzejewski
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

Nie mógłbyś wrzucić już właściwego kompletnego kodu Jarku?

Tak to zmodyfikowałem:

#define CZAS_SWIECENIA 60

Timer ledBlinkTimer;

void setup() {
pinMode(LED_BUILTIN, OUTPUT);
ledBlinkTimer.begin(SECS(2));
}

void loop () {
nowMic = digitalRead(mic);
if (lastMic == LOW && nowMic == HIGH) {
digitalWrite (lamp, 1);
delay(CZAS_SWIECENIA * 1000);
digitalWrite (lamp, 0);
}
lastMic = nowMic;

}

Po próbie wykonania tego o co prosiłeś mam taki komunikat:

Arduino:1.8.4 (Windows 7), Płytka:"Arduino Nano, ATmega328P"

sketch_sep12b:3: error: 'Timer' does not name a type

Timer ledBlinkTimer;

^

C:\Users\Andrew\Documents\Arduino\sketch_sep12b\sketch_sep12b.ino: In function 'void setup()':

sketch_sep12b:7: error: 'ledBlinkTimer' was not declared in this scope

ledBlinkTimer.begin(SECS(2));

^

sketch_sep12b:7: error: 'SECS' was not declared in this scope

ledBlinkTimer.begin(SECS(2));

^

C:\Users\Andrew\Documents\Arduino\sketch_sep12b\sketch_sep12b.ino: In function 'void loop()':

sketch_sep12b:11: error: 'nowMic' was not declared in this scope

nowMic = digitalRead(mic);

^

sketch_sep12b:11: error: 'mic' was not declared in this scope

nowMic = digitalRead(mic);

^

sketch_sep12b:12: error: 'lastMic' was not declared in this scope

if (lastMic == LOW && nowMic == HIGH) {

^

sketch_sep12b:13: error: 'lamp' was not declared in this scope

digitalWrite (lamp, 1);

^

C:\Users\Andrew\Documents\Arduino\sketch_sep12b\sketch_sep12b.ino:14:28: warning: integer overflow in expression [-Woverflow]

delay(CZAS_SWIECENIA * 1000);

^

sketch_sep12b:17: error: 'lastMic' was not declared in this scope

lastMic = nowMic;

^

exit status 1
'Timer' does not name a type

Ten raport powinien zawierać więcej informacji jeśli w
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"


Czyli amba :niepewny: :zdegustowany:
ptja
Posty: 2414
Rejestracja: poniedziałek 31 gru 2012, 12:44
Lokalizacja: Łódź

Post autor: ptja »

Chodziło o ten poprzedni szkic, przecież w tym nie ma definicji lastMic ani nowMic.
Ja nie uruchamiam Twojego kodu, piszę "z głowy" (to się może też przydać: http://trash.ttrsite.net/jezykansic.pdf ).
--
pozdrawiam,
Jarek Andrzejewski
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

Wpisałem zmodyfikowany taki:

#define CZAS_SWIECENIA 60

int mic = 4;
int lamp = 13;
boolean lastMic = LOW;
boolean nowMic = LOW;
boolean lampON = false;
void setup () {
pinMode(mic, INPUT);
pinMode (lamp, OUTPUT);
}
void loop () {
nowMic = digitalRead(mic);
if (lastMic == LOW && nowMic == HIGH) {
digitalWrite (lamp, 1);
delay(CZAS_SWIECENIA * 1000);
digitalWrite (lamp, 0);
}
lastMic = nowMic;

}

ale weryfikacja wygląda tak:

C:\Users\Andrew\Documents\Arduino\sketch_sep12b\sketch_sep12b.ino: In function 'void loop()':

C:\Users\Andrew\Documents\Arduino\sketch_sep12b\sketch_sep12b.ino:16:28: warning: integer overflow in expression [-Woverflow]

delay(CZAS_SWIECENIA * 1000);


^

Szkic używa 1112 bajtów (3%) pamięci programu. Maksimum to 30720 bajtów.
Zmienne globalne używają 11 bajtów (0%) pamięci dynamicznej, pozostawiając 2037 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.


Powoli moja głowa jest jak kula ziemska. Zaraz wybuchnie :przestraszony:
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

Wielkie podziękowania dla kolegi ptja za pomoc i sfinalizowanie tematu. Bez niego realizacja tego pomysłu nie była by możliwa. Mogę cieszyć się nową funkcjonalną zabawką :mrgreen: Jeszcze raz DZIĘKUJĘ Jarku !!! :padam: :padam:
amman
Posty: 31
Rejestracja: poniedziałek 19 sty 2015, 21:35
Lokalizacja: Kraków

Post autor: amman »

Niby można zorganizować takie oświetlenie, ale z mojej analizy wynika, że bywa ono czasami problematyczne. Wydaje mi się się, że lepszą, korzystniejszą opcją jest pozostawienie tych podstawowych funkcji dźwiękowych. Natomiast te bardziej skomplikowane lepiej zastąpić jakiś bardziej niezawodnym systemem, algorytmem sterującym. Np w oparciu o włącznik czy wyłącznik czasowy.
luzik
Posty: 279
Rejestracja: wtorek 15 paź 2013, 20:32
Lokalizacja: Myślenice

Post autor: luzik »

amman pisze:Niby można zorganizować takie oświetlenie, ale z mojej analizy wynika, że bywa ono czasami problematyczne. Wydaje mi się się, że lepszą, korzystniejszą opcją jest pozostawienie tych podstawowych funkcji dźwiękowych. Natomiast te bardziej skomplikowane lepiej zastąpić jakiś bardziej niezawodnym systemem, algorytmem sterującym. Np w oparciu o włącznik czy wyłącznik czasowy.
A tak po ludzku mówiąc to co kolega ma na myśli konkretnie? Bo to bardzo ogólne i nic nie mówiące :mrgreen: Taki tekst każdy może napisać i dokładnie NIC z niego nie wynika. :luka:
ODPOWIEDZ