0
Διαβάζοντας λίγο ένα έτοιμο παράδειγμα κατανόησης που αποθηκεύει και μετά διαβάζει 20 bytes στις 20 πρώτες θέσεις μιας μνήμης EEPROM προκύπτουν πολλές απορίες.
Το sketch είναι το εξής: (με ελληνικά είναι τα δικά μου σχόλια-απορίες)
#include <Wire.h>
#define chip1 0x50 // η 7-bit διεύθυνση της EEPROM
unsigned int pointer;
byte d=0;
void setup(){
Serial.begin(9600);
Wire.begin();
}
// Στην παρακάτω συνάρτηση κατάλαβα ότι τα ορίσματα είναι:
//device για τη διεύθυνση της EEPROM
//address για τη θέση μνήμης μέσα στην EEPROM
//data: δεδομένα ενός byte της μεταβλητής data
void writeData(int device, unsigned int address, byte data){
Wire.beginTransmission(device);
Wire.write((byte)(address >> 8 )); // left part of pointer address // Εδώ μήπως αντί address έπρεπε να γράψει pointer? Εξάλλου πουθενά δε βλέπω να χρησιμοποιεί την
Wire.write((byte)(address & 0xFF)); //and the right // μεταβλητή pointer. Αν ναι, τί ακριβώς γίνεται εδώ?
Wire.write(data);
Wire.endTransmission();
delay(10);
}
byte readData(int device, unsigned int address){
byte result; //returned value
Wire.beginTransmission(device);
Wire.write((byte)(address >>8 )); // left part of pointer address // Εδώ μήπως αντί address έπρεπε να γράψει pointer? Εξάλλου πουθενά δε βλέπω να χρησιμοποιεί την Wire.write((byte)(address & 0xFF)); // and the right // μεταβλητή pointer. Αν ναι, τί ακριβώς γίνεται εδώ?
Wire.endTransmission(); // Δε θα έπρεπε η συνάρτηση αυτή να γραφεί μετά την result = Wire.read();
Wire.requestFrom(device, 1);
result = Wire.read();
return result;
}
void loop(){
Serial.println("Writing data...");
for(int a=0; a<20; a++)
{
writeData(chip1, a, a);
}
Serial.println("Reading data...");
for(int a=0; a<20; a++);
{
Serial.print("EEPROM position ");
Serial.print(a);
Serial.print(" holds ");
d = readData(chip1, a);
Serial.println(d, DEC);
}
}
Και άλλες απορίες είχα, απλά για αρχή είπα να αναφέρω μόνο αυτές, μήπως κάτσει κάποιος και μου εξηγήσει δυο πράγματα.