Vypsaní textu pouze jednou při stisknutém tlačítku

bobynos
Příspěvky: 10
Registrován: 09 bře 2018, 22:25
Reputation: 0

Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od bobynos » 27 črc 2018, 18:47

Zdravím,
s Arduinem začínám. A narazil jsem na problém pro někoho možná jednoduchý, ale já už vážně nevím.

Kód:
const int tlcRed = 2;
const int tlcGreen = 3;
const int ledErr = 4;
const int ledStart = 5;

void setup()
{
pinMode(tlcRed, INPUT);
pinMode(tlcGreen, INPUT);
pinMode(ledStart, OUTPUT);
pinMode(ledErr, OUTPUT);
Serial.begin(9600);
Serial.println("Komunikace spustena");
}

void loop()
{
if (digitalRead(tlcRed) == LOW) {
digitalWrite(ledStart, HIGH);
Serial.println("RED");
}
else { digitalWrite(ledStart, LOW); }


if (digitalRead(tlcGreen) == LOW) {
digitalWrite(ledErr, HIGH);
Serial.println("GREEN");
}
else { digitalWrite(ledErr, LOW); }

}

To co potřebují aby se mi rozsvítila ledka, ale do serial monitoru se vypsal text RED pouze jednou. To stejné když zmáčnu druhé tlačitko, kde vypíše pouze jednou text GREEN, ale ledka bude pořád svítit dokud bude stisknuto tlačítko.


Moc díky

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od rejze69 » 27 črc 2018, 19:16

A bude to dělat jen tohle?
Jestli ano měl by stačit zařadit cyklus while (digitalRead(tlc---)) pod Serial.println ---
Ve větším projektu by to ale nebylo ideální.

bobynos
Příspěvky: 10
Registrován: 09 bře 2018, 22:25
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od bobynos » 27 črc 2018, 19:27

Ano ve výsledku budu zjišťovat stav na dvou čidlech. Teď pro naprogramování mám nahrazeno tlačítky.
Teoreticky ani nepotřebuji rozsvítit ledku, ale jde mi o to, že když tlačítko(čidlo) bude aktvní např. minutu aby to vypsalo pouze jednou a né aby každou sekundu vypsalo několik řádků. funkce delay nepřipadá v úvahu. Program musí pořád zjištovat stavy a podle toho vypsat bude RED nebo GREEN.
Nikdy nebudou obě tlačítka stisknuty zároveň.
Jestli se to dá z toho pochopit :)

Díky

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od rejze69 » 27 črc 2018, 19:35

Tedy ani while, protože to taky blokuje. Takže:
If(!digitalRead(tlcRed) && digitalRead(ledStart) {
Serial.println (red);
digitalWrite(ledStart;HIGH)

bobynos
Příspěvky: 10
Registrován: 09 bře 2018, 22:25
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od bobynos » 27 črc 2018, 19:41

const int tlcRed = 2;
const int tlcGreen = 3;
const int ledErr = 4;
const int ledStart = 5;

void setup()
{
pinMode(tlcRed, INPUT);
pinMode(tlcGreen, INPUT);
pinMode(ledStart, OUTPUT);
pinMode(ledErr, OUTPUT);
Serial.begin(9600);
Serial.println("Komunikace spustena");
}

void loop()
{
if (!digitalRead(tlcRed) && digitalRead(ledStart)) {
Serial.println("RED");
digitalWrite(ledStart, HIGH);
}
}



Toto neudělá vůbec nic :)

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od rejze69 » 27 črc 2018, 19:56

Já to nestihl dopsat a možná tam mám chybu píšu to na mobilu a jsem v práci kde jsem měl najednou plny sporák pánví. :D

bobynos
Příspěvky: 10
Registrován: 09 bře 2018, 22:25
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od bobynos » 27 črc 2018, 20:00

:D tak to díky za odpovědi, ale zatím jsme se moc nepohnuli :) A vše co zkouším nepracuje, tak jak bych si představoval.

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od petan » 27 črc 2018, 20:04

V podstatě chceš hlídat náběžnou hranu signálu. Koukni sem: https://www.mylms.cz/text-kusy-kodu-k-a ... _detection

Tam je ten kód v podstatě hotovej. Jenom místo příkazu "digitalWrite(13, HIGH)" a "digitalWrite(13,LOW)" dáš "Serial.println("RED");" a "Serial.println("GREEN");". Samozřejmě, že si v Setupu zapneš komunikaci.

A LEDku si dobastlíš tímhle kódem:

Kód: Vybrat vše

digitalWrite(xx, presentInput11);	//místo xx zadej číslo výstupu, kde je připojena LEDka
digitalWrite(xx, presentInput12);
Naposledy upravil(a) petan dne 27 črc 2018, 20:09, celkem upraveno 1 x.

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od rejze69 » 27 črc 2018, 20:07

Princip byl ten, že if tlačítko zapnuté && výstup led vypnutý
Potom serial.println
Potom zapneš výstup led
Tím pádem led svítí a v dalším průchodu to if neplatí protože výstup led je zapnutý a println tedy neorběhne.
Potom if tlačítko vypnuté vypni výstup led.
Já to na mobilu nevidim celý a jak furt švenkuju tak píšu ve spěchu chyby.
Zkus tedy převést na kód to co máš výš.

bobynos
Příspěvky: 10
Registrován: 09 bře 2018, 22:25
Reputation: 0

Re: Vypsaní textu pouze jednou při stisknutém tlačítku

Příspěvek od bobynos » 27 črc 2018, 20:18

petan píše:
27 črc 2018, 20:04
V podstatě chceš hlídat náběžnou hranu signálu. Koukni sem: https://www.mylms.cz/text-kusy-kodu-k-a ... _detection

Tam je ten kód v podstatě hotovej. Jenom místo příkazu "digitalWrite(13, HIGH)" a "digitalWrite(13,LOW)" dáš "Serial.println("RED");" a "Serial.println("GREEN");". Samozřejmě, že si v Setupu zapneš komunikaci.

A LEDku si dobastlíš tímhle kódem:

Kód: Vybrat vše

digitalWrite(xx, presentInput11);	//místo xx zadej číslo výstupu, kde je připojena LEDka
digitalWrite(xx, presentInput12);
Vyzkoušel jsem v praxi. A ten kód funguje tak, že ledku a text vypíše až potom co tlačítko pustím.

Když dám příklad pouze s jednim čidlem(tlačítkem).
Potřebuji hned jak stisknu tlačítko vypsat text a když ho pustím(změna stavu) vypíšu taky text nebo udělám něco.

jinak moc dííky

Odpovědět

Kdo je online

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