Hola!
Llevo un tiempo construyendo este robot basado en arduino
, he trabajado en varios de sus sectores tales como comunicaciones,hardware, codigo, ahora la parte mecanica esta relativamente terminada y deseo enfocarme un poco mas en el codigo, el codigo que posteo mas abajo ejecuta de manera basica los componentes de hardware a fin de probar motores posicones y comunicacion inalambrica pero tiene la limitacion de ser incapaz de realizar varias acciones a la vez es decir no puedo pestañear y abrir la boca simultaneamente, sino que debo esperar a que cada secuencia condicionada termine para que comience otra.
como se trata este problema a nivel de codigo?
como puedo ejecutar un proceso antes de que termine el anterior?
como se llamaria esta metodologia?, (para ir aprendiendo conceptos)
#include <SoftwareSerial.h>;
#define rxPin 2
#define txPin 1
char prevChar = 0;
int i = 0;
int a = 0;
SoftwareSerial rfSerial = SoftwareSerial(rxPin, txPin);
void setup(){
pinMode(rxPin, INPUT);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(3, OUTPUT);
rfSerial.begin(2400); // begin serial connection with RF Link unit
Serial.begin(2400); // begin serial communication over USB to the computer
digitalWrite(13, HIGH);
digitalWrite(4, HIGH);
digitalWrite(3, HIGH);
}
void loop(){
byte someChar = 0;
someChar = rfSerial.read(); // read whatever the RF Link has to offer
if(someChar==45){
//adelante
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
delay(200);
}
if(someChar==54){
//atras
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);
delay(200);
}
if(someChar==73){
//derecha
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(8, HIGH);
digitalWrite(7, LOW);// sets the LED on
delay(200);
}
if(someChar==77){
//izq
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(8, LOW);
digitalWrite(7, HIGH);// sets the LED on
delay(200);
}
if(someChar==34){
//ojos
for(i=0;i<20;i++){
digitalWrite(6, HIGH); // Turn the L motor on
delayMicroseconds(850); // Length of the pulse sets the motor position
digitalWrite(6, LOW); // Turn the L motor off
delay(20);
}
delay(50);
for(i=0;i<20;i++){
digitalWrite(6, HIGH); // Turn the L motor on
delayMicroseconds(300); // Length of the pulse sets the motor position
digitalWrite(6, LOW); // Turn the L motor off
delay(20);
}
delay(50);
}
if(someChar==43){
//boca
for(i=0;i<20;i++){
digitalWrite(5, HIGH); // Turn the L motor on
delayMicroseconds(750); // Length of the pulse sets the motor position
digitalWrite(5, LOW); // Turn the L motor off
delay(20);
}
delay(50);
for(i=0;i<20;i++){
digitalWrite(5, HIGH); // Turn the L motor on
delayMicroseconds(550); // Length of the pulse sets the motor position
digitalWrite(5, LOW); // Turn the L motor off
delay(20);
}
delay(50);
}
// digitalWrite(12,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
digitalWrite(7,LOW);
Serial.println(someChar,DEC);
}