Für ein Messsystem sollen Kalibierungsdaten in ien EEPROM geschrieben werden. Hier ein paar Code Schnipel für Entwurf und Debugging.
/*
* EEPROM und Serial Port Testprogramme
*
* Int Werte in EEPROM schreiben und lesen
* Formatierte Audgabe auf den Serial Port
* Funktionsweise:
* liest den analogen Eingang 7 und sendet die Werte laufend auf den Serial Port
* an Ausgang 4 ist ein MAX4544 dual 2 Kanal Anlog Switch/Multiplexer. An einem Eingangspaar liegen 2 von 5V heruntergeteilte Spannungen
* bei Druck auf den Taster wird eine Tabelle aus dem EEPROM ausgelesen
*/
#include <EEPROM.h>
#define BUTTON 3 // Taster
#define SWITCH 4 // Switch MUX
#define VIN 7 // analoger Ausgang des MUX
#define FET 5 // Schaltausgang
#define PWM 9 // PWM Ausgang
#define LEDPIN 13
//This function will write a 2 byte integer to the eeprom at the specified address and address + 1 #include "WProgram.h" void EEPROMWriteInt(int p_address, int p_value); unsigned int EEPROMReadInt(int p_address); void setup(); void loop(); void EEPROMWriteInt(int p_address, int p_value) { byte lowByte = ((p_value >> 0) & 0xFF); byte highByte = ((p_value >> 8) & 0xFF);
EEPROM.write(p_address, lowByte); EEPROM.write(p_address + 1, highByte); }
//This function will read a 2 byte integer from the eeprom at the specified address and address + 1 unsigned int EEPROMReadInt(int p_address) { byte lowByte = EEPROM.read(p_address); byte highByte = EEPROM.read(p_address + 1);
return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00); }
// short valV[] = {10,-5,-40,-80,-115,-135,-210,-240,-270,-300,-325,-365,-380,-405,-430,-455,-490,-520,-555,-585};
int i; // int incomingByte; void setup() { Serial.begin(9600); pinMode(BUTTON, INPUT); digitalWrite(BUTTON, HIGH); pinMode(SWITCH, OUTPUT); pinMode(FET, OUTPUT); digitalWrite(FET, LOW); analogWrite(PWM, 50);
// Korrekturdaten fuer die Eingangspannung in 50 Unit Schritten // gespeichert ist die Abweichung der effektiven Spannung in mV vom Wert 20x Unit // valV[0] ist die Abweichung von 0...49 Units
// fuelle 32 Quadratzahlen ein // digitalWrite(ledPin, HIGH); // for (i=0; i<32; i++) // { // EEPROMWriteInt(i * 2, i * i); // } }
void loop() { digitalWrite(LEDPIN, LOW);
// // Datenspiegel: sende jedes empfangene Byte zurueck erspart eine ASCII Tabelle. // Leider muss ein Serial.readln etc. selber programmiert werden // if (Serial.available() > 0) // { // incomingByte = Serial.read(); // Serial.print("I received: "); // Serial.println(incomingByte, DEC); // }
// Messwerte an beiden Eingaengen auslesen digitalWrite(SWITCH, LOW); Serial.print(analogRead(7)); digitalWrite(SWITCH, HIGH); Serial.print('\t'); Serial.println(analogRead(7)); if (digitalRead(BUTTON)==0) { // dann alles ueber die serielle Schnittstelle ausgeben // digitalWrite(LEDPIN, HIGH); // for (i=0; i<32; i++) // { // Serial.print(i, DEC); // Serial.print(","); // Serial.println(EEPROMReadInt(2*i), DEC); // delay(100); // } Serial.print("Taste"); digitalWrite(FET, HIGH); analogWrite(PWM, 200); delay(10000); digitalWrite(FET, LOW); analogWrite(PWM, 50); };
digitalWrite(LEDPIN, LOW); delay(500); }