Stránka 1 z 2

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

Napsal: 06 říj 2020, 21:44
od Andrews13
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);

}

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

Napsal: 06 říj 2020, 22:19
od gilhad
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

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

Napsal: 07 říj 2020, 16:41
od Andrews13
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);

}

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

Napsal: 07 říj 2020, 18:21
od Andrews13
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
}

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

Napsal: 07 říj 2020, 18:31
od gilhad
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");
}

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

Napsal: 07 říj 2020, 19:24
od Andrews13
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á :)

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

Napsal: 07 říj 2020, 22:01
od pavel1tu
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 ....

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

Napsal: 07 říj 2020, 22:20
od pavel1tu

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/

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

Napsal: 07 říj 2020, 22:55
od Andrews13
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.

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

Napsal: 08 říj 2020, 03:46
od gilhad
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)