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