Unir códigos en uno solo para su uso en simultaneo (LEDS y ServoMotor ejecutados con Bluetooth)

Hola a todos, espero que se encuentren muy bien!
Verán, estoy construyendo una maqueta de una casa automatizada, por ahora tengo que encender focos y hacer funcionar un servomotor, ambos códigos por separado funcionan correctamente, pero no logro hacerlos funcionar juntos y me gustaría que así sea, estoy usando arduino NANO, de verdad les agradecería mucho su ayuda.
Los códigos son los siguientes:

#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial BT(10,11);
Servo servo;
int dato = 0;

void setup() {

  BT.begin(9600);
  Serial.begin(9600);
  servo.write(0);
  servo.attach(9);
}

void loop() {

 if (BT.available()){
  dato = BT.read();
   if(dato == '0'){
    servo.write(0);
    BT.print ("0 grados");
    BT.println("-->[Posicion Minima]");
  }
  else if(dato =='9'){
    servo.write(90);
    BT.println("90 grados");
  }
  else if(dato =='I'){
    servo.write(180);
    BT.println("360 grados");
 }



 }
}
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
char DB;
int led1=2;
int led2=3;
int led3=4;
int led4=5;
int led5=6;
int led6=7;
int led7=8;

boolean onled1=LOW;
boolean onled2=LOW;
boolean onled3=LOW;
boolean onled4=LOW;
boolean onled5=LOW;
boolean onled6=LOW;
boolean onled7=LOW;


void setup() {
  BT.begin(9600);
  Serial.begin(9600);

  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  pinMode(led7,OUTPUT);

  digitalWrite(led1,0);
  digitalWrite(led2,0);
  digitalWrite(led3,0);
  digitalWrite(led4,0);
  digitalWrite(led5,0);
  digitalWrite(led6,0);
  digitalWrite(led7,0);

}

void loop() {
  if (BT.available()){

    DB= BT.read();
    Serial.println(DB);
    switch(DB){
  
      case 'a': 
      onled1 = !onled1;
      digitalWrite(led1,onled1? HIGH:LOW);
      break;
   
      case 'b':
      onled2 = !onled2;
      digitalWrite(led2,onled2? HIGH:LOW);
      break;

      case 'c':
      onled3 = !onled3;
      digitalWrite(led3,onled3? HIGH:LOW);
      break;

      case 'd':
      onled4 = !onled4;
      digitalWrite(led4,onled4? HIGH:LOW);
      break;

      case 'e':
      onled5 = !onled5;
      digitalWrite(led5,onled5? HIGH:LOW);
      break;

      case 'f':
      onled6 = !onled6;
      digitalWrite(led6,onled6? HIGH:LOW);
      break;

      case 'g':
      onled7 = !onled7;
      digitalWrite(led7,onled7? HIGH:LOW);
      break;


      }
  }

    delay(10);
   
}

En el primer código usas

  servo.write(0);

0 es un pin dedicado a la comunicación serie. Usa por favor otro pin que no sea ni 0 ni 1.

Le eh cambiado como me has dicho:

#include <SoftwareSerial.h>
#include <Servo.h>
SoftwareSerial BT(10,11);
Servo servo;
int dato = 0;

void setup() {

  BT.begin(9600);
  Serial.begin(9600);
  servo.write(2);
  servo.attach(9);
}
void loop() {

 if (BT.available()){
  dato = BT.read();
   if(dato == '0'){
    servo.write(2);
    BT.print ("0 grados");
    BT.println("-->[Posicion Minima]");
  }
  else if(dato =='9'){
    servo.write(90);
    BT.println("90 grados");
  }
  else if(dato =='I'){
    servo.write(180);
    BT.println("360 grados");
 }



 }
}
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
char DB;
int led1=3;
int led2=4;
int led3=5;
int led4=6;
int led5=7;
int led6=8;

boolean onled1=LOW;
boolean onled2=LOW;
boolean onled3=LOW;
boolean onled4=LOW;
boolean onled5=LOW;
boolean onled6=LOW;


void setup() {
  BT.begin(9600);
  Serial.begin(9600);

  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  

  digitalWrite(led1,0);
  digitalWrite(led2,0);
  digitalWrite(led3,0);
  digitalWrite(led4,0);
  digitalWrite(led5,0);
  digitalWrite(led6,0);
  

}

void loop() {
  if (BT.available()){

    DB= BT.read();
    Serial.println(DB);
    switch(DB){
  
      case 'a': 
      onled1 = !onled1;
      digitalWrite(led1,onled1? HIGH:LOW);
      break;
   
      case 'b':
      onled2 = !onled2;
      digitalWrite(led2,onled2? HIGH:LOW);
      break;

      case 'c':
      onled3 = !onled3;
      digitalWrite(led3,onled3? HIGH:LOW);
      break;

      case 'd':
      onled4 = !onled4;
      digitalWrite(led4,onled4? HIGH:LOW);
      break;

      case 'e':
      onled5 = !onled5;
      digitalWrite(led5,onled5? HIGH:LOW);
      break;

      case 'f':
      onled6 = !onled6;
      digitalWrite(led6,onled6? HIGH:LOW);
      break;

      
      }
  }

    delay(10);
   
}

Sabes que me confundí.

servowrite(0);

no tiene nada que ver con

servo.attach(0);

Acá estan los dos códigos juntos, a ver como se comportan

#include <Arduino.h>

#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11);

char DB;
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;

boolean onled1 = LOW;
boolean onled2 = LOW;
boolean onled3 = LOW;
boolean onled4 = LOW;
boolean onled5 = LOW;
boolean onled6 = LOW;

Servo servo;
int dato = 0;

void setup() {

  BT.begin(9600);
  Serial.begin(9600);
  servo.attach(9);
  servo.write(2);

  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  digitalWrite(led1, 0);
  digitalWrite(led2, 0);
  digitalWrite(led3, 0);
  digitalWrite(led4, 0);
  digitalWrite(led5, 0);
  digitalWrite(led6, 0);
}
void loop() {

  if (BT.available()) {
      DB = BT.read();
      Serial.println(DB);
      switch (DB) {
          case '0': servo.write(2);
                    BT.print("0 grados");
                    BT.println("-->[Posicion Minima]");
                    break;
          case '9': servo.write(90);
                    BT.println("90 grados");
                    break;
          case 'I': servo.write(180);
                    BT.println("360 grados");
                    break;
          case 'a':
                    onled1 = !onled1;
                    digitalWrite(led1, onled1 ? HIGH : LOW);
                    break;
          case 'b':
                    onled2 = !onled2;
                    digitalWrite(led2, onled2 ? HIGH : LOW);
                    break;
          case 'c':
                    onled3 = !onled3;
                    digitalWrite(led3, onled3 ? HIGH : LOW);
                    break;
          case 'd':
                    onled4 = !onled4;
                    digitalWrite(led4, onled4 ? HIGH : LOW);
                    break;
          case 'e':
                    onled5 = !onled5;
                    digitalWrite(led5, onled5 ? HIGH : LOW);
                    break;
          case 'f':
                    onled6 = !onled6;
                    digitalWrite(led6, onled6 ? HIGH : LOW);
                    break;
      }
  }
}

1 Like

Funciona a la perfección, muchas gracias, te agradezco demasiado, eres un grande!.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.