-
Notifications
You must be signed in to change notification settings - Fork 113
/
Copy pathlcd_serial.ino
136 lines (118 loc) · 3.96 KB
/
lcd_serial.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// emonPi used 16 x 2 I2C LCD display
int i2c_lcd_detect(int i2c_lcd_address[]){
Wire.begin();
byte error=1;
for (int i=0; i<2; i++){
Wire.beginTransmission(i2c_lcd_address[i]);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("LCD found i2c 0x"); Serial.println(i2c_lcd_address[i], HEX);
return (i2c_lcd_address[i]);
break;
}
}
Serial.println("LCD not found");
return(0);
}
void emonPi_LCD_Startup(int current_i2c_addr) {
LiquidCrystal_I2C lcd(current_lcd_i2c_addr,16,2); // LCD I2C address to 0x27, 16x2 line display
lcd.init(); // initialize the lcd
lcd.backlight(); // Or lcd.noBacklight()
lcd.print(F("emonPi V")); lcd.print(firmware_version*0.01);
lcd.setCursor(0, 1); lcd.print(F("OpenEnergyMon"));
}
void serial_print_startup(int current_lcd_i2c_addr){
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LiquidCrystal_I2C lcd(current_lcd_i2c_addr,16,2); // LCD I2C address to 0x27, 16x2 line display
lcd.clear();
lcd.backlight();
Serial.print(F("CT 1 Cal: ")); Serial.println(Ical1);
Serial.print(F("CT 2 Cal: ")); Serial.println(Ical2);
Serial.print(F("VRMS AC ~"));
Serial.print(vrms); Serial.println(F("V"));
if (ACAC)
{
lcd.print(F("AC Wave Detected"));
Serial.println(F("AC Wave Detected - Real Power calc enabled"));
if (USA) Serial.print(F("USA mode > "));
Serial.print(F("Vcal: ")); Serial.println(Vcal);
Serial.print(F("Vrms: ")); Serial.print(Vrms); Serial.println(F("V"));
Serial.print(F("Phase Shift: ")); Serial.println(phase_shift);
}
else
{
lcd.print(F("AC NOT Detected"));
Serial.println(F("AC NOT detected - Apparent Power calc enabled"));
if (USA) Serial.println(F("USA mode"));
Serial.print(F("Assuming VRMS: ")); Serial.print(Vrms); Serial.println(F("V"));
}
lcd.setCursor(0, 1); lcd.print(F("Detected "));
if (CT_count==0) {
Serial.println(F("no CT detected"));
lcd.print(F("No CT's"));
}
else{
Serial.print("Detected "); Serial.print(CT_count); Serial.print(" CT's");
lcd.print(CT_count); lcd.print(F(" CT's"));
}
delay(2000);
if (DS18B20_STATUS==1) {
Serial.print(F("Detect "));
Serial.print(numSensors);
Serial.println(F(" DS18B20"));
lcd.clear();
lcd.print(F("Detected: ")); lcd.print(numSensors);
lcd.setCursor(0, 1); lcd.print(F("DS18B20 Temp"));
}
else {
Serial.println(F("0 DS18B20 detected"));
lcd.clear();
lcd.print(F("Detected: ")); lcd.print(numSensors);
lcd.setCursor(0, 1); lcd.print(F("DS18B20 Temp"));
}
delay(2000);
lcd.clear();
lcd.print(F("Booting..."));
lcd.setCursor(0, 1); lcd.print(F("Please wait"));
if (RF_STATUS == 1){
#if (RF69_COMPAT)
Serial.println(F("RFM69CW Init: "));
#else
Serial.println(F("RFM12B Init: "));
#endif
Serial.print(F("Node ")); Serial.print(nodeID);
Serial.print(F(" Freq "));
if (RF_freq == RF12_433MHZ) Serial.print(F("433Mhz"));
if (RF_freq == RF12_868MHZ) Serial.print(F("868Mhz"));
if (RF_freq == RF12_915MHZ) Serial.print(F("915Mhz"));
Serial.print(F(" Network ")); Serial.println(networkGroup);
showString(helpText1);
}
delay(20);
}
//Send emonPi data to Pi serial /dev/ttyAMA0 using struct JeeLabs RF12 packet structure
void send_emonpi_serial()
{
byte binarray[sizeof(emonPi)];
memcpy(binarray, &emonPi, sizeof(emonPi));
Serial.print(F("OK "));
Serial.print(nodeID);
for (byte i = 0; i < sizeof(binarray); i++) {
Serial.print(F(" "));
Serial.print(binarray[i]);
}
Serial.print(F(" (-0)"));
Serial.println();
delay(10);
}
static void showString (PGM_P s) {
for (;;) {
char c = pgm_read_byte(s++);
if (c == 0)
break;
if (c == '\n')
Serial.print('\r');
Serial.print(c);
}
}