Vale, buenas noticias. Esta ya casi acabado, lo único donde fallo es en los pasos que gira el motor.
He conseguido controlar ya la velocidad de giro, pero aun no que el motor de media vuelta, un cuarto o 3/4, y no se por que ya que estoy usando el mismo método para introducirle los datos.
voy a dejar solo esas partes, ya que lo demás funciona perfectamente.
////periodo=velocidad
private void buttonAplicar_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
serialPort1.WriteLine("periodo"+textBoxPeriodo.Text);
else
MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
}
///steps=giro del motor
private void buttonAplicar2_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
serialPort1.WriteLine("steps"+textBoxSteps.Text);
else
MessageBox.Show("EL PUERTO ESTÁ CERRADO!");
}
#define stp 9
#define dir 8
#define led 13
bool on = false;
bool cw = true;
int periodo = 500;
int steps = 200;
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();
}
digitalWrite(dir, cw ? HIGH : LOW);
if (on == true)
for (x = 0; x < steps; x++)
{
digitalWrite(stp, HIGH);
delay(periodo);
digitalWrite(stp, LOW);
delay(periodo);
}
delay(100);
}
Ahora no recibe la orden y no se por que.
También querría que una vez hecha la orden no la volviera a repetir.
Ahora que por defecto tiene que haga 200 pasos los hace una y otra vez. Cuando bajo de 200 en el valor predefinido tampoco me funciona.