Arduino

EEPROM und Serial Port Testcode

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);
 }

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.