Stránka 1 z 3
Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 18:47
od bobynos
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
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 19:16
od rejze69
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í.
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 19:27
od bobynos
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
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 19:35
od rejze69
Tedy ani while, protože to taky blokuje. Takže:
If(!digitalRead(tlcRed) && digitalRead(ledStart) {
Serial.println (red);
digitalWrite(ledStart;HIGH)
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 19:41
od bobynos
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

Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 19:56
od rejze69
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í.

Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 20:00
od bobynos

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.
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 20:04
od petan
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);
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 20:07
od rejze69
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ýš.
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
Napsal: 27 črc 2018, 20:18
od bobynos
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