Serial data afkomstig van Arduino lezen?

Status
Niet open voor verdere reacties.

bramlaurens

Nieuwe gebruiker
Lid geworden
29 mei 2014
Berichten
3
Hallo allemaal.

Ik ben een half jaartje geleden begonnen met het maken van een brandalarm systeem met als basis een Arduino. Nu leek het me leuk om er ook een applicatie voor te maken voor op de pc. Ik ben hier nu mee bezig in Visual Studio 2013 in C#. Er zijn al een aantal dingen gelukt zoals 3 buttons maken waarvan een bijvoorbeeld het alarm activeert. Dat doe ik doormiddel van
Code:
serialPort1.Write("M");
Vervolgens heb ik in de Arduino deze regel code staan:
Code:
If (Serial.read() == 'M'){}
Tussen de laatste 2 haakjes staan nog wat regels code die het alarm activeren maar dat is niet relevant. Nu zou ik dit hele principe graag ook kunnen omkeren. Dus als het alarm wordt geactiveerd schrijft de arduino in de serial port bijvoorbeeld een "A". Door dit stukje code:
Code:
Serial.println("A");
Nu wil ik dat mijn C# Applicatie hierop reageert door de achtergrond van een button rood te maken. Neem aan dat deze button button1 heet.
Ik heb echt al talloze dingen geprobeert maar niks werkt. Ik zat te denken aan iets van

Code:
if (serialPort1.ReadLine() == 'A')
{
 button1.BackColor = Color.Red;
}

De code die ik nu heb:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.Open();
           
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
            serialPort1.Write("M");
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            timer2.Start();
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
            serialPort1.Write("D");
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (button1.BackColor == Color.Red)
            {
                button1.BackColor = Color.White;
            }
            else
            {
                button1.BackColor = Color.Red;
 
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            timer2.Stop();
            button1.BackColor = Color.White;
            button2.BackColor = Color.White;
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
            serialPort1.Write("S");
        }
 
        private void toolStripStatusLabel1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void timer2_Tick(object sender, EventArgs e)
        {
            if (button2.BackColor == Color.Red)
            {
                button2.BackColor = Color.White;
            }
            else
            {
                button2.BackColor = Color.Red;
 
            }
        }
    }
}

De rede dat ik zoveel keer achter elkaar serialPort1.Write("S"); en serialPort1.Write("D"); heb staan omdat de Arduino soms een beetje moeite heeft om een input van de serial port te herkennen en hij reageert wel gewoon normaal als je vaak achter elkaar een letter stuurt via de serial port.

Ik programmeer echt nog maar een paar dagen in C# dus mijn excuses voor eventuele fouten.

Alvast bedankt!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan