/*
*/
// 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]]
