Hola comunidad!
He estado intentando hacer un coche controlado por bluetooth con una aplicación
que he creado en app inventor 2. I la verdad no se que puede estar mal...
Lo que necesito saber es como poder hacer que enviandole un caracter desde la aplicacion al arduino haga un cambio de polaridad o no.
Por ahora he estado haciendo esto:
Con la aplicación:
Slider 1 es para el control de un servomotor (cosa que me va sin problemas pero un pelin más adelante hablaré de el)
Slider 2 es el problema
tiene un rango de 0 a 200 donde 100 es el motor parado, 0 maxima velocidad hacia atras y 200 maxima velocidad hacia adelante.
yo creo que el problema no está en la aplicación pero por si acaso lo dejo.
Donde yo creo que tengo el problema es aqui:
#include <SoftwareSerial.h>
int pin5 = 5;
int pin6 = 6;
char DATO = 0;
SoftwareSerial BT(10,11); //RX, TX
void setup() {
BT.begin(9600);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
}
void loop()
{
if (BT.available())
{
DATO = BT.read();
if ( DATO == "valpos ")
{
digitalWrite(pin6, LOW);
int valor = BT.read();
valor = map(valor, 0, 100, 0, 255);
analogWrite(pin5, valor);
delay(10);
}
if ( DATO == "valneg ")
{
digitalWrite(pin5,LOW);
int valor = BT.read();
valor = map(valor, 0, -100, 0, 255);
analogWrite(pin6, valor);
delay(10);
}
if ( DATO == "val0" )
{
digitalWrite(pin6, LOW);
analogWrite(pin5, 0);
}
}
}
Aqui os dejo la foto del cicuito:
Y si os soy sincero no se donde está el fallo. Segun mi lógica está bien formulado. Pero como es evidente segun a logica de arduino no es así.
Luego, el codigo del servomotor me funciona bien por si solo. Pero despues de hacer funcionar el codigo de los motores me gustaría combinar los dos codigos.
El codigo del servo es este:
#include <SoftwareSerial.h>
#include <Servo.h>
Servo myservo;
int bluetoothTx = 11;
int bluetoothRx = 10;
char letra;
SoftwareSerial bluetooth(bluetoothRx, bluetoothTx);
void setup()
{
myservo.attach(3);
Serial.begin(9600);
bluetooth.begin(9600);
}
void loop()
{
if(bluetooth.available()> 0 )
{
int servopos = bluetooth.read();
delay(10);
Serial.println(servopos);
delay(10);
myservo.write(servopos );
}
}
Y se supone que cuando se junten los dos codigos quedaría así:
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo;
SoftwareSerial BT(10,11); //Rx,Tx
int mot1 = 5;
int mot2 = 6;
int DATO = 0;
char letra;
void setup() {
BT.begin(9600);
pinMode(mot1, OUTPUT);
pinMode(mot2, OUTPUT);
servo.attach(3);
}
void loop() {
if (BT.available())
{
DATO = BT.read();
if ( DATO == "valpos ")
{
digitalWrite(mot2, LOW);
int valor = BT.read();
valor = map(valor, 100, 200, 0, 255);
analogWrite(mot1, valor);
delay(10);
}
if ( DATO == "valneg ")
{
digitalWrite(mot1,LOW);
int valor = BT.read();
valor = map(valor, 0, 100, 0, 255);
analogWrite(mot2, valor);
delay(10);
}
if ( DATO == "val0" )
{
digitalWrite(mot2, LOW);
analogWrite(mot1, 0);
}
if ( DATO == "servo" )
{
int servopos = BT.read();
delay(10);
servo.write(servopos );
}
}
}