Stránka 1 z 1
ATtiny4313 vs UNO
Napsal: 23 srp 2021, 12:33
od Ludek
Zdravím !!
Prosím, mám zajímavý problém, pro mne nepochopitelný. Potřebuji u tlačítka rozlišit krátký a dlouhý stisk.
Co je triviální v několika variacích.
ALE !!!
Jak to, že mi to šlape na UNU ale na ATtiny4313 né. Zbytek velkého programu šlape, ale toto blbé tlačítko mé

Pouze funkce stisku Short. Druhá funkce Long prostě LED nerozsvítí.
Kde je chyba?
Re: ATtiny4313 vs UNO
Napsal: 23 srp 2021, 13:45
od ondraN
Těžko říct, když nevíme, podle čeho hodnotíš dlouhý a krátký stisk. Pokud podle millis(), tak bych se nejdříve podíval, jestli čítá srávnou rychlostí. Stačí jeden blik LEDkou po 10sec. Na tom se dá poznat i menší odchylka.
Pokud přes interrupt a nějaký timer, může tam byt těch příčin hromada.
Re: ATtiny4313 vs UNO
Napsal: 23 srp 2021, 13:53
od Ludek
OK to mě nenapadlo, jdu kouknout na oscilátor.
Re: ATtiny4313 vs UNO
Napsal: 23 srp 2021, 14:13
od Ludek
Tak jsem to nastavil a bylo to OK, i PWM kontrola, tak nevím...
Funguje to na UNU, na Mini ale na ATtiny4313 ne.
Kód: Vybrat vše
int LED1 = 4;
int LED2 = 3;
int button = 2;
boolean LED1State = false;
boolean LED2State = false;
long buttonTimer = 0;
long longPressTime = 2000;
boolean buttonActive = false;
boolean longPressActive = false;
void setup() {
pinMode(LED1, OUTPUT); // LED kratky stisk
pinMode(LED2, OUTPUT); // LED dlouhy stisk
pinMode(button, INPUT);
}
void loop() {
if (digitalRead(button) == HIGH) {
if (buttonActive == false) {
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) && (longPressActive == false)) {
longPressActive = true;
// LED1State = !LED1State;
// digitalWrite(LED1, LED1State);
}
} else {
if (buttonActive == true) {
if (longPressActive == true) {
longPressActive = false;
} else {
LED2State = !LED2State;
digitalWrite(LED2, LED2State);
}
buttonActive = false;
}
} delay(100);
}
Re: ATtiny4313 vs UNO
Napsal: 23 srp 2021, 15:14
od Ludek
Tak jsem to dal do extra přípravku a nastavit FUSE mimo IDE
a už to šlape. díky všem.