Vypsaní textu pouze jednou při stisknutém tlačítku
Vypsaní textu pouze jednou při stisknutém tlačítku
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
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
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í.
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
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
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
Tedy ani while, protože to taky blokuje. Takže:
If(!digitalRead(tlcRed) && digitalRead(ledStart) {
Serial.println (red);
digitalWrite(ledStart;HIGH)
If(!digitalRead(tlcRed) && digitalRead(ledStart) {
Serial.println (red);
digitalWrite(ledStart;HIGH)
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
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
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
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
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
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:
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.
Re: Vypsaní textu pouze jednou při stisknutém tlačítku
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ýš.
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
Vyzkoušel jsem v praxi. A ten kód funguje tak, že ledku a text vypíše až potom co tlačítko pustím.petan píše: ↑27 črc 2018, 20:04V 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);
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
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů