pamatování proměné i po odeznění podmínky

Andrews13
Příspěvky: 10
Registrován: 12 zář 2020, 21:38
Reputation: 0

pamatování proměné i po odeznění podmínky

Příspěvek od Andrews13 » 06 říj 2020, 21:44

Dobrý den,
jak uděĺám aby se mi pamatovaná proměná nezmenila zpet po odeznení podmínky

např. mam INT přtížení motoru 520 a zastavím motor do proměné uložím 1 že byl motor přetížen. Ale když už není motor přetížen přepíše mi to proměnou na 0. Jak udělám bay si proměná pamatovala nasetovaný stav a nepřepsala jí znovu hodnota?
int SVETLO_ANALOG;
int MOTOR_ANALOG;
int PAMET;

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(2, OUTPUT);
}

void loop() {
SVETLO_ANALOG = (int)(analogRead(A0));
MOTOR_ANALOG = (int)(analogRead(A1));
PAMET = (int)(0);

if (MOTOR_ANALOG < 520) {
}
PAMET = 1;

if (SVETLO_ANALOG > 300 && PAMET == 0) {
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}

if (SVETLO_ANALOG > 400) {
}
PAMET = 0;

Serial.println((String(PAMET) + String(" - PAMET")));
Serial.println((String(SVETLO_ANALOG) + String(" - ANALLOG SVETLO")));
Serial.println((String(MOTOR_ANALOG) + String(" - ANALOG MOTOR")));
delay(2000);

}

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od gilhad » 06 říj 2020, 22:19

Idealne tak, ze tu promennou nastavis pouze pri splneni dotycvne podminky.

Co delas:

Kód: Vybrat vše

if (MOTOR_ANALOG < 520) {  // pokud je splnena podminka
}                          // proved prazdny pblok prikazu (cili neudelej nic a pokracuj)
PAMET = 1;                 // bez ohledu na cokoli nastav promennou
Co bys asi delat chtel:

Kód: Vybrat vše

if (MOTOR_ANALOG < 520) {  // pokud je splnena podminka
     PAMET = 1;            // proved nastaveni promenne
}                          // konec bloku, co se dela pouze pri splneni podminky

obdobne s tou druhou promennou

krom toho:

Kód: Vybrat vše

SVETLO_ANALOG = (int)(analogRead(A0));  // analogRead je int, netreba pretypovavat 
MOTOR_ANALOG = (int)(analogRead(A1)); // totez
PAMET = (int)(0); // 0 je int, netreba pretypovavat. Navic si tu mazes nastaveni te promenne, takze se zapomene
https://www.arduino.cc/reference/en/lan ... nalogread/

takze radeji takto

Kód: Vybrat vše

SVETLO_ANALOG = analogRead(A0);
MOTOR_ANALOG = analogRead(A1);
// PAMET neprenastavujeme

Andrews13
Příspěvky: 10
Registrován: 12 zář 2020, 21:38
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od Andrews13 » 07 říj 2020, 16:41

Dekuji za radu ale stejne to tu 1 pameti nedrží
int SVETLO_ANALOG;
int MOTOR_ANALOG;
int PAMET;

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(2, OUTPUT);
}

void loop() {
SVETLO_ANALOG = analogRead(A0);
MOTOR_ANALOG = analogRead(A1);


if (MOTOR_ANALOG > 520) {
PAMET = 1;
}

if (SVETLO_ANALOG > 300 && PAMET == 0) {
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}



Serial.println((String(PAMET) + String(" - PAMET")));
Serial.println((String(SVETLO_ANALOG) + String(" - ANALLOG SVETLO")));
Serial.println((String(MOTOR_ANALOG) + String(" - ANALOG MOTOR")));
Serial.println(digitalRead(2));

delay(2000);

}

Andrews13
Příspěvky: 10
Registrován: 12 zář 2020, 21:38
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od Andrews13 » 07 říj 2020, 18:21

Ani tento kod mi neuchová stav v proměné nevím neco dělám špatne
#define LED 2
#define TLACITKO 5

bool AktualniStav;
bool MinulyStav = 1;

void setup()
{
pinMode(LED, OUTPUT); // nastaveni pinu 2 jako vystup
pinMode(TLACITKO, INPUT_PULLUP); // nastaveni pinu 5 jako vstup s pull-up rezistorem
}

void loop()
{
AktualniStav = digitalRead(TLACITKO); // nacteni aktualniho stavu tlacitka

if(AktualniStav == 0 && MinulyStav == 1) // je-li ted stisknuto tlacitko
{ // a zaroven predtim nebylo
digitalWrite(LED, !digitalRead(LED)); // zmen hodnotu vystupu
}

MinulyStav = AktualniStav; // uloz aktualni stav tlacitka jako minuly stav
}

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od gilhad » 07 říj 2020, 18:31

Jak se to projevuje, ze ji neudrzi?
Vypise to nekdy ze

1 - PAMET
a po chvili ze
0 - PAMET
?

Problikne LED na pinu 2?

Kdyz upravis setap pridanim prikazu vypisu na konec, objevi se? Jednou? vickrat?

Kód: Vybrat vše

setup(){
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(2, OUTPUT);

Serial.println("Jsem v setupu");
}

Andrews13
Příspěvky: 10
Registrován: 12 zář 2020, 21:38
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od Andrews13 » 07 říj 2020, 19:24

Na chvilku se zastaví ale jak mile pomine podmínka že je motor přetížen tak zase jede. Projevuje ste to že povoluje a zabirá :)

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: pamatování proměné i po odeznění podmínky

Příspěvek od pavel1tu » 07 říj 2020, 22:01

Nepopisuj co to dělá, ale co chceš aby to dělalo.
Pak proberte co to dělá

Zkus si vyrobit vývojový diagram

- jede motor a přetíží se, tak zastavit motor
- kdy ho znova rozjet ?
- popiš všechny proměnné // do komentáře k čemu jsou, co se do nich ukládá

to se týká i toho druhého programu

co používáš za desku ? Asduino nebo ESP ?

PS. kod vkládej do </> ne do citace ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: pamatování proměné i po odeznění podmínky

Příspěvek od pavel1tu » 07 říj 2020, 22:20

Kód: Vybrat vše

#define LED 2
#define TLACITKO 5

bool AktualniStav;
bool MinulyStav = 1;

void setup()
   {
   pinMode(LED, OUTPUT); // nastaveni pinu 2 jako vystup
   pinMode(TLACITKO, INPUT_PULLUP); // nastaveni pinu 5 jako vstup s pull-up rezistorem
   }

void loop()
   {
   AktualniStav = digitalRead(TLACITKO); // nacteni aktualniho stavu tlacitka

   if(AktualniStav == 0 && MinulyStav == 1) // je-li ted stisknuto tlacitko
      { // a zaroven predtim nebylo
      digitalWrite(LED, !digitalRead(LED)); // zmen hodnotu vystupu
      }

   MinulyStav = AktualniStav; // uloz aktualni stav tlacitka jako minuly stav
   delay(200); //proti zakmitum a klepajici se ruce ale musi byt stisknute dele jak 200ms
}
přidej jen to delay - asi se ti klepe ruka nebo má tlačítko zákmity jinak ti to funguje

jde to udělat i bez toho delay (to se nedoporučuje používat - program na něm stojí
https://bastlirna.hwkitchen.cz/arduino- ... -debounce/

další ukázky všeho možného
https://robotika.vosrk.cz/guide/arduino/cs
https://navody.arduino-shop.cz/zaciname-s-arduinem/
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Andrews13
Příspěvky: 10
Registrován: 12 zář 2020, 21:38
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od Andrews13 » 07 říj 2020, 22:55

JE HODNOTA VALUE JA JI NASETUJU NA 1 JAK UDRZÍM JEJÍ HODNOTU NA 1 KDYŽ PODMÍNKA NEPLATÍ?

PROČ SI TU HONOTU NEUDŽÍ.

Ptám se protože by se mi to hodilo ve vice případech.

V bolocích na simaticu pokud neco nasetuju tak to platí do té doby než to vyresetuju nebo nastavím na jinou hodnotu.

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: pamatování proměné i po odeznění podmínky

Příspěvek od gilhad » 08 říj 2020, 03:46

od Andrews13 » 07 říj 2020, 16:41
Tady se nikde do PAMET 0 nenastavuje, takze jakmile se tam da 1, tak uz by tam mela zustat az do vypnuti nebo restartu.
od gilhad » 07 říj 2020, 18:31
tady se pri startu/restartu objevi (mel by objjevit) napis "jsem v setupu"

Pokud se ten napis objevi nekolikrat, tak se ti to arduino restartuje (a pak ma PAMET hodnotu nula dokud se nenastavi) a restartuje (napeti zakolisa) se ti nejspis kvuli vykyvu napeti pri spusteni motoru, nebo necem podobnem. Pak je potreba vyresit lip napajeni (ona vetsina lacinych motorku pri startu vezme na chvilku vyrazne vic, nez co ma pri ustalenem behu, cimz slabsi zdroj napajeni (treba USB) proste neudrzi napeti a na chvilku poklesne a arduinu ta chvilka muze stacit k restartu)

Pokud se napis objevi jen jednou, na zacatku a pak ten vypis PAMET haze obcas jednicky a obcas nuly, tak je neco hodne v neporadku (bud mas jiny program nez tady, nebo vadny chip, co fakt promennou neudrzi)

Odpovědět

Kdo je online

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