Counter to Save to eeprom, then go back in 24 hour's and read eeprom.
What I am looking to do is. In the program I sent in this post.
Is there A way to count the # of times pin[noparse][[/noparse]23] is pushed, save the count each time to the eeprom, and then go back into the eeprom and see how many
times is was pushed. Like in 24 hour's?
Is there A way to count the # of times pin[noparse][[/noparse]23] is pushed, save the count each time to the eeprom, and then go back into the eeprom and see how many
times is was pushed. Like in 24 hour's?
con
_clkmode = xtal1 + pll16x
_xinfreq = 0_500_000
pub Kid
repeat
if ina [noparse][[/noparse]23] == 1
right
pub right
dira[noparse][[/noparse]0..19] := %11111111111111111111
outa[noparse][[/noparse]0..19] := %00000000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %00000000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %10000000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11000000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11100000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11110000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111000000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111100000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111110000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111000000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111100000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111110000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111000000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111100000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111110000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111000000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111100000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111110000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111111000
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111111100
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111111110
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %11111111111111111111
REPEAT WHILE ina[noparse][[/noparse]23] == 1
dira[noparse][[/noparse]0..19] := %11111111111111111111
outa[noparse][[/noparse]0..19] := %11111111111111111111
waitcnt(clkfreq/4 + cnt)
outa[noparse][[/noparse]0..19] := %00000000000000000000

Comments
how many times it was pushed.
You read the last long using i2c.ReadLong(28, $a0, $7ffc) and you can write it using i2c.WriteLong(28, $a0, $7ffc, count).· You should follow the write by a call to WriteWait until it returns a value of zero.· You could use the loop repeat while i2c.WriteWait(28, $a0, $7ffc).
Dave
Post Edited (Dave Hein) : 5/23/2010 3:02:05 AM GMT
On another point you're going to need an accurate way to keep track of 24 hours -- not easy to do when your program is busy looking for button pushes.· That said, you can launch a software RTC into its own coq quite easily; the attached demo shows an easy way to incorporate a software RTC in your programs.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Jon McPhalen
Hollywood, CA
con _clkmode = xtal1 + pll16x _xinfreq = 0_500_000 pub Kid repeat if ina [noparse][[/noparse]23] == 1 right pub right dira[noparse][[/noparse]0..19] := %11111111111111111111 outa[noparse][[/noparse]0..19] := %00000000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %00000000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %10000000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11000000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11100000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11110000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111000000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111100000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111110000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111000000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111100000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111110000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111000000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111100000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111110000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111000000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111100000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111110000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111111000 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111111100 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111111110 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %11111111111111111111 REPEAT WHILE ina[noparse][[/noparse]23] == 1 dira[noparse][[/noparse]0..19] := %11111111111111111111 outa[noparse][[/noparse]0..19] := %11111111111111111111 waitcnt(clkfreq/4 + cnt) outa[noparse][[/noparse]0..19] := %00000000000000000000 con _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 ' _xinfreq = 6_250_000 CLK_FREQ = ((_clkmode - xtal1) >> 6) * _xinfreq MS_001 = CLK_FREQ / 1_000 con #0, REG_MS, REG_SC, REG_MN, REG_HR, REG_DY, REG_RST ' clock registers con #1, HOME, #8, BKSP, TAB, LF, CLREOL, CLRDN, CR, #16, CLS ' PST formmatting control obj term : "fullduplexserial" var long rtc[noparse][[/noparse]6] ' rtc registers long rtcstack[noparse][[/noparse]16] ' stack for rtc interpreter pub main | oldsecs cognew(softrtc, @rtcstack) ' start "background" rtc term.start(31, 30, %0000, 115_200) ' start terminal pause(1) term.tx(CLS) setclock(12, 0, 0) ' just like your vcr repeat term.tx(HOME) term.str(string("The time is... ")) showclock oldsecs := rtc[noparse][[/noparse]REG_SC] repeat until (rtc[noparse][[/noparse]REG_SC] <> oldsecs) ' update on new second pub showclock dec2(rtc[noparse][[/noparse]REG_HR]) term.tx(":") dec2(rtc[noparse][[/noparse]REG_MN]) term.tx(":") dec2(rtc[noparse][[/noparse]REG_SC]) pub dec2(value) if (value < 10) term.tx("0") term.dec(value) pub pause(ms) | t t := cnt - 1088 ' sync with system counter repeat ms waitcnt(t += MS_001) pri reset '' Resets all rtc/timer registers to 0 rtc[noparse][[/noparse]REG_RST]~~ ' -1 as flag to reset registers pri setclock(h, m, s) '' Sets clock registers reset ' prevent odd rollovers pause(2) ' ensure reset done rtc[noparse][[/noparse]REG_HR] := h ' update time registers rtc[noparse][[/noparse]REG_MN] := m rtc[noparse][[/noparse]REG_SC] := s pri softrtc | t0 '' Software RTC '' -- runs in standard "clock" mode '' -- launch with cognew t0 := cnt ' sync to system counter repeat if (rtc[noparse][[/noparse]REG_RST] == -1) ' reset flag? longfill(@rtc, 0, 6) ' yes, clear everything waitcnt(t0 += MS_001) ' wait 1ms if (++rtc[noparse][[/noparse]REG_MS] == 1_000) ' one second? rtc[noparse][[/noparse]REG_MS]~ ' clear ms if (++rtc[noparse][[/noparse]REG_SC] == 60) ' inc secs, check for 60 rtc[noparse][[/noparse]REG_SC]~ ' clear secs if (++rtc[noparse][[/noparse]REG_MN] == 60) ' inc mins, check for 60 rtc[noparse][[/noparse]REG_MN]~ ' clear mins if (rtc[noparse][[/noparse]REG_HR] == 24) ' in hrs, check for 24 rtc[noparse][[/noparse]REG_HR]~~ ' clear hours if (rtc[noparse][[/noparse]REG_DY] < posx) ' days below max? ++rtc[noparse][[/noparse]REG_DY] ' increment else ' else rtc[noparse][[/noparse]REG_DY]~ ' clear data) counted presses (these should be debounced/qualified
b) when a new press is detected, save it to EE (I2C not shown, but there's a lot of code by me and others in ObEx)
c) watched the clock -- when the time rolled over to 00:00:00 you hit 24 hours and you can display our total and do what you will
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Jon McPhalen
Hollywood, CA