OK, Some great help so far I have gotten this much running
/*
* Q(1-2) - (Q1) Memory Load (Q2) RTC - Memory Read
*/
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // This is the I2C address
// Global Variables
int command = 0; // This is the command char, in ascii form, sent from the serial port
byte zero;
int state = 50; // State machine variable
int counter = 4; // Master counter variable
int magnum1 = 99; // dummy var
int magnum2 = 99; // dummy var
void setup() {
Wire.begin(); // join i2c bus
Serial.begin(57600);
zero=0x00; // not sure what this is for
}
void loop() {
if (Serial.available()) { // Look for char in serial que and process if found
command = Serial.read();
if (command == 81 || command == 113) { //If command = "Qq" RTC1307 Memory Functions
delay(100);
if (Serial.available()) {
command = Serial.read();
if (command == 49) { //If command = "1" load data to RAM
Wire.beginTransmission(DS1307_I2C_ADDRESS); // 255 will be the init value and 0 will be considered
Wire.write(32); // Set the register pointer to before data location
Wire.write(magnum1); // Write magic number before storing data
Wire.write(state); // Store State variable
Wire.write(counter >> 8); // writes the high byte of counter
Wire.write(counter & 0xFF); // writes the low byte of counter
Wire.write(magnum2); // Write magic number after storing data
Wire.endTransmission();
Serial.println("Data Stored");
}
else if (command == 50) { //If command = "2" Read data from RAM
Serial.println("Begin Read");
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(zero); // not sure what this is for
Wire.endTransmission();
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0x20); // not sure what this is doing
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 32); // Set pointer to the first byte of data
magnum1 = (Wire.read()); //magic number written before data write
state = (Wire.read()); // Read state data
counter = (Wire.read() << 8) + Wire.read(); // Read first byte shift left read second byte
magnum2 = (Wire.read()); // Read Magic number written after data write
Serial.print(" Magic Number = ");
Serial.println(magnum1);
Serial.print(" State = ");
Serial.println(state);
Serial.print(" Counter = ");
Serial.println(counter);
Serial.print(" Magic Number = ");
Serial.println(magnum2);
Serial.println(" RTC1307 Dump end");
}
}
}
}
command = 0; // reset command
delay(100);
}
//********************************
now to figure out how to generate a random magic number
The random() function will return a pseudo-random number. For most purposes, that is good enough. The whole topic of true random numbers has been beaten to death here, so I won't go into all that you have to do to get true random numbers. Or, how to properly seed the random number generator.
The example code uses noise from an unused analog pin seed the random() function. I think that will be good enough. My application does not require TRUE random numbers. The repeating pattern would really be good enough.
Now enter maximum weirdness .
I took the older code and turned it into a couple of functions. I swear it worked last night very late. At work today this code froze at the uploading point and made my serial programming port unreachable. I determined that the ReadRTCRAM() function is to blame. Does this make any sense to anybody
/*
* Q(1-2) - (Q1) Memory Load (Q2) RTC - Memory Read
*/
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // This is the I2C address
// Global Variables
long randNumber;
int command = 0; // This is the command char, in ascii form, sent from the serial port
byte zero;
int magnum1 = 90; // dummy var
int magnum2 = 9; // dummy var
int state = 96; // State machine variable
int counter = 255; // Master counter variable
void setup() {
randomSeed(4);
Wire.begin(); // join i2c bus
Serial.begin(57600);
zero=0x00; // not sure what this is for
}
void loop() {
if (Serial.available()) { // Look for char in serial que and process if found
command = Serial.read();
if (command == 81 || command == 113) { //If command = "Qq" RTC1307 Memory Functions
delay(100);
if (Serial.available()) {
command = Serial.read();
if (command == 49) { //If command = "1" load data to RAM
WriteRTCRAM();
}
else if (command == 50) { //If command = "2" Read data from RAM
ReadRTCRAM();
}
}
}
}
command = 0; // reset command
delay(100);
}
//********************************
void WriteRTCRAM(){
randNumber = random(250);
Serial.println(randNumber);
Wire.beginTransmission(DS1307_I2C_ADDRESS); // 255 will be the init value and 0 will be considered
Wire.write(32); // Set the register pointer to before data location
Wire.write(randNumber); // Write magic number before storing data
Wire.write(state); // Store State variable
Wire.write(counter >> 8); // writes the high byte of counter
Wire.write(counter & 0xFF); // writes the low byte of counter
Wire.write(randNumber); // Write magic number after storing data
Wire.endTransmission();
Serial.println("Data Stored");
}
//********************************
void ReadRTCRAM(){
Serial.println("Begin Read");
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(zero); // not sure what this is for
Wire.endTransmission();
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0x20); // not sure what this is doing
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 32); // Set pointer to the first byte of data
magnum1 = (Wire.read()); //magic number written before data write
state = (Wire.read()); // Read state data
counter = (Wire.read() << 8) + Wire.read(); // Read first byte shift left read second byte
magnum2 = (Wire.read()); // Read Magic number written after data write
Serial.print(" Magic Number = ");
Serial.println(magnum1);
Serial.print(" State = ");
Serial.println(state);
Serial.print(" Counter = ");
Serial.println(counter);
Serial.print(" Magic Number = ");
Serial.println(magnum2);
Serial.println(" RTC1307 Dump end");
if (magnum1 = magnum2){
Serial.print (" Write Error!!!");
}
}
if (command == 'Q' || command == 'q') { // No comment needed; its obvious what to type
magnum1 = (Wire.read()); //magic number written before data write
state = (Wire.read()); // Read state data
counter = (Wire.read() << 8) + Wire.read(); // Read first byte shift left read second byte
magnum2 = (Wire.read()); // Read Magic number written after data write
(What's) (with) (all) (the) (parentheses) (?)
if (magnum1 = magnum2){
Yeah, right. An assignment in the middle of an if statement...
Wire.write(zero); // not sure what this is for
Wire.write(0x20); // not sure what this is doing
Ok np but this is just temp code to get it running
magnum1 = (Wire.read()); //magic number written before data write
state = (Wire.read()); // Read state data
counter = (Wire.read() << 8) + Wire.read(); // Read first byte shift left read second byte
magnum2 = (Wire.read()); // Read Magic number written after data write
(What's) (with) (all) (the) (parentheses) (?)
Ok fixed
if (magnum1 = magnum2){
Yeah, right. An assignment in the middle of an if statement...
Ah this is supposed to be
[code]
if (magnum1 != magnum2){
[/code]
Wire.write(zero); // not sure what this is for
Wire.write(0x20); // not sure what this is doing
Don't you think you should figure these out?
Well being new to the TWI I dont fully understand but I did find
Issue 527 : Stream-based Wire library doesn't accept zero
and the fix which I used.
and still after all of this I still cannot get this to upload unless I REM out the If statement.
/*
* Q(1-2) - (Q1) Memory Load (Q2) RTC - Memory Read
*/
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // This is the I2C address
// Global Variables
long randNumber;
int command = 0; // This is the command char, in ascii form, sent from the serial port
byte zero;
int state = 96; // State machine variable
int counter = 255; // Master counter variable
int magnum1 = 90; // dummy var
int magnum2 = 9; // dummy var
void setup() {
randomSeed(analogRead(0));
Wire.begin(); // join i2c bus
Serial.begin(57600);
zero=0x00; // not sure what this is for
}
void loop() {
if (Serial.available()) { // Look for char in serial que and process if found
command = Serial.read();
if (command == 'Q' || command == 'q') {
delay(100);
if (Serial.available()) {
command = Serial.read();
if (command == 49) { //If command = "1" load data to RAM
WriteRTCRAM();
}
else if (command == 50) { //If command = "2" Read data from RAM
ReadRTCRAM();
}
}
}
}
command = 0; // reset command
delay(100);
}
//********************************
void WriteRTCRAM(){
randNumber = random(250);
Serial.println(randNumber);
Wire.beginTransmission(DS1307_I2C_ADDRESS); // 255 will be the init value and 0 will be considered
Wire.write(32); // Set the register pointer to before data location
Wire.write(randNumber); // Write magic number before storing data
Wire.write(state); // Store State variable
Wire.write(counter >> 8); // writes the high byte of counter
Wire.write(counter & 0xFF); // writes the low byte of counter
Wire.write(randNumber); // Write magic number after storing data
Wire.endTransmission();
Serial.println("Data Stored");
}
void ReadRTCRAM(){
Serial.println("Begin Read");
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(zero); // not sure what this is for
Wire.endTransmission();
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0x20); // not sure what this is doing
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 32); // Set pointer to the first byte of data
magnum1 = Wire.read(); //magic number written before data write
state = Wire.read(); // Read state data
counter = Wire.read() << 8 + Wire.read(); // Read first byte shift left read second byte
magnum2 = Wire.read(); // Read Magic number written after data write
Serial.print(" Magic Number = ");
Serial.println(magnum1);
Serial.print(" State = ");
Serial.println(state);
Serial.print(" Counter = ");
Serial.println(counter);
Serial.print(" Magic Number = ");
Serial.println(magnum2);
Serial.println(" RTC1307 Dump end");
if (magnum1 != magnum2){
Serial.print (" Write Error!!!");
}
}
This compiles but will not upload
/*
* Q(1-2) - (Q1) Memory Load (Q2) RTC - Memory Read
*/
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // This is the I2C address
// Global Variables
long randNumber;
int command = 0; // This is the command char, in ascii form, sent from the serial port
byte zero;
int state = 96; // State machine variable
int counter = 255; // Master counter variable
int magnum1 = 90; // dummy var
int magnum2 = 9; // dummy var
void setup() {
randomSeed(analogRead(0));
Wire.begin(); // join i2c bus
Serial.begin(57600);
zero=0x00; // not sure what this is for
}
void loop() {
if (Serial.available()) { // Look for char in serial que and process if found
command = Serial.read();
if (command == 'Q' || command == 'q') {
delay(100);
if (Serial.available()) {
command = Serial.read();
if (command == 49) { //If command = "1" load data to RAM
WriteRTCRAM();
}
else if (command == 50) { //If command = "2" Read data from RAM
ReadRTCRAM();
}
}
}
}
command = 0; // reset command
delay(100);
}
//********************************
void WriteRTCRAM(){
randNumber = random(250);
Serial.println(randNumber);
Wire.beginTransmission(DS1307_I2C_ADDRESS); // 255 will be the init value and 0 will be considered
Wire.write(32); // Set the register pointer to before data location
Wire.write(randNumber); // Write magic number before storing data
Wire.write(state); // Store State variable
Wire.write(counter >> 8); // writes the high byte of counter
Wire.write(counter & 0xFF); // writes the low byte of counter
Wire.write(randNumber); // Write magic number after storing data
Wire.endTransmission();
Serial.println("Data Stored");
}
void ReadRTCRAM(){
Serial.println("Begin Read");
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(zero); // not sure what this is for
Wire.endTransmission();
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0x20); // not sure what this is doing
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 32); // Set pointer to the first byte of data
magnum1 = Wire.read(); //magic number written before data write
state = Wire.read(); // Read state data
counter = Wire.read() << 8 + Wire.read(); // Read first byte shift left read second byte
magnum2 = Wire.read(); // Read Magic number written after data write
Serial.print(" Magic Number = ");
Serial.println(magnum1);
Serial.print(" State = ");
Serial.println(state);
Serial.print(" Counter = ");
Serial.println(counter);
Serial.print(" Magic Number = ");
Serial.println(magnum2);
Serial.println(" RTC1307 Dump end");
// if (magnum1 != magnum2){
// Serial.print (" Write Error!!!");
// }
}
This compiles and uploads
No error code green progress bar fills up to the last 3 white spaces and holds, to the left it says uploading.
Eventually I get a time out message. Waiting now so I can quote it.
Actually all arduino mega1280 and mega2560 boards both past and present suffer from the !!! bootloader monitor 'bug'. Doesn't matter what version board or version of IDE, the only fix is to upgrade the bootloader to one that has fixes that and other shortcomings of that bootloader.
I guess I could have,,, if I'''d read the whole statement,,, and seen that the statement contained data that was likely to cause problems...
The initial post said that commenting out three statements was required,,, to make the code upload. I was interested in finding out which of the three was the culprit...
As you can see from my reply, three punctuation marks in a row contribute nothing to the information. I don't understand why people feel it necessary to send more data than is necessary.