Sepnutí relé pomocí kapacitního tlačítka

pavel1tu
Příspěvky: 1450
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Sepnutí relé pomocí kapacitního tlačítka

Příspěvek od pavel1tu » 06 bře 2020, 20:03

Děkuji,
moje AN je nic moc a tohle mi asi pomohlo s problémem co mám jinde.

Některé věci jsem kolem interupu vůbec netušil a evidentně je netuší více lidí,
na GIDHB je v mnoha zdrojích detach přímo ve funkci ktse vykonává po interupu.

tak ještě jednou díky, škoda že už ten můj příspěvek nejde upravit ...
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

gilhad
Příspěvky: 497
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Sepnutí relé pomocí kapacitního tlačítka

Příspěvek od gilhad » 06 bře 2020, 21:47

Ono ten detach tam klidne byt muze a muze mit dobry smysl - proste TENTO interrupt se od jeho zavolani nebude testovat az do dalsiho volani attach (cili tlacitko seplo, takze o dalsi spinani se ted starat nejakou dobu nebudeme, dokud se situace neuklidni) a nebudou se nam radit do fronty a nebudeme je potrebovat obsluhovat.

Akorat ze ta funkce, ktera osetruje ten prvni interrupt je furt v kontextu interruptu a az do sveho konce bude (pokud se s tim "neco nejak" neudela) a tak pro ni dal plati vse co dosud jako ze millis se neinkrementuje a delay s nenulovym parametrem je efektivne Halt a tak. (A taky ze by, jako kazdy interrupt mela udelat jen to nejnutnejsi a co nejdriv skoncit).

Jen uz to prechazi z urovne Arduino (mam tlacitko a LEDku, cosi stahnu z netu a s Bozi pomoci blikam) do urovne AVR (mam vykonny prumyslovy mikrokontroler se spoustou integrovanych periferii, propracovanym (ac stale jeste primitivnim) systemem inetrruptu, desitkami specializovanych registru a stovkami stranek toho nejzakladnejsiho datasheetu, kdyz budu vedet, co delam, tak si muzu dovolit opravdu dost).

rex001
Příspěvky: 5
Registrován: 06 bře 2020, 12:39
Reputation: 0

Re: Sepnutí relé pomocí kapacitního tlačítka

Příspěvek od rex001 » 08 bře 2020, 13:32

Takže ten kód co opravil pavel1tu nebude funkční? Je fakt že to programování není taková prdel jak to vypadá.

Šlo by vám třeba zadat zakázku na programování? Kdyby jste mi dal váš email, mohl bych vám poslat co potrebuji postavit a navrhnout, mám už nakoupené nějaké komponenty a mohu je poskytnout na testování. Popřípadě se můžeme osobně setkat.

gilhad
Příspěvky: 497
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Sepnutí relé pomocí kapacitního tlačítka

Příspěvek od gilhad » 08 bře 2020, 17:02

Ja ted zadne zakazky neberu a delsi dobu brat nebudu. Ani s Arduinem, ani jine (a pokud bych bral, tak moje ceny a lhuty urcite nejsou vhodne pro toto forum). Obcas tu pro sve poteseni neco poznamenam, kdyz mam zrovna cas a naladu a hvezdy jsou ve spravnem postaveni. A postavit ten kod tu zvladne urcite vic lidi, zvlast kdyz zakladni zaseky tu uz rozebrane jsou - neprohlizel jsem ho dukladne, ale IMHO tomu k dostatecne dobremu reseni moc nechybi.

rex001
Příspěvky: 5
Registrován: 06 bře 2020, 12:39
Reputation: 0

Re: Sepnutí relé pomocí kapacitního tlačítka

Příspěvek od rex001 » 08 bře 2020, 18:56

Chápu, ale neoslovoval jsem jen vas, ale i kolegu Pavel1tu. S tím tlacitkem je to jen část zařízení.

pavel1tu
Příspěvky: 1450
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Sepnutí relé pomocí kapacitního tlačítka

Příspěvek od pavel1tu » 08 bře 2020, 20:27

rex001 píše:
08 bře 2020, 18:56
Chápu, ale neoslovoval jsem jen vas, ale i kolegu Pavel1tu. S tím tlacitkem je to jen část zařízení.
A ten kod nefunguje ?

Pokud se staví něco většího, musí se to oživovat po kouskách,
trochu nechápu, že pokud si nevíte rady s obsluhou tlačítka,
že se pouštíte do něčeho většího.
tento kod by měl být OK

Kód: Vybrat vše

#define RELE1_PIN 6
#define RELE2_PIN 5
#define pinTlacitko 2

volatile int stavTlacitka = 0;
unsigned long currentMillis, previousMillis;
int stavRele = 0;

void setup() 
{
  pinMode(RELE1_PIN, OUTPUT);
  pinMode(RELE2_PIN, OUTPUT);
  pinMode(pinTlacitko, INPUT);
  attachInterrupt(digitalPinToInterrupt(pinTlacitko), prerus, RISING);
  previousMillis = millis();   //nacteni casu od spusteni

}

void loop() 
{ // tady se bude zapinat rele po 5s pokud je VYP
   currentMillis = millis();      
   if(currentMillis - previousMillis > 5000 && stavRele == 0) {   
        previousMillis = currentMillis;  
        digitalWrite(RELE1_PIN, HIGH);
        digitalWrite(RELE2_PIN, HIGH);
        stavRele = 1;
   }
   // tady se bude vypinat rele po 10s pokud je ZAP
   if(currentMillis - previousMillis > 10000 && stavRele == 1) {   
        previousMillis = currentMillis;  
        digitalWrite(RELE1_PIN, LOW);
        digitalWrite(RELE2_PIN, LOW);
        stavRele = 0;
   }

  if (stavTlacitka == HIGH) {
      digitalWrite(RELE1_PIN, HIGH);
      delay (500);
      digitalWrite(RELE1_PIN, LOW);
      stavTlacitka = LOW;           
  }


}
void prerus()
{  
  stavTlacitka = HIGH; 
  // popripade dalsi kod co chcete od preruseni             
}
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

Odpovědět

Kdo je online

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