22-11-2018, 07:58
Jak się uda coś rozwiązać to miło by było pokazać działające rozwiązanie. Mam nadzieję, że mówisz serio z wyrzuceniem delay, bo są lepsze sposoby zarządzania czasem w procesorze. Nie denerwuje Cię też działanie przycisku? Tu masz przykład jak zapikać buzerem przez 10s nie zatrzymując programu:
Millis jest tylko nieco mniej prymitywne od delay w zarządzaniu czasem, ale to już zapewnia działanie w czasie rzeczywistym programu. Obsługe przycisku fajnie rozwiązuje biblioteka bounce2.
Kod:
const int buzzer=13;
const int button=2;
boolean stanbuzzera=0;
void setup() {
// put your setup code here, to run once:
pinMode(buzzer,OUTPUT);
pinMode(button,INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
if(!digitalRead(2)||stanbuzzera) dzwiek(500,10,buzzer);
}
void dzwiek(uint16_t dlugosc, uint16_t pikniec, uint16_t pin) //(dlugosc piku, ile pikniec, na ktory pin)
{
static uint16_t aktualnyPik=0;
static boolean stanpoprzedni=0;
static uint32_t lasttime=0;
uint32_t currenttime=millis();
// na razie zakladam 5 pikniec co 1000ms
if(currenttime-lasttime>=(uint32_t)dlugosc)
{
lasttime=currenttime;
if( aktualnyPik++ <(pikniec*2))//mnozymy *2 by pikniec bylo 10, nie zmian stanu
{
digitalWrite(pin,!digitalRead(pin));
stanbuzzera=1;
}
else
{
aktualnyPik=0;
stanbuzzera=0;
}
}
}
Miło być decenianym https://buycoffee.to/kaczakat