for loop assistance reading an eeprom please. [SOLVED]
since taking 3 samples, had divide 3, correct call @ bottom. sorry not thinking morning. peace all.
im trying read eeprom thats sampling, 0 address pointer @ current place in sampling routine, , return sampling left off. im confused bit, guidance appreciated thank guys/gals. loop below, complete code below that. thanks. (breadboard atmega328p w/ crystal, 1307, atmel 2 wire eeprom, lm34, rht03)
complete sketch
im trying read eeprom thats sampling, 0 address pointer @ current place in sampling routine, , return sampling left off. im confused bit, guidance appreciated thank guys/gals. loop below, complete code below that. thanks. (breadboard atmega328p w/ crystal, 1307, atmel 2 wire eeprom, lm34, rht03)
code: [select]
void eepromdump(){
display.cleardisplay();
display.settextsize(1);
display.settextcolor(white);
display.setcursor(0,0);
display.println("dumping eeprom");
display.display();
unsigned int eepointer=0;
for (int i=0;i<pointer;i++){
wire.begintransmission(addr);
wire.write(eepointer>>8);
wire.write(eepointer & 0xff);
wire.endtransmission();
wire.requestfrom(addr,3);
time1=wire.read();
time2=wire.read();
temp=wire.read();
// eepointer=eepointer+3;
serial.print(time1,dec);
serial.print(":");
serial.print(time2,dec);
serial.print(",");
serial.println(temp,dec);
}
gettime();
}
complete sketch
code: [select]
/*breadboard setup*/
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <adafruit_ssd1306.h>
#include <adafruit_gfx.h>
#include <wire.h>
#include <rtclib.h>
#include "dht.h"
#define addr 0x50
#define oled_reset 8
#define dhtpin 7
#define dhttype dht22
//=====================================
unsigned int pointer=0;
long previousmillis = 0;
long interval = 59500;
float a=0;
float b=0;
byte time1,time2,temp;
int dumpbutton=6;
int dumpval;
//=====================================
rtc_ds1307 rtc;
adafruit_ssd1306 display(oled_reset);
dht dht(dhtpin, dhttype);
//=====================================
void setup () {
display.begin(ssd1306_switchcapvcc, 0x3c); // initialize i2c addr 0x3c (for 128x32)
display.cleardisplay();
serial.begin(9600);
wire.begin();
rtc.begin();
dht.begin();
pinmode(dumpbutton,input);
pinmode(13,output);
display.cleardisplay();
display.settextsize(1);
display.settextcolor(white);
display.setcursor(0,0);
display.print("mission in 1 minute");
display.display();
}
//=======================================
void loop()
{
dumpval=digitalread(dumpbutton);
if (pointer==0xf96){ //addr 3990
endrun();
}
if (dumpval==high){
eepromdump();
}
unsigned long currentmillis = millis();
if(currentmillis - previousmillis > interval) {
previousmillis = currentmillis;
gettime();
}
}
//=======================================
void gettime(){
display.cleardisplay();
a=analogread(0);
a=analogread(0);
b=(5.0*a*100.0)/1023.0;
int c=b+0.5;
display.settextsize(1);
display.settextcolor(white);
display.setcursor(0,0);
display.print(c);
display.println(" temperature");
datetime = rtc.now();
display.print(now.hour(), dec);
display.print(':');
display.print(now.minute(), dec);
display.println(" time");
float h = dht.readhumidity();
float t = dht.readtemperature();
if (isnan(t) || isnan(h)) {
display.print("failed read dht");
}
else {
display.print(h);
display.println(" humidity");
display.print(t*1.8+32);
display.print(" temp2");
display.display();
}
wire.begintransmission(addr);
wire.write(pointer >> 8); // left-part of pointer address
wire.write(pointer & 0xff); // , right
wire.write(now.hour());
wire.write(now.minute());
wire.write(c%100);
wire.endtransmission();
pointer=pointer+3;
// serial.print(now.hour(), dec);
// serial.print(':');
// serial.print(now.minute(), dec);
// serial.print(',');
// serial.println(c%100);
digitalwrite(13,high);
delay(500);
digitalwrite(13,low);
}
//=========================================
void eepromdump(){
display.cleardisplay();
display.settextsize(1);
display.settextcolor(white);
display.setcursor(0,0);
display.println("dumping eeprom");
display.display();
unsigned int eepointer=0;
//========================================================
for (int i=0;i<pointer;i++){ //<<pointer=eeprom current addr
wire.begintransmission(addr);
wire.write(eepointer>>8);
wire.write(eepointer & 0xff);
wire.endtransmission();
wire.requestfrom(addr,3);
time1=wire.read();
time2=wire.read();
temp=wire.read();
eepointer=eepointer+3;
serial.print(time1,dec);
serial.print(":");
serial.print(time2,dec);
serial.print(",");
serial.println(temp,dec);
}
//===========================================================
gettime();
}
//=========================================
void endrun(){
display.cleardisplay();
display.setcursor(0,0);
display.println("endrun");
display.print("entering sleep mode...");
display.display();
set_sleep_mode(sleep_mode_pwr_down);
sleep_enable();
sleep_mode();
//sleep_disable();
}
/*22 hours @ 3 samples per minute*/
code: [select]
for (int i=0;i<pointer/3;i++){
//<<solved
quote
float a=0;
just newbie question:
does make difference if write float a=0.0; instead?
thx
Arduino Forum > Using Arduino > Programming Questions > for loop assistance reading an eeprom please. [SOLVED]
arduino
Comments
Post a Comment