2019/02/17

Arduino Robot v09 Tupperbot (V)

Código básico para  controlar el movimiento del robot desde el mando a distancia:

Código del transmisor (mando a distancia)
//Arduino Robot v09_04 2019/02/17
//Diseño y programación: Antonio Vallecillos, @a_vallecillos
//Código del transmisor (mando a distancia)

#include <VirtualWire.h>

boolean running = true;
char *controller;
int xPin = A5;
int yPin = A0;
int buttonPin = 2;

int xPosition = 0;
int yPosition = 0;
int buttonState = 1;

void setup(){
  Serial.begin(9600);
  pinMode(xPin, INPUT);
  pinMode(yPin, INPUT);
  pinMode(13, OUTPUT);

  vw_set_ptt_inverted(true); //
  vw_set_tx_pin(12); //Transmisor conectado al pin 12
  vw_setup(4000); //Velocidad de transmisión en bits por segundo
}

void loop(){
  xPosition = analogRead(xPin);
  yPosition = analogRead(yPin);
  buttonState = digitalRead(buttonPin);
  
  Serial.print("X: ");
  Serial.print(xPosition);
  Serial.print(" | Y: ");
  Serial.print(yPosition);
  Serial.print(" | Emitiendo: ");
  Serial.println(controller);
  
  if (xPosition <= 300 && 300 > yPosition <  700){
    controller="l";
    vw_send((uint8_t *)controller, strlen(controller));
    vw_wait_tx(); //Espera hasta que el mensaje completo ha salido
    digitalWrite(13,1);
  }else  if ( 300 > yPosition <  700 && xPosition >  700){
    controller="r";
    vw_send((uint8_t *)controller, strlen(controller));
    vw_wait_tx(); //Espera hasta que el mensaje completo ha salido
    digitalWrite(13,1);
  }else  if (300 > xPosition <  700 && yPosition <= 300){
    controller="u";
    vw_send((uint8_t *)controller, strlen(controller));
    vw_wait_tx(); //Espera hasta que el mensaje completo ha salido
    digitalWrite(13,1);
  }else   if (300 > xPosition <  700 && yPosition >  700){
    controller="d";
    vw_send((uint8_t *)controller, strlen(controller));
    vw_wait_tx(); //Espera hasta que el mensaje completo ha salido
    digitalWrite(13,1);
  }else if (300 > xPosition <  700 && 300 > yPosition <  700){
    controller="0";
    vw_send((uint8_t *)controller, strlen(controller));
    vw_wait_tx(); //Espera hasta que el mensaje completo ha salido
    digitalWrite(13,0);
  }
}

Código del receptor (vehículo)
//Arduino Robot v09_04 2019/02/17
//Diseño y programación: Antonio Vallecillos, @a_vallecillos
//Código del receptor (vehículo)

#include <VirtualWire.h>

void setup(){
  vw_set_ptt_inverted(true);
  vw_set_rx_pin(12); //Receptor conectado al pin 12
  vw_setup(4000); //Velocidad de recepción en bits por segundo
  pinMode(13,OUTPUT);

  pinMode(10, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  
  analogWrite(10, 0);
  analogWrite(11, 0);
  
  vw_rx_start(); //Inicia el receptor
}

void loop(){
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  
  if (vw_get_message(buf, &buflen)){
    if(buf[0]=='0'){
    digitalWrite(13,LOW);
    analogWrite(10,0);
    analogWrite(11,0);
    }
    if(buf[0]=='l'){
    digitalWrite(13,HIGH);
    analogWrite(10,255);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    analogWrite(11,255);
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    }
    if(buf[0]=='r'){
    digitalWrite(13,HIGH);
    analogWrite(10,255);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);
    analogWrite(11,255);
    digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    }
    if(buf[0]=='u'){
    digitalWrite(13,HIGH);
    analogWrite(10,255);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    analogWrite(11,255);
    digitalWrite(6,LOW);
    digitalWrite(7,HIGH);
    }
    if(buf[0]=='d'){
    digitalWrite(13,HIGH);
    analogWrite(10,255);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);
    analogWrite(11,255);
    digitalWrite(6,HIGH);
    digitalWrite(7,LOW);
    }
  }
}