Arduino Polska Forum
Zapamiętanie nastawy termostatu - 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: Zapamiętanie nastawy termostatu (/watek-zapami%C4%99tanie-nastawy-termostatu)

Strony: 1 2


Zapamiętanie nastawy termostatu - byniom - 17-12-2015

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.


RE: Zapamiętanie nastawy termostatu - JasQ - 17-12-2015

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


RE: Zapamiętanie nastawy termostatu - byniom - 18-12-2015

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ć ?


RE: Zapamiętanie nastawy termostatu - JasQ - 18-12-2015

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;

}



RE: Zapamiętanie nastawy termostatu - byniom - 18-12-2015

(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


RE: Zapamiętanie nastawy termostatu - baxter12 - 19-12-2015

(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


RE: Zapamiętanie nastawy termostatu - byniom - 20-12-2015

(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.


RE: Zapamiętanie nastawy termostatu - sztapl - 27-12-2015

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.


RE: Zapamiętanie nastawy termostatu - byniom - 27-12-2015

(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.


RE: Zapamiętanie nastawy termostatu - JasQ - 27-12-2015

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);