ATtiny4313 vs UNO

Odpovědět
Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

ATtiny4313 vs UNO

Příspěvek od Ludek » 23 srp 2021, 12:33

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?

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: ATtiny4313 vs UNO

Příspěvek od ondraN » 23 srp 2021, 13:45

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.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: ATtiny4313 vs UNO

Příspěvek od Ludek » 23 srp 2021, 13:53

OK to mě nenapadlo, jdu kouknout na oscilátor.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: ATtiny4313 vs UNO

Příspěvek od Ludek » 23 srp 2021, 14:13

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);
}

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: ATtiny4313 vs UNO

Příspěvek od Ludek » 23 srp 2021, 15:14

Tak jsem to dal do extra přípravku a nastavit FUSE mimo IDE
a už to šlape. díky všem.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host