Hola, soy nuevo en el foro.
Tengo que crear una interfaz por la que envie los datos de habilitar el motor e introducirle la velocidad, los grados que girara y el sentido de giro, ya sea izquierda o derecha. La velocidad y los grados los indico con dos scrolls bars y habilitar el motor y el sentido de giro con botones.
Una vez introducido todo esto pulso el botón enviar para mandarle esos datos al arduino.
Bien, mi problema esta aqui. No se como mandar todos los datos a la vez ni como recibirlos en arduino e interpretarlos.
public partial class Form1 : Form
{
bool estadoLed = false;
public Form1()
{
InitializeComponent();
}
string[] datos = new string[3];
//List<string> datos = new List<string>(3);
private void botonLed_Click(object sender, EventArgs e)
{
estadomotor = !estadomotor;
if (estadoLed == true)
{
label.Text = "ON";
//serialPort.Write("1");
datos[0] = "1";
}
else
{
label.Text = "OFF";
//serialPort.Write("0");
datos[0] = "0";
}
// estadomotor = (!estadomotor == true) ? datos[0]=("1") : datos[0]=("0");
//(estadomotor == true) ? label.Text = "ON" : label.Text = "OFF";
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void VelocidadMotor_Scroll(object sender, EventArgs e)
{
textBox.Text = VelocidadMotor.Value.ToString();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void botonEnviar_Click(object sender, EventArgs e)
{
}
private void botonAbrirPuerto_Click(object sender, EventArgs e)
{
serialPort.Open();
labelEstadoCOM.Text = "Puerto Abierto";
}
private void botonCerrarPuerto_Click(object sender, EventArgs e)
{
serialPort.Close();
labelEstadoCOM.Text = "Puerto Cerrado";
}
private void textBox1_TextChanged_1(object sender, EventArgs e)
{
}
private void label_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
//serialPort.Write("I");
//d = "I";
//RotarIzquierda.Enabled = false;
//RotarDerecha.Enabled = true;
//pictureBox1.Visible = true;
//pictureBox2.Visible = false;
datos[1] = ("I");
RotarIzquierda.Enabled = true;
pictureBox1.Visible = false;
pictureBox2.Visible = true;
}
private void Rotar1_Click(object sender, EventArgs e)
{
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void RotarDerecha_Click(object sender, EventArgs e)
{
//serialPort.Write("D");
//d = "D";
//RotarIzquierda.Enabled = true;
// RotarDerecha.Enabled=false;
//pictureBox1.Visible = false;
//pictureBox2.Visible = true;
datos[1] = "D";
RotarDerecha.Enabled = true;
pictureBox1.Visible = false;
pictureBox2.Visible = true;
}
private void Rotacion_Scroll(object sender, EventArgs e)
{
textBox1.Text = Rotacion.Value.ToString();
}
private void Reset_Click(object sender, EventArgs e)
{
textBox1.Text = "0";
}
private void button1_Click_1(object sender, EventArgs e)
{
// string n = "";
//int t = 0;
//t = Convert.ToInt16(textBox1.Text);
//if (t > 0)
//{
// if (t < 10)
//{
// n = "00" + t;
//}
//else if( t >=10 && t < 100)
//{
// n = "0" + t;
//}
//else
//{
// n = Convert.ToString(t);
//}
//}
//serialPort.Write(n);
//string m = "";
//int k = 0;
//k = Convert.ToInt16(textBox.Text);
//if (k > 0)
//{
// if (k< 10)
//{
// m = "00" + t;
//}
//else if (k >= 10 && k < 100)
//{
// m = "0" + k;
//}
//else
//{
// m= Convert.ToString(k);
//}
//}
//serialPort.Write(m);
//string s =w+":" +d+":"+n +":"+ m;
//serialPort.WriteLine(w);
//serialPort.WriteLine(d);
//serialPort.WriteLine(n);
//serialPort.WriteLine(m);
/////////////////////////////////////////
//Lectura de datos del panel
//String panel_input = Textbox.textbox;
int velocity = 0;
velocity = Convert.ToInt32(textBox1.Text);
int degree = 0;
degree = Convert.ToInt32(textBox.Text);
//Control de flujo
if (velocity >= 10 && velocity <= 100)
{
datos[2] = ("0" + velocity);
}
else if(velocity<10)
{
datos[2] = ("00" + velocity);
}
else
{
datos[2] = Convert.ToString(velocity);
}
if (degree >= 10 && degree <= 100)
{
datos[3] = ("0" + degree);
}
else if(degree<10)
{
datos[3] = ("00" + degree);
}
else
{
datos[3] = Convert.ToString(degree);
}
//Envío de datos
//serialPort
serialPort.WriteLine(datos[0]);
serialPort.WriteLine(datos[1]);
serialPort.WriteLine(datos[2]);
serialPort.WriteLine(datos[3]);
}
}
}
este es el codigo escrito en visual studio que he hecho. Las partes que estan con comentarios es codigo que ya he intentado y no ha funcionado, lo mando por si alguien lo ve mejor asi, pero si es mas lio lo quito.
aqui el codigo de arduino que tengo
int steps = 9; // pin step 9
int direccion = 8; // pin direccion 8
int x;
int datos [3];
void setup(){
Serial.begin(9600);
pinMode(steps, OUTPUT);
pinMode(direccion, OUTPUT);
}
void loop(){
// List<String> datos = new List<String>();
while(Serial.available()>0){
datos[0]=Serial.read();
datos[1]=Serial.read();
datos[2]=Serial.read();
datos[3]=Serial.read();
int hab=datos[0];
int giro=datos[1];
int vel=datos[2];
int stp=datos[3];
if(hab=='1'){
// int c=Serial.read();
if(giro=='I'){
for(x=0;x<=stp;x++){
digitalWrite(direccion,HIGH);
digitalWrite(steps,HIGH);
delayMicroseconds(500);
digitalWrite(steps,LOW);
delayMicroseconds(vel*10);
}
}
else if(hab=='D'){
for(x=0;x<=stp;x++){
digitalWrite(direccion,LOW);
digitalWrite(steps,HIGH);
delayMicroseconds(500);
digitalWrite(steps,LOW);
delayMicroseconds(vel*10);
}
}
}
delay(1000);
}
}
el motor lo controlo con un drv8825
muchas gracias a todo aquel que me intente echar una mano.
Como se puede apreciar soy novato en esto de arduino y c#.
Si algo no se entiende bien preguntarme o indicarme que debo cambiar en este post.