2015-08-26 8 views
0

Я хочу написать время, в которое кнопка была включена или выключена.Запись массивов EEPROM на Arduino

Каждый раз, когда кто-то включает выключатель, Arduino будет хранить эту информацию.

ответ

0
#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 перезапускается.