Ir ao conteúdo

Posts recomendados

  • Membro VIP
Postado

Olá.

Tenho um problema. Eu consegui realizar o processo de escrita serial no Arduino através do Windows Forms C#:

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.IO.Ports; // Esta biblioteca é essencial para a comunicação serial
using System.Windows.Forms;

namespace TesteSerialArduino
{
    public partial class Form1 : Form
    {

        bool estado = false;
       


        //SerialPort s;

        public Form1()
        {
            InitializeComponent();

            serialPort1.BaudRate = 9600;
            serialPort1.PortName = "COM3";


          
           
        }

        private void comunicTx(string cTx) // transmite
        {
            if (!serialPort1.IsOpen) // Se a porta serial não estiver disponível
            {
                try
                {

                    serialPort1.Open();
                    comunicTx(cTx);
                    
                    serialPort1.Write(cTx);
                    serialPort1.Close();

                }
                catch
                {
                    MessageBox.Show("Conecte seu Arduino na porta USB.", "Atenção",
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                }
            }
        }


       



        private void btnLigaDesliga_Click(object sender, EventArgs e)
        {
           if (estado == false)
            {
                
                comunicTx("0"); // Opção 0 do Arduino
                btnLigaDesliga.Text = "Ligar";
                label1.ForeColor = Color.Red;
                label1.Text = "Desligado";
                estado = false;

            }
            else
            {
                
                comunicTx("1"); // Opção 1 do Arduino
                btnLigaDesliga.Text = "Desligar";
                label1.ForeColor = Color.Green;
                label1.Text = "Ligado";
                estado = true;
            }

            estado = !estado;

        }

        
        
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                }
            }
            catch
            { }
        }

               
    }
}

Está funcionando sem problemas: ao clicar no botão 'btnLigaDesliga' (neste momento com o texto desliga), é enviado ao arduino o caractere "0". O text do botão 'btnLigaDesliga' é mudado para "Ligar". Através do comando  estado = !estado; a função do botão é alterada para desligar.

Neste momento ao clicar novamente,  é enviado ao arduino o caractere "1".

 

No arduino o código é:


 boolean teste = false;

void Lampada()
{
  if(digitalRead(13) == HIGH)
  {
    digitalWrite(13, LOW);
  }
  else
  {
    digitalWrite(13, HIGH);
  }
}

void setup()
{
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
   

  if(Serial.available()) // Se a comunicação Serial estive disponível..
  {
    char op = Serial.read(); // Leia a op (Opção) da Serial.
    
    if (op == '0')
    {
     digitalWrite(13, LOW);
     Serial.println("Desligado");
     delay(200);
     
    }
    if (op == '1')
    {
      digitalWrite(13, HIGH);
      Serial.println("Desligado");
      delay(200);
      
    }
     
    }}
   
  
  

 

 

Para realizar o processo de leitura serial no C# através do Arduino eu também consegui:

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 LerPortaAnalogicaArduino
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            serialPort1.BaudRate = 9600;
            serialPort1.PortName = "COM3";
            serialPort1.Open();
            serialPort1.DataReceived += serialPort1_DataReceived;
        }
            private void Form1_Load(object sender, EventArgs e)
            {

            }
        //Aqui começa a leitura serial
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                string line = serialPort1.ReadLine();
                this.BeginInvoke(new LineReceivedEvent(LineReceived), line);
            }

        private delegate void LineReceivedEvent(string line);
        private void LineReceived(string line)
        {
           

            if (line.Contains("T")) // verificar se na string line contém T.
            {
                string temperatura  = line.Substring(1);
                label1.Text = temperatura;  // se verificado que contém, imprime no label1 sem o primeiro caractere.
                progressBar1.Value = int.Parse(temperatura);
            }

            if (line.Contains("R"))
            {
                string pressao = line.Substring(1);
                label3.Text = pressao;  // se verificado que contém, imprime no label1 sem o primeiro caractere.

                pressao = pressao.Substring(0, 2);
               

                progressBar2.Value = int.Parse(pressao);
                
            }

            textBox1.Text = line;



        }
        //Aqui termina a leitura serial
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

 

No arduino o código é:

void setup()
{
Serial.begin(9600);
}

void loop()
{
  //Os numeros são apenas ilustrativos
Serial.println("R32.52"); //temperatura
delay(1500);

Serial.println("T900"); //pressão atmosferica
delay(1500);

Serial.println("R31.52"); //temperatura
delay(1500);

Serial.println("T902"); //pressão atmosferica
delay(1500);

Serial.println("R30.52"); //temperatura
delay(1500);

Serial.println("T906"); //pressão atmosferica
delay(1500);

Serial.println("R28.52"); //temperatura
delay(1500);

Serial.println("T910"); //pressão atmosferica
delay(1500);


}

 

Resultado:

image.png.fde3f143cb72ff79bf6af9039cd0982e.png

 

 

 

 

 

 

Agora, para integrar os dois códigos, leitura e escrita serial, não estou conseguindo. Como devo proceder para fazer funcionar a leitura e escrita serial?

 

 

Postado

Boa Noite,

 

Meio Freudiano, ate chato de dizer, mas, a melhor forma de cessar os conflitos é (conversando) encarando.

 

Desconheço os conflitos, mas, já que foste tu que escreveu às metades, tua "interpolação" é um terceiro que a soma dos dois primeiros já conhecidos por nós. Logo a sugestão é, preserva o (dois) código(s) e escrever um terceiro com os comandos logicamento aos pares e compartilhar os primeiros conflitos dessa prática, racionável.

 

Os mais experientes na linguagem ajudam, evidentemente, na discussão dos erros e nas soluções. Particularmente, só um pouco.

"

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!