Arduino Polska Forum
Jak zrealizować zapamiętanie wartości parametru - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Jak zrealizować zapamiętanie wartości parametru (/watek-jak-zrealizowa%C4%87-zapami%C4%99tanie-warto%C5%9Bci-parametru)



Jak zrealizować zapamiętanie wartości parametru - jack1987 - 24-11-2017

W czasie nauki Arduino zaciąłem się na pewnym zadaniu.

Jak zapamiętać wartość ciągle zmieniającego się parametru aby wyświetlać jego stan w chwili naciśnięcia przycisku??


AKTUALNE - ma się zmieniać odliczając w dół co 1
ZAPAMIETANE - w chwili naciśnięcia przycisku na pin 5 ma zapamiętać to co było wyświetlane jako "Aktualne" i wyświetlać jako "Zapamiętane", przy ponownym naciśnięciu przycisku wyświetlana wartość "Zapamiętana" ma być nadpisywana na nową.

Poniżej kod treningowy.
Kod:
#include <SoftwareSerial.h>
int inPin = 5;


SoftwareSerial mySerial(10, 11); // RX, TX

int zmienna1 = 1000;
int zmienna2;

void setup()
{
 Serial.begin(9600);
 pinMode(inPin, INPUT);  
}
void loop() {
 
 zmienna2 = zmienna1--;
 
while (inPin = LOW);
{
Serial.print("AKTUALNE     ");
Serial.println(zmienna1);
Serial.print("ZAPAMIETANE  ");
Serial.println(zmienna2);
Serial.println("---------------------");
}
delay(500);

}



RE: Jak zrealizować zapamiętanie wartości parametru - krn78 - 24-11-2017

Wprowadź nową zmienną o nazwie zapamietane:
Kod:
int pamiec;

void setup(){}

void loop(){}
Potem, w momencie wciśnięcia przycisku... przy okazji, jeśli dla przycisku stosujesz pętle while, wtedy kod w pętli będzie wykonywał się przez cały czas, jeśli przycisk będzie wciśnięty przez dłuższy czas. Zamiast tego proponuję warunek if. Druga rzecz, że jeden znak równości oznacza przypisanie, natomiast podwójny - porównanie. Poniżej cały kod, poprawiony już:
Kod:
#include <SoftwareSerial.h>

int inPin = 5;
int licznik = 1000;
int pamiec=licznik;

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
Serial.begin(9600);
pinMode(inPin, INPUT_PULLUP);  
}

void loop()
{
licznik--;
if (digitalRead(inPin) == LOW)
{
Serial.print("AKTUALNE     ");
Serial.println(licznik);
Serial.print("ZAPAMIETANE  ");
Serial.println(pamiec);
Serial.println("---------------------");
pamiec=licznik;
while(digitalRead(intPin)==LOW){}
}
delay(500);
}

Zrobiłeś mnóstwo błędów. To w ogóle działało? Smile Kompilować, to się kompiluje. Przy okazji, podepnij przycisk do masy, ale chyba to już zrobiłeś, skoro przyrównujesz wartość LOW.


RE: Jak zrealizować zapamiętanie wartości parametru - jack1987 - 27-11-2017

Wiem że popełniam błędy, każdy mi mówi czego nie robićSmile jak u EdisonaBig Grin
krn78 bardzo dziękuje za podpowiedź i kod, jednak muszę przyznać że nie do końca o to chodziłoSad

Chciałbym otrzymać coś takiego, wyświetlanego stale:
"AKTUALNE     999
ZAPAMIETANE  wartosc zapamietana - wyswietlana caly czas, ta sama do czasu kolejnego nacisniecia przycisku
---------------------
AKTUALNE     998
ZAPAMIETANE  wartosc zapamietana - wyswietlana caly czas, ta sama do czasu kolejnego nacisniecia przycisku
---------------------
i tak dalej.
Kod który Napisałeś wyświetla to o co mi chodzi, ale tylko w chwili gdy trzymam przycisk, co zrobić żeby zapamiętana wartość , wyświetlała się cały czas??

Na zasadzie:

Aktualne- 1000
Zapamiętane - brak
Aktualne- 999
Zapamiętane - brak
=> naciskam i puszczam przycisk i od tej pory aż do czasu ponownego naciśnięcia:
Aktualne- 998
Zapamiętane - 999
Aktualne- 997
Zapamiętane - 999
=> ponownie naciskam przycisk
Aktualne- 996
Zapamiętane - 997
Aktualne- 995
Zapamiętane - 997
Aktualne- 994
Zapamiętane - 997
Aktualne- 993
Zapamiętane - 997
itd

Tak jakby były dwie pętle, jedna cały czas odlicza i pokazuje wartość,  a druga zwalniana przyciskiem pokazuje cały czas wartość z chwili naciśnięcia przycisku.

Coś w stylu:

Kod:
#include <SoftwareSerial.h>

int inPin = 5;
int licznik = 1000;
int pamiec=licznik;

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
Serial.begin(9600);
pinMode(inPin, INPUT_PULLUP);  
}

void loop()
{
licznik--;
delay(500);
if (digitalRead(inPin) == LOW)                  
 {
 Serial.print("AKTUALNE     ");
 Serial.println(licznik);
 Serial.print("ZAPAMIETANE  ");
 Serial.println(pamiec);
 Serial.println("---------------------");
 }

else (digitalRead(inPin) == HIGH);
 {
 Serial.print("AKTUALNE     ");
 Serial.println(licznik);
 Serial.print("ZAPAMIETANE  ");
 Serial.println("wartosc zapamietana - wyswietlana caly czas, ta sama do czasu kolejnego nacisniecia przycisku");       // wartosc niezmienna z pamieci
 Serial.println("---------------------");
 }
pamiec=licznik;
while(digitalRead(inPin)==LOW){}
}



RE: Jak zrealizować zapamiętanie wartości parametru - krn78 - 01-12-2017

(27-11-2017, 17:33)jack1987 napisał(a): Kod który Napisałeś wyświetla to o co mi chodzi, ale tylko w chwili gdy trzymam przycisk, co zrobić żeby zapamiętana wartość , wyświetlała się cały czas??
Musisz po prostu przenieść elementy wyświetlające poza warunek naciśnięcia przycisku Smile
Kod:
#include <SoftwareSerial.h>

int inPin = 5;
int licznik = 1000;
int pamiec=1001;

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
Serial.begin(9600);
pinMode(inPin, INPUT_PULLUP);  
}

void loop()
{
Serial.print("AKTUALNE     ");
Serial.println(licznik);
Serial.print("ZAPAMIETANE  ");
if(pamiec>1000){
Serial.println("---");
} else {
Serial.println(pamiec);}
Serial.println("---------------------");

if (digitalRead(inPin) == LOW)
{
pamiec=licznik;
while(digitalRead(intPin)==LOW){}
}
delay(500);
licznik--;
}

Tak to chyba zadziała. Piszę cały czas z pamięci, więc mogą być jakieś błędy składniowe.


RE: Jak zrealizować zapamiętanie wartości parametru - jack1987 - 07-12-2017

heh proste i działająceSmile a ja już zaczynałem kombinować z eeprom.
dzięki