/* Have a Serial connection send lines to be displayed on a screen / display. If the display is too small, scroll the text along the display. */ #define BAUD_RATE 9600 #define STR_MAX_LENGTH 20 #define LINE_BUFFER_SIZE 4 void initDisplay(); void updateDisplay( const unsigned int tick ); void serialEvent(); char line_buffer[LINE_BUFFER_SIZE][STR_MAX_LENGTH + 1] = {// Small Ringbuffer to collect lines "Liquid Crystal Boob", "Captain", "Pilot", "Snippy" }; int line_buffer_read = 0; // Index of Ringbuffer int line_buffer_write = 0; // Index of Ringbuffer const unsigned int timer_lps = 1000; const unsigned int timer_display = 1000; const unsigned int timer_print_line_buffers = 10000; const unsigned int timer_switch_line_buffer = timer_print_line_buffers; long lastMillis_lps = 0; long lastMillis_display = 0; long lastMillis_switch_line_buffer = 0; long lastMillis_print_line_buffers = 0; long loops = 0; long lps = 0; void setup() { Serial.begin(BAUD_RATE); initDisplay(); } void loop() { long currentMillis = millis(); loops++; // Estimate Loops per Seconds if ( currentMillis - lastMillis_lps > timer_lps ) { lastMillis_lps = currentMillis; lps = loops; loops = 0; } // Update Screen once per 1s if ( currentMillis - lastMillis_display > timer_display ) { lastMillis_display = currentMillis; updateDisplay( (currentMillis / 1000) ); } // Display next line in line_buffer if ( currentMillis - lastMillis_switch_line_buffer > timer_switch_line_buffer ) { lastMillis_switch_line_buffer = currentMillis; line_buffer_read = (line_buffer_read + 1 ) % LINE_BUFFER_SIZE; } // Print all Line Buffers once every 10 seconds if ( currentMillis - lastMillis_print_line_buffers > timer_print_line_buffers ) { lastMillis_print_line_buffers = currentMillis; Serial.println(F("=========================")); Serial.println(F("Printing all Line buffers")); Serial.println(F("=========================")); for (int i = 0; i < LINE_BUFFER_SIZE ; i++) { if ( line_buffer_read == i ) { Serial.print('r'); } else { Serial.print(' '); } if ( line_buffer_write == i ) { Serial.print('w'); } else { Serial.print(' '); } Serial.print(" Line "); Serial.print( i ); Serial.print(": '"); Serial.print( line_buffer[i] ); Serial.print("' "); Serial.println(); } Serial.println(F("=========================")); } }