09-12-2018, 01:03
W tym kodzie masz taki bajzel, że nawet nie będę tego dotykał. Poukładaj sobie klamrami co do czego należy {}. Np. w tej linijce są trzy błędy: if(PamietajCzas = TerazCzas - 300); pierwszy to "=" nie robi porównania tylko przypisanie, porównanie to ==, poza tym nigdy nie rób == bo może ta chwila była 5ns temu i już nigdy się nie spełni (lepiej => lub =< w zależności od kontekstu), po trzecie kończysz if za nawiasem średnikiem więc on nic nie zrobi.
Nie wiem czy z tego skorzystasz, w tym kodzie ma coś piknąć/mignąć bez blokowania programu (przycisk na 2, led czy buzer na 13):
Po tak przygotowanej funkcji możesz sobie wywołać ją podając jaki czas piknięć, ile ich ma być, i na jakim pinie: dzwiek(500,10,buzzer);. I w kodzie możesz sobie robić cokolwiek innego (byle też nie blokować delay).
Nie wiem czy z tego skorzystasz, w tym kodzie ma coś piknąć/mignąć bez blokowania programu (przycisk na 2, led czy buzer na 13):
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;
}
}
}
Po tak przygotowanej funkcji możesz sobie wywołać ją podając jaki czas piknięć, ile ich ma być, i na jakim pinie: dzwiek(500,10,buzzer);. I w kodzie możesz sobie robić cokolwiek innego (byle też nie blokować delay).
Miło być decenianym https://buycoffee.to/kaczakat