(29-09-2022, 22:15)Witam. napisał(a): Właśnie jestem na etapie zrobienia sobie swojego pierwszego funkcjonalnego projektu do mieszkania tj: podświetlenie pod szafkami kuchennymi z czujką ruchu oraz czujką światła. Napisałem sobie działający program na Arduino Uno lecz docelowo chciałem wykorzystać do tego celu ATtiny85. I tu się pojawił problem bo coś ta biblioteka Timers.h chyba nie działa z tym procesorem. Ale na tym jeszcze popracuję - bo chcę. Chętnie wkleję Ci mój programik który u mnie działa. Nie jest może perfekcyjny ale to są moje "początki". Możesz sobie coś dopasować zmieniać czasy procedury.. Kod jest prosty i raczej czytelny. Drobne info zapisałem w komentarzach.
Pozdrawiam KaDe.
Kod:
#include <Timers.h>
Timers <5> akcja;
int zal,wyl,czas,czujka,foto,pwm = 0;
int start =5; // wartość 5 jest ustawiona dla testów, jest to czas ile sekund po wykryciu ruchu (przy wzbudzonej czujce foto oczywiście)
// ma być właczone podświetlenie na max. Po tym czasie jeśli dalej jest ciemno w pomieszczeniu ma być właczone podświetlenie
// z wypełnieniem 10 momentu aż zrobi się dzień i czujka foto odblokuje czas "np. wyl=100" sek i zgasi całkiem "pwm=0"
void zad0(){
czujka = analogRead(14); // odczyt czujki ruchu
if (czujka>110){czas=start; wyl=100;} // jeśli czujka aktywna to czas start
}
void zad1(){
if (czas>0){ czas--;} //odliczanie czasu
wyl--;
}
void zad2(){
foto = analogRead(15);
if (foto > 400) {zal = 10; wyl= 100;}// odczyt czujki foto; zmienna "zal" służy dalej w programie jako minimalne podświetlenie w ciemności
else zal=0;
}
void zad3(){ // realizowanie powolnego gaszenia
if (pwm > 10){pwm--;}
else akcja.updateInterval(3,0);
}
void zad4(){
if (pwm < 255){pwm++;}
else akcja.updateInterval(4,0); // realizowanie zwolnionego załaczenia
}
void setup(){
pinMode(11, OUTPUT); //port PWM
pinMode(14, INPUT); //port czujki ruchu
pinMode(15, INPUT); //port czujki światła
Serial.begin(9600);
akcja.attach(0, 500, zad0 ); // sprawdzenie ird
akcja.attach(1, 1000, zad1 );// odliczanie
akcja.attach(2, 333, zad2 ); // sprawdzenie foto
akcja.attach(3, 0, zad3); // zgaś
akcja.attach(4, 0, zad4); // zapal
}
void loop(){
akcja.process(); // inicjalizacja lub aktualizacja wszystkich procedur(wątków, zdarzeń itp.)
if ((zal==10) && (czas==0)){akcja.updateInterval(3,20);} // warunek wygaszania, tu parametr 20 określa czas 20 msek iteracji
if ((zal==10) && (czas==start)){akcja.updateInterval(4,15);} // warunek załączenia, tu parametr 15 określa czas 15 msek iteracji
if ((zal==0) && (wyl==0)){pwm=0;} // wyłączenie podświetlenia końcowe (za dnia - czujka foto nieaktywna)
analogWrite(11,pwm); // praca w cyklu
}