Захотел проверить с какой скоростью двигаются паровозы на макете.
Зашел в интернет, а там нашел как все сделать, только адаптировал под имеющийся экран.
Дописал скетч для Arduino и вот что получилось.
Скетч:
#include "U8glib.h"
#define SENSOR_L 7
#define SENSOR_R 6
const double distance = 170.0;
int scale = 87;
int speed1;
float msek;
int waitingtime = 10000;
long int deltatime, starttime;
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
void setup() {
pinMode(SENSOR_L, INPUT_PULLUP);
pinMode(SENSOR_R, INPUT_PULLUP);
Serial.begin(9600);
refresh_display_2();
// u8g.setRot180();
}
void loop () {
if (digitalRead(SENSOR_L)== LOW)
{
starttime = millis();
while (digitalRead(SENSOR_R)== HIGH) {}
deltatime = (millis() - starttime);
refresh_display();
delay(waitingtime);
refresh_display_2();
}
if (digitalRead(SENSOR_R)== LOW)
{
starttime = millis();
while (digitalRead(SENSOR_L)== HIGH) {}
deltatime = (millis() - starttime);
refresh_display();
delay(waitingtime);
refresh_display_2();
}
}
void refresh_display()
{
u8g.firstPage();
do {
u8g.setFont(u8g_font_6x10);
u8g.setColorIndex(1);
u8g.setPrintPos( 2, 8); u8g.print("Deltatime:");
u8g.setPrintPos( 80, 8); u8g.print(deltatime);
u8g.setPrintPos( 110, 8); u8g.print(" ms ");
u8g.setPrintPos( 15, 15); u8g.print("--------------");
msek = (distance/deltatime);
u8g.setPrintPos( 15,24); u8g.print(msek);
u8g.setPrintPos( 50, 24); u8g.print(" m/s (real)");
u8g.setFont(u8g_font_7x14);
u8g.setPrintPos( 2,36); u8g.print("Speed:");
u8g.setFont(u8g_font_gdr25r);
speed1 = (scale*distance/deltatime*3.6);
u8g.setPrintPos( 15, 63);
u8g.print(speed1);
u8g.setFont(u8g_font_5x8);
u8g.setPrintPos( 80, 35); u8g.print("(scale");
u8g.setPrintPos( 80, 45); u8g.print(" 1/");
u8g.setPrintPos( 95, 45); u8g.print(scale);
u8g.setPrintPos( 102, 45); u8g.print(" )");
u8g.setFont(u8g_font_7x14);
u8g.setPrintPos( 80, 63); u8g.print(" km/h ");
} while (u8g.nextPage());
}
void refresh_display_2()
{
u8g.firstPage();
do {
u8g.setColorIndex(1);
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos( 14, 10); u8g.print("---------------");
u8g.setPrintPos( 2, 15); u8g.print("-------------------");
u8g.setPrintPos( 2, 45);
u8g.setFont(u8g_font_gdr25r);
u8g.print("READY");
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos( 2, 55); u8g.print("-------------------");
u8g.setPrintPos( 14, 60); u8g.print("---------------");
} while (u8g.nextPage());
}