/* */ // include the library code: #include <LiquidCrystal.h> #include <EEPROM.h> #include "EEPROMAnything.h" // Pins for LCD #define PIN_LCD_D7 12 #define PIN_LCD_D6 13 #define PIN_LCD_D5 14 #define PIN_LCD_D4 15 #define PIN_LCD_RS 21 #define PIN_LCD_EN 20 // Input pin from laser cutter mobo #define LASER_PIN 0 // Button connected here will reset the counter #define RESET_PIN 4 // initialize the library with the numbers of the interface pins LiquidCrystal lcd(PIN_LCD_RS, PIN_LCD_EN, PIN_LCD_D4, PIN_LCD_D5, PIN_LCD_D6, PIN_LCD_D7); int lastPos; unsigned long time_total=0; unsigned long time_start=0; unsigned long time_last=0; void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print(" Laser Odometer "); pinMode(LASER_PIN, INPUT); digitalWrite(LASER_PIN, HIGH); // enable internal pullup pinMode(RESET_PIN, INPUT); digitalWrite(RESET_PIN, HIGH); lastPos = EEPROM.read(0); if(lastPos == 0x11) { EEPROM_readAnything(0x11, time_total); } else if(lastPos == 0x22) { EEPROM_readAnything(0x22, time_total); } else { lastPos = 0x22; time_total = 0; } } 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, 1); // print the number of seconds since reset: if(digitalRead(RESET_PIN) == 0) { time_total = 11400000L; EEPROM_writeAnything(0x11, time_total); EEPROM_writeAnything(0x22, time_total); } unsigned long time_tmp = time_total; if(time_last > 0 && time_start > 0) { time_tmp += (time_last - time_start); } if(digitalRead(LASER_PIN) == 0) { // 0 --> laser is firing if(time_start == 0) { time_start = time_last = millis(); } else { time_last = millis(); } } else if(time_start > 0) { if(millis() - time_last > 10000) { time_total += time_last - time_start; time_last = time_start = 0; } else if(millis() - time_last > 1000) { if(lastPos == 0x11) { EEPROM_writeAnything(0x22, time_tmp); EEPROM.write(0, 0x22); lastPos = 0x22; } else { EEPROM_writeAnything(0x11, time_tmp); EEPROM.write(0, 0x11); lastPos = 0x11; } } } lcd.print(time_tmp/1000); lcd.setCursor(14,1); if(time_start > 0) { switch((time_tmp/200) % 4) { case 0: lcd.print('|'); break; case 1: lcd.print('/'); break; case 2: lcd.print('-'); break; case 3: lcd.print('/'); break; } } else { lcd.print(" "); } }
*”’Category:”'[[Category:Laser]] [[Category:Laser User Informations]]