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)

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

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62