c# i arduino w wykorzystaniu produkcyjnym

0

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

0

A dlaczego używasz klasy Timer a nie Stopwatch? Timer służy do cyklicznego odpalania eventów, stopwatch do zliczania czasu.

0

Dziękuję, masz rację stopwatch połączony z listbox-em spełni moje oczekiwania, natomiast nadal nie wiem jak wydzielić sygnały z poszczególnych wyjść arduino, tak aby jedna krańcówka załączała stoper a druga go zatrzymywała, na tą chwilę mam zintegrowany jeden label z dwiema krańcówkami, oraz dodaną funkcję do tego label-ka, żeby włączał przycisk uruchamiający stoper wraz ze zmianą tekstu label-ka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1