Witajcie,
Postanowiłem stworzyć urządzenie do zliczania wyprodukowanych sztuk oraz obliczania czasu wyprodukowania poszczególnej sztuki.
Arduino postanowiłem zaprogramować wyłącznie w celu odczytu krańcówek stanowiących o zapoczątkowaniu procesu i zakończeniu.
Dla przetworzenia tych danych chciałbym wykorzystać program w C#. Integracja arduino z C# nie stanowiła problemu jednak teraz zastanawiam się jak uruchamiać i zatrzymywać stoper, ponieważ pozycja w "label" zmienia się w zależności od wyzwolenia krańcówki ( po wciśnięciu pierwszej wyskakuje "1", przy wciśnięciu drugiej "2"), kombinowałem na wszystkie znane mi sposoby i w sumie nie mam pomysłu jak to ugryźć. Najlepiej by było, żeby po pojawieniu się 1 z automatu zegar startował i analogicznie przy 2 się zatrzymywał, jednak może być również pośrednio w sensie że "1" wyzwala przycisk uruchamiający zegar i "2" analogicznie zatrzymuje.
Poniżej wklejam kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Timers;
using System.Windows.Forms;
namespace Linia
{
public partial class Form1 : Form
{
System.Timers.Timer t;
int h, m, s;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
t = new System.Timers.Timer();
t.Interval = 1000;// 1s
t.Elapsed += OnTimeEvent;
}
private void OnTimeEvent(object sender, ElapsedEventArgs e)
{
Invoke(new Action(() =>
{
s += 1;
if (s == 60)
{
s = 0;
m += 1;
}
if (m == 60)
{
m = 0;
h += 1;
}
textBox2.Text = string.Format("{0}:{1}:{2}", h.ToString().PadLeft(2, '0'), m.ToString().PadLeft(2, '0'), s.ToString().PadLeft(2, '0'));
}));
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
serialPort1.Close();
t.Stop();
Application.DoEvents();
}
private string Zrobione;
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Zrobione = serialPort1.ReadLine();
this.Invoke(new EventHandler(pokazZrobione));
}
private void button1_Click(object sender, EventArgs e)
{
t.Start();
}
private void button2_Click(object sender, EventArgs e)
{
t.Stop();
}
private void ZROBIONYCH_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
Jak mielibyście od razu pomysł na przenoszenie wyniku zegara do listy to również byłbym wdzięczny.
Pozdrowienia