hola, es mi primer posteo, mi duda es la siguiente, tengo que hacer lo siguiente,enviar 2 valores por seiral, es asi tengo un motor DC montado con un puente H (para que gire el motor en 2 sentidos, izquierda (I) y derecha(D) y ademas necesito enviar el tiempo que va a estar girando en ese sentido utilizando delay. estuve usando ARRAY donde paso los 2 valores el sentido y el tiempo, y hasta ahora no lo pude ahcer funcionar.
codigo:
int neg=3;
int pos=4;
int input=0;
int letra[1];
int segundos = 1000;
int tiempo = 1;
void setup(){
Serial.begin(9600);
pinMode(neg, OUTPUT);
pinMode(pos, OUTPUT);
}
void loop(){
if (Serial.available())
{
letra[0] = Serial.read();
letra[1] = Serial.read();
if (letra[0]==100 )//El motor girará a la derecha 100 = d en ascii
{
analogWrite(neg, 0);
analogWrite(pos, 255);
Serial.println("La lavadora esta bate a la derecha ");
delay (letra[1] * segundos);
analogWrite(pos, 0);
}
else if (letra[0]==105 ) { //El motor girará a la izquierda 105= i en asii
analogWrite(pos, 0);
analogWrite(neg, 255);
Serial.println("La lavadora esta bate a la izquierda ");
delay (letra[1] * segundos);
analogWrite(neg, 0);
}
else if (letra[0]=='0')//El motor se detendrá
{
digitalWrite(neg, LOW);
digitalWrite(pos, LOW);
Serial.println("Lavadora apagada ");
}
}
}
Lo primero que te voy a recomendar es que leas las normas del foro y en especial el punto 7. Como insertar code tag.
Vuelves a tu post, vas a More, luego Modify, seleccionas todo el código y click en el ícono </>.
Ya está Ricardo. Lo hice yo. Prometo que lo haré por única vez, así le doy posibilidad de aprender como debe hacerlo.

leeré las normas, gracias por corregirme
delay (letra[1] * segundos);
// Si letra[1] == '1', entonces delay(47 * segundos)?
Eso es lo que pretendes? Si no es así, entonces:
letra[1] = Serial.read(); // No
letra[1] = Serial.parseInt(); // Sí
Lucario448:
delay (letra[1] * segundos);
// Si letra[1] == '1', entonces delay(47 * segundos)?
Eso es lo que pretendes? Si no es así, entonces:
letra[1] = Serial.read(); // No
letra[1] = Serial.parseInt(); // Sí
gracias por contestar, lo que necesito es lo siguiente
necesito por sonsola enviar 2 cosas el sentido y el delay por ejemplo D, 1. Donde D ira en sentido derecha y 1 durara 1 segundo
int pos=7; //Pines de salida del Arduino
int neg=6;
char letra;
int tiempo;
void setup(){
Serial.begin(9600);
pinMode(neg, OUTPUT);
pinMode(pos, OUTPUT);
}
void loop(){
if (Serial.available()){
letra = Serial.read();
if (letra=='d' || letra=='D'){ //bate a la derecha
analogWrite(pos, 255);
Serial.println("La lavadora bate a la derecha ");
delay (1000);// lo que necesito ingresar en lugar de 1000, ingresarlo por consola
analogWrite(pos, 0);
}
else if (letra=='i' || letra=='I') { //bate a la izquierda
analogWrite(neg, 255);
Serial.println("La lavadora bate a la izquierda ");
delay (1000); // lo que necesito ingresar en lugar de 1000, ingresarlo por consola
analogWrite(neg, 0);
}
else if (letra=='0'){ //Se detiene
analogWrite(pos, 0);
analogWrite(neg, 0);
Serial.println("Apagada ");
}
}
}
juancis82:
necesito por sonsola enviar 2 cosas el sentido y el delay por ejemplo D, 1. Donde D ira en sentido derecha y 1 durara 1 segundo
Tu problema es fácil de solucionar. Si en la consola digitas "D1", el primer Serial.read() devolverá 'D'; el segundo Serial.read() devolverá '1'.
Nótese bien que el número está entre comillas simples, esto porque lo que se lee es un caracter, no el número en sí. Todo lo que ingreses a la consola del monitor serie, se recibe como texto (comprensible para el ser humano), no en su "forma binaria" si se tratasen de números (comprensible para la máquina).
Por eso, si lees ese '1' tal y como se recibe (como texto); entonces a la hora de involucrarlo en una operación matemática, ese dato se interpretaría con el valor decimal 47 (según la tabla ASCII).
Si lo que quieres es que se lea como un número en verdad, usa la función Serial.parseInt()
PD: si vas a separar los datos con espacios o comas, ahí ya habría que usar strtok u otro método que descarte los caracteres sobrantes...