Я хочу написать время, в которое кнопка была включена или выключена.Запись массивов EEPROM на Arduino
Каждый раз, когда кто-то включает выключатель, Arduino будет хранить эту информацию.
Я хочу написать время, в которое кнопка была включена или выключена.Запись массивов EEPROM на Arduino
Каждый раз, когда кто-то включает выключатель, Arduino будет хранить эту информацию.
#include <EEPROM.h> // library to access the onboard EEPROM
const int debounceTime = 15000; // debounce time in microseconds
int buttonPin = 5; // pushbutton connected to digital pin 5
int eeAddress = 0; // Address in the eeprom to store the data.
volatile unsigned long time; // variable to store the time since the program started
volatile boolean timeRecorded = false; // used to know when to save value
volatile unsigned long last_Rising; // used to debounce button press
void setup()
{
pinMode(buttonPin, INPUT); // sets the digital pin 5 as input
attachInterrupt(buttonPin, debounce, RISING);
}
void loop()
{
// Only want write when a time is saved
if(valueRecorded)
{
EEPROM.put(eeAddress, time);
valueRecorded = false;
}
}
void debounce()
{
if((micros() - last_Rising) >= debouncing_time)
{
getTime(); // call actual method to fetch and save time
last_Rising = micros();
}
}
void getTime()
{
time = millis();
valueRecorded = true;
}
Этот ответ делает следующие предположения:
-An Arduino Uno используется.
-Максимальный переключатель (или кнопка) подключен к цифровому выходу 5 таким образом, что к выводу 5 будет применен сигнал 5v, когда переключатель находится в положении «включено», и сигнал 0v будет применен к выходу 5, когда переключатель находится в положении «выключено».
-Ваш цель состоит в том, чтобы записать на борт эпром время, когда кнопка изменила состояние в последний раз, когда оно произошло.
Этот код использует прерывание, чтобы перехватить переход от «off» к «on». Механическая природа коммутаторов требует дедуцирования ввода (https://en.wikipedia.org/wiki/Switch#Contact_bounce).
Для считывания значения из eeprom вы также использовали бы EEPROM.get(eeAddress, time)
, это положило бы значение, сохраненное в eeprom в переменной time
.
Этот код также не содержит положений, касающихся фактического времени календаря. На игровой площадке Arduino есть временная библиотека (http://playground.arduino.cc/code/time), хотя она устарела и устарела. Библиотека «Время» связана с этой страницей и имеет документацию о том, как ее использовать для обеспечения времени календаря, однако время должно быть установлено и синхронизировано каждый раз, когда Arduino перезапускается.