Arduino Polska Forum

Pełna wersja: Zapamiętanie nastawy termostatu
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Chciałem zapytać czy jest możliwość aby arduino zapamiętało wprowadzone dane np. termostatu lub innego urządzenia w swojej pamięci ? czy trzeba do tego stosować jakąś pamięć dodatkowa np. 24lc04 lub kartę pamięci ? . Macie jakieś propozycje ? Zależy mi na tym by po zaniku napięcia arduino pamiętało wprowadzony parametr.
można i tak i tak , ale polecam bardziej korzystanie z zewnętrznej pamięci bo ta w arduino ma ograniczoną ilość cykli zapisu około 10k a eeprom miliony
dla mnie to i tak dużo bo będzie zapisana wartość nastawy temperatury czyli np.25 stc, a możesz podać jak to zapisać i odczytać ?
mniej więcej tak ale jak nie widać programu to ciężko dopasować

Kod:
#include <EEPROM.h>

int address = 0;
byte value = 28;
byte zapis = 0;

void setup() {
  
  pinMode(10 , INPUT_PULLUP);   // pin który wyzwoli zapis
  value = EEPROM.read(address); //odczyt eppromu przed rozpoczęciem pracy

}

void loop() {
  
if (digitalRead(10) == LOW ){zapisz();} // funkcja uruchamiająca zapis


}

void zapisz(){ // funkcja zapisu robi to tylko raz później ustawia zmienną zapis na 1
               // i ponowny zapis jest niemożliwy aż do restartu programu
  if ( zapis == 0 )EEPROM.write(address, value);
  
  zapis = 1;

}
(18-12-2015, 02:13)JasQ napisał(a): [ -> ]mniej więcej tak ale jak nie widać programu to ciężko dopasować

Kod:
#include <EEPROM.h>

int address = 0;
byte value = 28;
byte zapis = 0;

void setup() {
 
 pinMode(10 , INPUT_PULLUP);   // pin który wyzwoli zapis
 value = EEPROM.read(address); //odczyt eppromu przed rozpoczęciem pracy

}

void loop() {
 
if (digitalRead(10) == LOW ){zapisz();} // funkcja uruchamiająca zapis


}

void zapisz(){ // funkcja zapisu robi to tylko raz później ustawia zmienną zapis na 1
              // i ponowny zapis jest niemożliwy aż do restartu programu
 if ( zapis == 0 )EEPROM.write(address, value);
 
 zapis = 1;

}

Dzięki Smile
(17-12-2015, 23:33)JasQ napisał(a): [ -> ]można i tak i tak , ale polecam bardziej korzystanie z zewnętrznej pamięci bo ta w arduino ma ograniczoną ilość cykli zapisu około 10k a eeprom miliony

Można korzystać z wewnętrznej pamięci, ale niezbyt często. Np wyłącznie podczas zaniku zasilania. Warto dorobić układ wykrywania braku zasilania. Jest to bardzo proste. A mocno upraszcza programowanie. Do budowy potrzebny jest tylko kondensator, dioda oraz jedno wejście analogowe.

Bartek
(19-12-2015, 20:12)baxter12 napisał(a): [ -> ]
(17-12-2015, 23:33)JasQ napisał(a): [ -> ]można i tak i tak , ale polecam bardziej korzystanie z zewnętrznej pamięci bo ta w arduino ma ograniczoną ilość cykli zapisu około 10k a eeprom miliony

Można korzystać z wewnętrznej pamięci, ale niezbyt często. Np wyłącznie podczas zaniku zasilania. Warto dorobić układ wykrywania braku zasilania. Jest to bardzo proste. A mocno upraszcza programowanie. Do budowy potrzebny jest tylko kondensator, dioda oraz jedno wejście analogowe.

Bartek

W moim zamysle jest to żeby ten zapis służył do wprowadzenia danej temperatury raz na jakiś czas, jako korekta np.  . dczyt tej wprowadzeniej temperatury następować będzie tylko po uruchomieniu urządzenie lub po zaniku napięcia.
Najprościej wklej skecz i powiedz co chcesz żeby zapamiętywał.
Najłatwiej to użyć funkcji EEPROM.

EEPROM.write(addr, val);

gdzie addr to która z kolei wartość do zapamiętania, np. jeżeli chcesz żeby arduino zapamiętało tylko jedną wartość (np. temperaturę) zapisujesz 0 , jeżeli chcesz żeby zapamiętało następną wartość np. czas zapisujesz 1 następna wartość np. wilgotność, zapisujesz 2 itd.

val to zmienna którą chcesz zapisać. Zależnie od twojego skeczu wpisujesz co chcesz. np . masz gdzieś takie coś

float temp = sensors.readTemperature(sensorAddress);

i chcesz żeby arduino to zapamiętało to wpisujesz

EEPROM.write(0, temp);

oczywiście musisz na początku skeczu zainicjować zmienną temp i wklepać bibliotekę eeprom

#include <EEPROM.h>

żeby arduino odczytało wartość w void setup wpisujesz
temp = EEPROM.read(0);

Chyba o to ci chodziło? Prościej nie można.
(27-12-2015, 01:24)sztapl napisał(a): [ -> ]Najprościej wklej skecz i powiedz co chcesz żeby zapamiętywał.
Najłatwiej to użyć funkcji EEPROM.

EEPROM.write(addr, val);

gdzie addr to która z kolei wartość do zapamiętania, np. jeżeli chcesz żeby arduino zapamiętało tylko jedną wartość (np. temperaturę) zapisujesz 0 , jeżeli chcesz żeby zapamiętało następną wartość np. czas zapisujesz 1 następna wartość np. wilgotność, zapisujesz 2 itd.

val to zmienna którą chcesz zapisać. Zależnie od twojego skeczu wpisujesz co chcesz. np . masz gdzieś takie coś

float temp = sensors.readTemperature(sensorAddress);

i chcesz żeby arduino to zapamiętało to wpisujesz

EEPROM.write(0, temp);

oczywiście musisz na początku skeczu zainicjować zmienną temp i  wklepać bibliotekę eeprom

#include <EEPROM.h>

żeby arduino odczytało wartość  w void setup wpisujesz
 temp = EEPROM.read(0);

Chyba o to ci chodziło? Prościej nie można.
Tak dokładnie.
Oczywiście w ten sposób zapiszesz tylko zmienną "byte lub char" nie zadziała ze zmienną " float , int , long "

zapis dla int , float używamy 2 bajtów

EEPROM.write(1, highByte(wartosc_int) );
EEPROM.write(0, lowByte(wartosc_int) );

odczyt

wartosc_int = (EEPROM.read(1)<<8)+EEPROM.read(0);
Stron: 1 2