Stránka 2 z 2

Re: Blokování vstupů nebo výstupů???

Napsal: 11 říj 2020, 22:15
od kiRRow
No tak úkol zněl jasně ... krom toho že muž s hnědou brašnou na motocyklu nesmí projet ... tak
aby se dalo stisknout vždy jen jedno tlačítko, které ovládá přiřazené relé a nešlo po dobu stisknutí tlačítka sepnout jiné relé jiným tlačítkem.
počítám i stím, že po dobu sepnutí tlačítka chci mít to relé opravdu sepnuté

edit : udělat něco blbuvzdorné je nemožné, protože blbci jsou ohromně vynalézaví :D

Re: Blokování vstupů nebo výstupů???

Napsal: 16 říj 2020, 19:47
od Hanz
ahoj, jelikož se pletly dva kody v přízpěvcích tohoto vlákna,tady je kod, který by měl odpovídat původnímu zadání
aby se dalo stisknout vždy jen jedno tlačítko, které ovládá přiřazené relé a nešlo po dobu stisknutí tlačítka sepnout jiné relé jiným tlačítkem.
tady je kod

Kód: Vybrat vše

#define TLACITKO1 2      //definuje vstup tlačítka
#define TLACITKO2 3
#define TLACITKO3 4
#define TLACITKO4 5

#define RELE1  6
#define RELE2  7
#define RELE3  8
#define RELE4  9

bool TL1,TL2,TL3,TL4;  // pro ulozeni stavu tlacitka


void setup()
 {

 Serial.begin(9600);
  
 pinMode(TLACITKO1, INPUT_PULLUP);     // pozor input_pullup ! 
 pinMode(TLACITKO2, INPUT_PULLUP);
 pinMode(TLACITKO3, INPUT_PULLUP);
 pinMode(TLACITKO4, INPUT);

 pinMode(RELE1, OUTPUT);
 pinMode(RELE2, OUTPUT);
 pinMode(RELE3, OUTPUT);
 pinMode(RELE4, OUTPUT); 
 }


void loop()
 {
 TL1 = digitalRead(TLACITKO1); // nacteni aktualniho stavu tlacitka, je to lepsi kdyz to zpracovavas vicekrate
 TL2 = digitalRead(TLACITKO2);
 TL3 = digitalRead(TLACITKO3);
 TL4 = digitalRead(TLACITKO4);


  if(TL1 == LOW) {  // otestuji první tlačítko
    if(TL2 == HIGH && TL3 == HIGH && TL4 == HIGH){  // tlacitko1 je stisknuto, tak otestuji jestli jiné už není stisknuto
      digitalWrite(RELE1, LOW); // není ... sepnu relé
    } // je ... nedělám nic
  } else  { // tlacitko1 není stisknuto
    digitalWrite(RELE1, HIGH); // vypnu relé1
  }
    if(TL2 == LOW) {  // otestuji druhé tlačítko
    if(TL1 == HIGH && TL3 == HIGH && TL4 == HIGH){  // tlacitko1 je stisknuto, tak otestuji jestli jiné už není stisknuto
      digitalWrite(RELE2, LOW); // není ... sepnu relé
    } // je ... nedělám nic
  } else  { // tlačítko2 není stisknuto
    digitalWrite(RELE2, HIGH); // vypnu relé2
  }
  if(TL3 == LOW) {  // otestuji třetí tlačítko
    if(TL1 == HIGH && TL2 == HIGH && TL4 == HIGH){  // tlacitko1 je stisknuto, tak otestuji jestli jiné už není stisknuto
      digitalWrite(RELE3, LOW); // není ... sepnu relé
    } // je ... nedělám nic
  } else  { // tlacitko3 není stisknuto
    digitalWrite(RELE3, HIGH); // vypnu relé3
  }
    if(TL4 == LOW) {  // otestuji čtvrté tlačítko
    if(TL1 == HIGH && TL2 == HIGH && TL3 == HIGH){  // tlacitko1 je stisknuto, tak otestuji jestli jiné už není stisknuto
      digitalWrite(RELE4, LOW); // není ... sepnu relé
    } // je ... nedělám nic
  } else  { // tlacitko4 není stisknuto
    digitalWrite(RELE4, HIGH); // vypnu relé4
  }
  
 }
za pozitivum mám to, že cívka relé je pod napětím až při stisknutí tlačítka ;)

Re: Blokování vstupů nebo výstupů???

Napsal: 16 říj 2020, 21:45
od pavel1tu
kiRRow píše:
11 říj 2020, 22:15
No tak úkol zněl jasně ... krom toho že muž s hnědou brašnou na motocyklu nesmí projet ... tak

počítám i stím, že po dobu sepnutí tlačítka chci mít to relé opravdu sepnuté

edit : udělat něco blbuvzdorné je nemožné, protože blbci jsou ohromně vynalézaví :D
Souhlas, já hodil nástřel na tabletu z hotelu na SC,
ideál by byl třeba i
- stisk jednoho tlačítka nahodí relé
- stisk druhého neudělá nic
- když pustím první tlačítko odpadne první relé - dál se nic nestane i když je stisknuto druhé - není "prodleva nestisknuto nic" mezi tlačítky - netušíme zda to druhé není v poruše
atd. atd.

PS: programuji VN a VVN terminály co manipulují s odpojovači, vypínači - tam to musí být blbuvzdorné, tak jsem zvyklý na "detailní" zadání (pokud není je to o slovíčkaření - každý má trochu jiné myšlení, způsob vyjadřování atd.), co není psáno neudělám - i kdyby nevím co.
Ale je to tam hezčí - hradýlka OR, AND, XOR, RS, SR, časovače a mnoho dalšího ...