Arduino Forum

International => Français => Topic started by: cloud02300 on Jun 02, 2013, 08:19 pm

Title: envoyer des données vers visual c#
Post by: cloud02300 on Jun 02, 2013, 08:19 pm
bonjour,

j'essaye d'envoyer une temperature venant du sonde que j'ai branché sur ma carte arduino uno. cela fonctionne mais seulement une fois ensuite la valeur est érroné. Auriez vous une idée ? voici mes codes:

Arduino:

Code: [Select]
int tempPin = 5;  // analog input
int ledState = LOW;
int ledPin = 8; 


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

void loop(void)
{
  int tempReading;
  float temp_mV, tempC, tempF;
 

  tempReading = analogRead(tempPin);  // returns 0-1023

  temp_mV = map(tempReading, 0, 1023, 0, 5000); // convert to milliVolts

  tempC = (temp_mV - 500)/10 ;
  tempF = 9*tempC/5 + 32;
 
 
  Serial.println(tempC); 
  delay(2000);
  int received;                        // Variable servant à récupérer
                                       // les données reçues

  if (Serial.available()>0) {          // Si des données sont disponibles
    received = Serial.read();          // On les récupère
    if(received == 'a') {              // Si "a" est reçu
      if (ledState==HIGH)              // Et que la LED est allumée
        ledState = LOW;                // On l'éteinds
      else                             // Sinon
        ledState = HIGH;               // On l'allume

      digitalWrite(ledPin, ledState);  // Enfin on change l'état de la LED
    }
  }
 
}


C#
Code: [Select]
using System;
using System.IO.Ports;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Timer bg = new Timer();
        public Form1()
        {
         
            InitializeComponent();
            serialPort1.PortName = "COM7";
            serialPort1.BaudRate = 9600;

            bg.Tick += (s, e) => { label3.Text = DateTime.Now.ToString(); };
            bg.Interval = 200;
            bg.Start();
                                       
        }

        private void label1_Click(object sender, EventArgs e)
        {
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
                if (serialPort1.IsOpen)
                {
                    progressBar1.Value = 100;
                       
                   
                }
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();               
            progressBar1.Value = 0;           
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if(progressBar1.Value == 100)
            serialPort1.Write ("a");
        }
       
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
           
        {
            if (progressBar1.Value == 100)
            {
                string recive = serialPort1.ReadExisting();
                SetRecive(recive);               
                               
            }
           
        }
        private delegate void SetReciveCallback(string recive);
        private void SetRecive(string recive)

        {
            if (textBox1.InvokeRequired)
            {
                SetReciveCallback d = new SetReciveCallback(SetRecive);
                textBox1.Invoke(d, new object[] { recive });
            }
            else
               
                textBox1.Text = recive;
           
            }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {

           
        }

        private void progressBar1_Click(object sender, EventArgs e)
        {

        }

       
        private void timer1_Tick(object sender, EventArgs e)
        {

        }     

    }
         
}
Title: Re: envoyer des données vers visual c#
Post by: B@tto on Jun 03, 2013, 09:22 am
Salut !

Je bosse en VB.NET mais comme c'est du .NET, ça se ressemble beaucoup ;)

Perso j'avais des soucis un peu comme ça, je les ai résolus en utilisant ReadLine() plutôt que ReadExisting(). Si ça ne marche pas de suite il y a une juste (je fais tout de mémoire la hein donc pas sûr à 100%) une ligne a insérer lorsque tu paramètres ton port série qui permet de définir ce qu'il doit considérer comme une fin de ligne : SerialPort1.NewLine = Chr(13) + Chr(10)
Title: Re: envoyer des données vers visual c#
Post by: cloud02300 on Jun 03, 2013, 01:27 pm
Merci de ta réponse. En effet avec le ReadLine(); ça ne fonctionne pas. mais le "Chr" il faut le declarer nan?
Title: Re: envoyer des données vers visual c#
Post by: B@tto on Jun 03, 2013, 05:55 pm
Chr() renvoie le caractère correspondant au code ASCII passé en argument, soit ici LF CR ("\r\n") qui sont automatiquement ajouté lors d'un println() (d'ailleurs j'ai pas précisé mais côté arduino il faut des println().
Title: Re: envoyer des données vers visual c#
Post by: cloud02300 on Jun 03, 2013, 11:00 pm
Merci mais je ne comprend pas vraiment le principe tu pourrais pas me montrer dans un code pour que je comprenne?  Je suis débutant donc c'est pas toujours évident. Et pour l arduino il y a bien des printnl :)
Title: Re: envoyer des données vers visual c#
Post by: B@tto on Jun 04, 2013, 09:36 am
Si ça peut t'aider :
http://forum.arduino.cc/index.php?topic=136009.0
C'est du VB.NET mais c'est très proche du C# (normal, c'est du framework.net aussi)
Title: Re: envoyer des données vers visual c#
Post by: cloud02300 on Jun 04, 2013, 05:12 pm
Merci sa fonctionne :D c'était ma vitesse de connexion qui n'était pas assez élevé !!