diff --git a/README.md b/README.md index e64878c..dccae4b 100644 --- a/README.md +++ b/README.md @@ -35,5 +35,6 @@ By default, uploading this program and then writing to the serial device doesn't 3. Write stuff to the serial device - now it should work ### Previously was working -I basically had to rewrite this from scratch - the Arduino had the program uploaded on it but I lost the code. That version had fast refresh rates but this one takes like 2 seconds to refresh the LCD. I don't have any applications that would break due to this so it isn't important. +I basically had to rewrite this from scratch - the Arduino had the program uploaded on it but I lost the code. ~~That version had fast refresh rates but this one takes like 2 seconds to refresh the LCD. I don't have any applications that would break due to this so it isn't important. ~~ +I fixed this issue. Apparently `Serial.readString()` is extremely slow, but `Serial.readStringUntil('\n')` (equivalent in this case) is much faster. Not sure on why but it works. I have effectively instant updates now. diff --git a/main.cpp b/main.cpp index 8d53f38..b1023bc 100644 --- a/main.cpp +++ b/main.cpp @@ -1,85 +1,36 @@ -/* - LiquidCrystal Library - Hello World - - Demonstrates the use a 16x2 LCD display. The LiquidCrystal - library works with all LCD displays that are compatible with the - Hitachi HD44780 driver. There are many of them out there, and you - can usually tell them by the 16-pin interface. - - This sketch prints "Hello World!" to the LCD - and shows the time. - - The circuit: - * LCD RS pin to digital pin 12 - * LCD Enable pin to digital pin 11 - * LCD D4 pin to digital pin 5 - * LCD D5 pin to digital pin 4 - * LCD D6 pin to digital pin 3 - * LCD D7 pin to digital pin 2 - * LCD R/W pin to ground - * LCD VSS pin to ground - * LCD VCC pin to 5V - * 10K resistor: - * ends to +5V and ground - * wiper to LCD VO pin (pin 3) - - Library originally added 18 Apr 2008 - by David A. Mellis - library modified 5 Jul 2009 - by Limor Fried (http://www.ladyada.net) - example added 9 Jul 2009 - by Tom Igoe - modified 22 Nov 2010 - by Tom Igoe - modified 7 Nov 2016 - by Arturo Guadalupi - - This example code is in the public domain. - - https://docs.arduino.cc/learn/electronics/lcd-displays - -*/ - // include the library code: #include #include -//#include // initialize the library by associating any needed LCD interface pin // with the arduino pin number it is connected to const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); +char buffer_line1[16]; +char buffer_line2[16]; + void setup() { Serial.begin(115200); // set up the LCD's number of columns and rows: lcd.begin(16, 2); lcd.clear(); - // Print a message to the LCD. - //lcd.print("hello, world!"); } void loop() { - - // set the cursor to column 0, line 1 - // (note: line 1 is the second row, since counting begins with 0): - lcd.setCursor(0, 0); - // print the number of seconds since reset: - //lcd.print(millis() / 1000); while (Serial.available() == 0) {} - //lcd.clear(); - String s = Serial.readString(); - s.trim(); - int nl_idx = s.indexOf("?", 0); + lcd.clear(); + lcd.setCursor(0, 0); + String s1 = Serial.readStringUntil('\n'); // This fixed performance issue + int nl_idx = s1.indexOf("?", 0); if (nl_idx == -1) { - lcd.print(s); + lcd.print(s1); } else { - String l1 = s.substring(0, nl_idx); - String l2 = s.substring(nl_idx+1, s.length()); - lcd.print(l1); + String s2 = s1.substring(nl_idx+1, s1.length()); + s1 = s1.substring(0, nl_idx); + lcd.print(s1); lcd.setCursor(0, 1); - lcd.print(l2); - + lcd.print(s2); } }