Go Down

Topic: [SOLUCIONADO] problema con arduino, c# y motor stepper (Read 464 times) previous topic - next topic

pekador1978

Hola a todos otra vez, traigo buenas noticias.

Ya funciona todo perfectamente.

Voy a dejar los codigos para que veais como esta hecho.
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.Threading.Tasks;
using System.Windows.Forms;

namespace nuevomotor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void buttonAbrir_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                serialPort1.PortName = textBoxPuerto.Text;
                serialPort1.Open();
                labelEstadoPuerto.Text = "ABIERTO";
                labelEstadoPuerto.ForeColor = Color.Green;
            }
            else
            {
                MessageBox.Show("El puerto : " + serialPort1.PortName + "  ya está abierto!");
            }
        }

        private void buttonCerrar_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                labelEstadoPuerto.Text = "CERRADO";
                labelEstadoPuerto.ForeColor = Color.Red;
            }
            else
            {
                MessageBox.Show("El puerto : " + serialPort1.PortName + "  ya está cerrado!");
            }
        }

        private void buttonOn_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
                serialPort1.WriteLine("ON");
            else
                MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
        }

        private void buttonOff_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
                serialPort1.WriteLine("OFF");
            else
                MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
        }

        private void radioButtonCW_CheckedChanged(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                if (radioButtonCW.Checked)
                {
                    serialPort1.WriteLine("CW");
                }
                else if (radioButtonCCW.Checked)
                {
                    serialPort1.WriteLine("CCW");
                }
            }

            else
                MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
        }

        private void buttonAplicar_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
                serialPort1.WriteLine("periodo"+textBoxPeriodo.Text);
            else
                MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
        }

        private void textBoxPeriodo_TextChanged(object sender, EventArgs e)
        {

        }

        private void buttonAplicar2_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
                serialPort1.WriteLine("steps"+textBoxSteps.Text);
            else
                MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
        }

        private void textBoxPuerto_TextChanged(object sender, EventArgs e)
        {

        }

        private void radioButtonCCW_CheckedChanged(object sender, EventArgs e)
        {

        }
    }
}


Code: [Select]

#define stp 9
#define dir 8
#define led 13

bool on = false;
bool cw = true;
int periodo = 10;
int steps = 500;
int x;

void setup() {
  pinMode(stp, OUTPUT);
  pinMode(dir, OUTPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  String str = "";

  while (Serial.available())
  {
    char c = Serial.read();
    str += c;
  }

  if (str != "")
  {
    if (str.indexOf("ON") == 0)
    {
      on = true;
      digitalWrite(led, HIGH);
    }
    else if (str.indexOf("OFF") == 0)
    {
      on = false;
      digitalWrite(led, LOW);
    }
    else if (str.indexOf("CW") == 0)
      cw = true;
    else if (str.indexOf("CCW") == 0)
      cw = false;
    else if (str.indexOf("periodo") == 0)
      periodo = (str.substring(7, str.length() - 1)).toInt();
    else if (str.indexOf("steps") == 0)
    {
      steps = (str.substring(5, str.length() - 1)).toInt(); 

      Serial.println(steps);
    }
  }
 
  digitalWrite(dir, cw ? HIGH : LOW);

  if (on == true)
    for (x = 0; x < steps; x++)
    {
      digitalWrite(stp, HIGH);
      delay(periodo);
      digitalWrite(stp, LOW);
      delay(periodo);
    }
    on=false;
//Serial.println(periodo);

  delay(1000);
}


Acepto cualquier consejo para mejorar la interfaz.
Como las conexiones y la propia interfaz ya están puestas arriba no las vuelvo a poner.
Muchas gracias @Metaconta por tomarte tu tiempo, ojalá hubiera mas gente como tu.
Repito, acepto cualquier consejo para mejorar, pero el objetivo que quería ya lo he logrado.


Go Up