#include <Servo.h>
int motorPin1 = 2; // Pin IN1 (sentido horario) para el motor DC
int motorPin2 = 3; // Pin IN2 (sentido antihorario) para el motor DC
int enablePin = 9; // Pin PWM para la velocidad del motor DC (sentido horario)
int enablePin2 = 11; // Pin PWM para la velocidad del motor DC (sentido antihorario)
int servoPin = 6; // Pin para el control del servo motor
int ledPin1 = 5; // Pin para el primer LED analógico
int ledPin2 = 4; // Pin para el segundo LED analógico
int ledPin3 = 7; // Pin para el tercer LED analógico
int ledPin4 = 8; // Pin para el cuarto LED analógico
Servo myservo; // Objeto de la clase Servo para controlar el servo motor
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(enablePin2, OUTPUT);
pinMode(ledPin1, OUTPUT); // Configurar el primer pin del LED como salida
pinMode(ledPin2, OUTPUT); // Configurar el segundo pin del LED como salida
pinMode(ledPin3, OUTPUT); // Configurar el tercer pin del LED como salida
pinMode(ledPin4, OUTPUT); // Configurar el cuarto pin del LED como salida
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 0);
analogWrite(enablePin2, 0);
myservo.attach(servoPin); // Asocia el pin del servo motor con el objeto myservo
Serial.begin(9600); // Inicia la comunicación serial con el monitor serie
Serial1.begin(9600); // Inicia la comunicación serial con el módulo Bluetooth HC-06 (pines Rx y Tx del Arduino RP2040)
}
void loop() {
// Espera comandos a través de la comunicación Bluetooth
// Recibe los comandos desde la aplicación móvil y actúa en consecuencia
if (Serial1.available()) {
char data = Serial1.read();
if (data == 'S') {
// Recibe el valor de velocidad del deslizador en la aplicación para el motor DC
int speed = Serial1.parseInt();
// Ajusta el valor de velocidad a un rango válido (0 - 255) para el motor DC
speed = constrain(speed, 0, 255);
// Controla la dirección del motor DC en sentido horario
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
// Establece la velocidad del motor DC utilizando el pin enablePin
analogWrite(enablePin, speed);
analogWrite(enablePin2, 0); // Detiene el motor DC en sentido antihorario
}
if (data == 'D') {
// Recibe el valor de velocidad del deslizador en la aplicación para el motor DC
int speed = Serial1.parseInt();
// Ajusta el valor de velocidad a un rango válido (0 - 255) para el motor DC
speed = constrain(speed, 0, 255);
// Controla la dirección del motor DC en sentido antihorario
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
// Establece la velocidad del motor DC utilizando el pin enablePin2
analogWrite(enablePin2, speed);
analogWrite(enablePin, 0); // Detiene el motor DC en sentido horario
}
if (data == 'P') {
// Recibe el valor del deslizador en la aplicación para el servo motor
int sliderValue = Serial1.parseInt();
// Ajusta el valor del deslizador a un rango válido (0 - 180) para el servo motor
int servoPosition = constrain(sliderValue, 0, 180);
// Controla el servo motor
myservo.write(servoPosition); // Mueve el servo motor a la posición correspondiente
}
if (data == 'L') {
// Recibe el valor del deslizador en la aplicación para el brillo del primer LED
int brightnessValue1 = Serial1.parseInt();
// Ajusta el valor del deslizador a un rango válido (0 - 255) para el brillo del primer LED
int ledBrightness1 = constrain(brightnessValue1, 0, 255);
// Controla el brillo del primer LED analógico utilizando PWM
analogWrite(ledPin1, ledBrightness1);
}
if (data == 'M') {
// Recibe el valor del deslizador en la aplicación para el brillo del segundo LED
int brightnessValue2 = Serial1.parseInt();
// Ajusta el valor del deslizador a un rango válido (0 - 255) para el brillo del segundo LED
int ledBrightness2 = constrain(brightnessValue2, 0, 255);
// Controla el brillo del segundo LED analógico utilizando PWM
analogWrite(ledPin2, ledBrightness2);
}
if (data == 'N') {
// Recibe el valor del deslizador en la aplicación para el brillo del tercer LED
int brightnessValue3 = Serial1.parseInt();
// Ajusta el valor del deslizador a un rango válido (0 - 255) para el brillo del tercer LED
int ledBrightness3 = constrain(brightnessValue3, 0, 255);
// Controla el brillo del tercer LED analógico utilizando PWM
analogWrite(ledPin3, ledBrightness3);
}
if (data == 'O') {
// Recibe el valor del deslizador en la aplicación para el brillo del cuarto LED
int brightnessValue4 = Serial1.parseInt();
// Ajusta el valor del deslizador a un rango válido (0 - 255) para el brillo del cuarto LED
int ledBrightness4 = constrain(brightnessValue4, 0, 255);
// Controla el brillo del cuarto LED analógico utilizando PWM
analogWrite(ledPin4, ledBrightness4);
}
}
}
This is your code posted properly using the code tags. If you are going to use this forum, you will have to learn how to use this format.
There's a discussion here as well as in #7 here.
I understand you Bluetooth and BLE issues. The ESP32 is an advanced board with Bluetooth, BLE, and wifi. You might want to take a look at it.
The issue with pins 2 and 3 and the slider make no sense to me. I don't have an Nano RP2040 to investigate.
In other Arduinos, because of the timers used, there issue with Servos and PWM on some pins. I don't know how this applies to the Nano RP2040, but your anomaly about pins 9 and 10 not having pwm unless pins 2 and 3 are in the code deserves some investigation.