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í
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í
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 ...