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)