-
Notifications
You must be signed in to change notification settings - Fork 0
/
save.ino
98 lines (77 loc) · 2.61 KB
/
save.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//Programm zum Sichern der Konversation im EEPROM und
//zum Ausgeben derselben nach Senden eines bestimmten
//Ausgabebefehls
#ifdef SPEICHERN
//*********************Bibliotheken*******************************
#include <EEPROM.h>
//**********************Variablen*********************************
int addr_re = EEPROM.read(1); //EEPROM-Adresse zum Lesen
int addr_wr = EEPROM.read(2); //EEPROM-Adresse zum Schreiben
#ifdef SPEICHER
int speicherplatz = SPEICHER;
#else
int speicherplatz = EEPROM.length();
#endif
boolean aufnahme = true;
int last_vonwem = 2;
//***********************Funktionen********************************
//Hauptfunktion: Speichern eines Befehls
void speichern (char befehl, int vonwem) {
if (aufnahme) {
//Bei Anfang von Nachricht "<" bzw ">" einspeichern
if (vonwem == 0 && vonwem != last_vonwem) eeprom_write(addr_wr, '>');
else if (vonwem == 1 && vonwem != last_vonwem) eeprom_write(addr_wr, '<');
last_vonwem = vonwem;
//Buchstaben speichern
if (!eeprom_write(addr_wr, befehl)) aufnahme = false;
}
save_values();
}
//Sichern der Schreib- und Lesevariablen im EEPROM
void save_values () {
EEPROM.write(1, addr_re);
EEPROM.write(2, addr_wr);
}
//Schreiben eines Zeichens in EEPROM
boolean eeprom_write (int addr, char c) {
if (addr < speicherplatz - 1) {
if (c != '\n') EEPROM.write(addr, c);
addr_wr++;
return true;
}
else return false;
}
//Ausgabe der Konversation
void usb_ausgabe () {
Serial.println("-----------------------------------------------------");
Serial.println("LauschArduino: Ausgabe der aufgezeichneten Konversation:");
while (addr_re < speicherplatz) {
char value = EEPROM.read(addr_re);
if (value == '<' || value == '>') Serial.print("\n\n");
if (value == '<') Serial.print('\t');
Serial.print(value);
if (value == '<' || value == '>') Serial.print(' ');
addr_re++;
}
//Leseadresse zurücksetzen
addr_re = 0;
//Mitgesendetes ENTER auch noch auslesen
Serial.read();
//Bei Bedarf EEPROM leeren
Serial.println("\n-----------------------------------------------------");
Serial.println("Ende der Konversation. Clear EEPROM? [mit Ausgabebefehl bestaetigen]");
while (Serial.available() < 1) ;
if (Serial.read() == AUSGABEBEFEHL) {
Serial.print("CLEARING EEPROM, PLEASE WAIT... ");
//Werte zurücksetzen
addr_wr = 3; EEPROM.write(2, 3);
addr_re = 3; EEPROM.write(1, 3);
//Restliche Daten löschen
for (int i = 3 ; i < speicherplatz ; i++) {
EEPROM.write(i, 0);
}
Serial.println("FINISHED");
}
Serial.println("-----------------------------------------------------");
}
#endif