Go Down

Topic: Sending "060a" c# to arduino servo "a" (Read 1 time) previous topic - next topic

initzero

it would be nice to get some help....

trying to control two servo motors by c# 2008
It connects to arduino uno board, see rx, tx lights flashing......

problem:
how to send a string = "030a" to arduino???? :0

arduino code:
Code: [Select]

#include <Servo.h>     

Servo servoX;  // cria objecto servo
Servo servoY;  // cria objecto servo
int posX = 0;    // variavel para guardar posicao do servo
int posY = 0;    // variavel para guardar posicao do servo

char buffer[4];
int received;

void setup()
{
  servoX.attach(10);         // indica que o servo esta conectado no pin9 do arduino
  servoY.attach(11);         // indica que o servo esta conectado no pin9 do arduino
  Serial.begin(9600);                                  //Inicia a porta serial
 
  servoX.write(070);                                    //Posicao inicial x, valores de alinhamento
  servoY.write(020);                                    //Posicao inicial y
  received = 0;

}

void loop()
{
  if(Serial.available())                              //Verifica se possui entrada de dados na entrada Serial
    { 
    //  Serial.println(buffer);     
      char c = Serial.read();                         // Se o "c" for igual ao caracter "A" (97 na tabela ASCII)
     if(c == 97)
        {
          Serial.println(buffer);
          int numero = atoi(buffer);
          servoX.write(numero);
          received = 0;
       }

    if(c == 98) // Se o "c" for igual ao caracter "B" (98 na tabela ASCII)
    {
      Serial.println(buffer);
      int numero = atoi(buffer);
      if(numero >= 15)                              // Se servo Y for maior que 15 graus(15 e o minimo de angulo sem forcar motor)
      {
        servoY.write(numero);
        received = 0;
      }
      received = 0;
    }
    if(c != 97 && c != 98)
    {
      buffer[received++] = c;
    }
    Serial.flush();
  }
}


in serial monitor "040a" works, servo "a" moves 40

C# code
Code: [Select]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.IO;
using System.IO.Ports;

namespace botaoServoteste
{
    public partial class Form1 : Form
    {
        int posicao = 60;
        //byte[] data = new byte[1];

        public Form1()
        {
            InitializeComponent();
            //Decalracoes iniciais para comunicacao com o arduino
            sp.PortName = "COM3"; // porta com
            sp.BaudRate = 9600;   // Taxa de velocidade
            sp.DtrEnable = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            sp.Open();
            posicao += 10;
            string temp = "0" + posicao.ToString()+"a";
            string teste = temp;
            sp.Write(temp);
           // sp.Write(new byte[] { Convert.ToByte(teste) }, 0, 1);
            sp.Close();
        }

somebody knows who to do it????
sorry for the english...

AWOL

Quote
servoX.write(070);                                    //Posicao inicial x, valores de alinhamento
  servoY.write(020);

Why specify angles in octal?

Code: [Select]
if(c == 97)
I don't remember all the ASCII table
Code: [Select]
if(c == 'a') is much easier to read.

You're using "atoi" on "buffer", but I don't see where you're terminating your string.
Code: [Select]
buffer[received++] = c;
buffer[received] = '\0';
(need to see if buffer is long enough to accomodate your string)
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

PaulS

Code: [Select]
        private void button1_Click(object sender, EventArgs e)
        {
            sp.Open();
            posicao += 10;
            string temp = "0" + posicao.ToString()+"a";
            string teste = temp;
            sp.Write(temp);
           // sp.Write(new byte[] { Convert.ToByte(teste) }, 0, 1);
            sp.Close();
        }

Each time the button is clicked, the Arduino is reset, sent some data, and reset again. Is that REALLY what you want?

Opening and closing the serial port resets the Arduino, unless you have modified the Arduino to not reset under those conditions.

initzero

Each time the button is clicked, the Arduino is reset, sent some data, and reset again. Is that REALLY what you want?
R- doesn't matter for now, it's only for testing.

Look the arduino code works fine, if you open the Serial Monitor in Arduino and insert the values.
ex="030a" the servo 'a' will turn 30.

The problem is sending string value like this one "030a" in c#. If you knows who to do it Help will be well appreciated.

After this problem is fix i will fine tune the arduino code....  :smiley-slim:

Again: somebody knows who to do it????

dxw00d

The point that PaulS is making, is that while the Arduino is resetting, it is missing the serial data you are attempting to send it.

Go Up