Salidas digitales invertir al iniciar arduino

Buenas he intentado poder lograr que al momento de energizar el arduino ( obviamente después del boot) las salidas digitales que designé sean high por defecto,esto quiere decir que mis teles de control de activan al recibir un pulso negativo. Por lo cual para evitar un resultado desastroso con mi aplicación, la cual pone en funcionamiento puertas y luces,es necesario que arduino deje en high todas las salidas.
Estoy usando un arduino nano con un un adicional de Bluetooth.
Lo que he intentado hasta el momento es lo siguiente:

#include <SoftwareSerial.h>
#include <Servo.h> 
Servo servo1; 

SoftwareSerial blue(0, 1);   //Crea conexion al bluetooth - PIN 2 a TX y PIN 3 a RX

char NOMBRE[21]  = "CAJON-ELVIS"; // Nombre de 20 caracteres maximo
char BPS         = '4';     // 1=1200 , 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200
char PASS[5]    = "1234";   // PIN O CLAVE de 4 caracteres numericos     
 int estado=0;
int retardo=100;
int analogo=0;

 
void setup()
{
    servo1.attach(4);
 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);
   
    blue.begin(9600); // inicialmente la comunicacion serial a 9600 Baudios (velocidad de fabrica)
    
    blue.print("AT");  // Inicializa comando AT
    delay(100);
 
    blue.print("AT+NAME"); // Configura el nuevo nombre 
    blue.print(NOMBRE);
    delay(100);                  // espera 1 segundo
 
    blue.print("AT+BAUD");  // Configura la nueva velocidad 
    blue.print(BPS); 
    delay(100);
 
    blue.print("AT+PIN");   // Configura el nuevo PIN
    blue.print(PASS); 
    delay(100);    
}
 
void loop()
{   
 
if(blue.available()>0){           // Si el puerto serie esta habilitadp 
        estado = blue.read();      // Lee lo que llega por el puerto Serie
 }
     else {
  digitalWrite(12,HIGH);
  digitalWrite(11,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(9,HIGH);
  digitalWrite(8,HIGH);
  digitalWrite(7,HIGH);
  digitalWrite(6,HIGH); 
    }
     
 if(estado== 'a'){                    // on/off de los pin 13 al pin 6
       digitalWrite(13,HIGH);
 }
 if(estado== 'b' ){
       digitalWrite(13,LOW);
 }
 if(estado== 'c'){ 
       digitalWrite(12,LOW);
       delay(5000);
       digitalWrite(12,HIGH);
 }
 if(estado== 'd' ){
       digitalWrite(12,HIGH);
 }
 if(estado== 'e'){ 
       digitalWrite(11,LOW);
 }
 if(estado== 'f' ){
       digitalWrite(11,HIGH);
 }
 if(estado== 'g' ){
       digitalWrite(10,LOW);
 }
 if(estado== 'h' ){
       digitalWrite(10,HIGH);
 }
 if(estado== 'i' ){
        digitalWrite(9,LOW);
 }
 if(estado== 'j' ){
       digitalWrite(9,HIGH);
      }
 if(estado== 'k' ){
        digitalWrite(8,LOW);
 }
 if(estado== 'l' ){
      digitalWrite(8,HIGH);
 }
 if(estado== 'm' ){
       digitalWrite(7,LOW);
 }
 if(estado== 'n' ){
       digitalWrite(7,HIGH);
 }
 if(estado== 'o' ){
      digitalWrite(6,LOW);
 }
 if(estado== 'p' ){
       digitalWrite(6,HIGH);
 }
 if(estado== 'A' ){      // Movimiento del SERVO
      servo1.write(0);  
      }
 if(estado== 'B' ){
      servo1.write(90); 
      }
 if(estado== 'C' ){
      servo1.write(180);  
      }
 
 if(estado=='s'){       //  Dimer 1 conectado al pin 5
        analogWrite(5,0);
       }
      
 if(estado=='t'){
        analogWrite(5,3);
       }   
if(estado=='u'){
        analogWrite(5,8);
       }  
if(estado=='v'){
        analogWrite(5,20);
       }  
if(estado=='w'){
        analogWrite(5,30);
       }  
if(estado=='x'){
        analogWrite(5,60);
       }  
if(estado=='y'){
        analogWrite(5,125);
       }  
if(estado=='z'){
        analogWrite(5,255);
       }         
       
       
 
 if(estado=='1'){               //  Dimer 2 conectado al pin 3
        analogWrite(3,0);
       }
      
 if(estado=='2'){
        analogWrite(3,3);
       }   
if(estado=='3'){
        analogWrite(3,8);
       }  
if(estado=='4'){
        analogWrite(3,20);
       }  
if(estado=='5'){
        analogWrite(3,30);
       }  
if(estado=='6'){
        analogWrite(3,60);
       }  
if(estado=='7'){
        analogWrite(3,125);
       }  
if(estado=='8'){
        analogWrite(3,255);
       }    
      
if(estado=='q'){         // envia el valor leido del puerto analogo A0
  analogo=analogRead(A1);
  Serial.print(analogo);
  Serial.println("°C");
  delay (retardo);
  estado=0;
 }
 delay(retardo);
 }

tambien intente de esta forma:

#include <SoftwareSerial.h>
#include <Servo.h> 
Servo servo1; 

SoftwareSerial blue(0, 1);   //Crea conexion al bluetooth - PIN 2 a TX y PIN 3 a RX

char NOMBRE[21]  = "CAJON-ELVIS"; // Nombre de 20 caracteres maximo
char BPS         = '4';     // 1=1200 , 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200
char PASS[5]    = "1234";   // PIN O CLAVE de 4 caracteres numericos     
 int estado=0;
int retardo=100;
int analogo=0;

 
void setup()
{
    servo1.attach(4);
 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);
  digitalWrite(12,HIGH);
  digitalWrite(11,HIGH);
  digitalWrite(10,HIGH);
  digitalWrite(9,HIGH);
  digitalWrite(8,HIGH);
  digitalWrite(7,HIGH);
  digitalWrite(6,HIGH); 
    
   
    blue.begin(9600); // inicialmente la comunicacion serial a 9600 Baudios (velocidad de fabrica)
    
    blue.print("AT");  // Inicializa comando AT
    delay(100);
 
    blue.print("AT+NAME"); // Configura el nuevo nombre 
    blue.print(NOMBRE);
    delay(100);                  // espera 1 segundo
 
    blue.print("AT+BAUD");  // Configura la nueva velocidad 
    blue.print(BPS); 
    delay(100);
 
    blue.print("AT+PIN");   // Configura el nuevo PIN
    blue.print(PASS); 
    delay(100);    
}
 
void loop()
{   
 
if(blue.available()>0){           // Si el puerto serie esta habilitadp 
        estado = blue.read();      // Lee lo que llega por el puerto Serie
 }

     
 if(estado== 'a'){                    // on/off de los pin 13 al pin 6
       digitalWrite(13,HIGH);
 }
 if(estado== 'b' ){
       digitalWrite(13,LOW);
 }
 if(estado== 'c'){ 
       digitalWrite(12,LOW);
       delay(5000);
       digitalWrite(12,HIGH);
 }
 if(estado== 'd' ){
       digitalWrite(12,HIGH);
 }
 if(estado== 'e'){ 
       digitalWrite(11,LOW);
 }
 if(estado== 'f' ){
       digitalWrite(11,HIGH);
 }
 if(estado== 'g' ){
       digitalWrite(10,LOW);
 }
 if(estado== 'h' ){
       digitalWrite(10,HIGH);
 }
 if(estado== 'i' ){
        digitalWrite(9,LOW);
 }
 if(estado== 'j' ){
       digitalWrite(9,HIGH);
      }
 if(estado== 'k' ){
        digitalWrite(8,LOW);
 }
 if(estado== 'l' ){
      digitalWrite(8,HIGH);
 }
 if(estado== 'm' ){
       digitalWrite(7,LOW);
 }
 if(estado== 'n' ){
       digitalWrite(7,HIGH);
 }
 if(estado== 'o' ){
      digitalWrite(6,LOW);
 }
 if(estado== 'p' ){
       digitalWrite(6,HIGH);
 }
 if(estado== 'A' ){      // Movimiento del SERVO
      servo1.write(0);  
      }
 if(estado== 'B' ){
      servo1.write(90); 
      }
 if(estado== 'C' ){
      servo1.write(180);  
      }
 
 if(estado=='s'){       //  Dimer 1 conectado al pin 5
        analogWrite(5,0);
       }
      
 if(estado=='t'){
        analogWrite(5,3);
       }   
if(estado=='u'){
        analogWrite(5,8);
       }  
if(estado=='v'){
        analogWrite(5,20);
       }  
if(estado=='w'){
        analogWrite(5,30);
       }  
if(estado=='x'){
        analogWrite(5,60);
       }  
if(estado=='y'){
        analogWrite(5,125);
       }  
if(estado=='z'){
        analogWrite(5,255);
       }         
       
       
 
 if(estado=='1'){               //  Dimer 2 conectado al pin 3
        analogWrite(3,0);
       }
      
 if(estado=='2'){
        analogWrite(3,3);
       }   
if(estado=='3'){
        analogWrite(3,8);
       }  
if(estado=='4'){
        analogWrite(3,20);
       }  
if(estado=='5'){
        analogWrite(3,30);
       }  
if(estado=='6'){
        analogWrite(3,60);
       }  
if(estado=='7'){
        analogWrite(3,125);
       }  
if(estado=='8'){
        analogWrite(3,255);
       }    
      
if(estado=='q'){         // envia el valor leido del puerto analogo A0
  analogo=analogRead(A1);
  Serial.print(analogo);
  Serial.println("°C");
  delay (retardo);
  estado=0;
 }
 delay(retardo);
 }

Sin precisar como tienes conectados los reles no sabemos si hay qeu accionarlos o no. Supongo que tu comando

digitalWrite(13, HIGH); no sirve entonces prueba con el opuesto

si esto funciona

digitalWrite(13, LOW);

Entonces no se como los has conectado a la salida de los reles, supongo que has usado el contacto NC en lugar del NO. Con eso quiero decir que normalmente un modulo RELE de Arduino con HIGH esta apagado porque tiene lógica inversa.

buenas gracias por tu respuesta, te comento los reles que poseo son optocoplados, al igual que muchos, la diferencia radica en que este opto se va a HIGH si recibe un LOW. que quiere decir que al moemento de mi soft enviar un HIGH por la salida el rele se apaga y vice versa, lo que sucede que al pasar esto al momento de quitar la energia del arduino y volver a energizar el arduino envia un LOW con lo que mi opto activa el rele con lo cual enciende cada cosa que esta conectado a el, son 8 reles en total y todos con la misma configuracion. lo que yo necesito lograr es que al iniciar el arduino por defecto me tire un HIGH por las salidas que yo asigne. luego el resto lo hara el Loop

buenas gracias por tu respuesta, te comento los reles que poseo son optocoplados, al igual que muchos, la diferencia radica en que este opto se va a HIGH si recibe un LOW.

Tratemos de entendernos. ya sabemos que hay un optoacoplador. usas la salida NO Normal OPEN? O sea un LOW en tu arduino provoca que ese NO se cierre? Cuando se corta la energía tienes un LOW y se cierra tu Salida? si es asi usa la opuesta y listo. Usa la que al apagarse el arduino esta en el estado que deseas y cuando lo inicalizas lo pones justamente en LOW porque usarás el conctacto NC Normal Cerrado. Si no tienes energia NC estara abierto. Si tienes Arduino energizado le aplicas un low en el setup y será lo mismo, NC abierto

correcto lo he intentado asi pero al iniciar arduino me tira un LOW y entran los reles por 1 segundo o menos y luego vuelve a HIGH lo que deja los reles apagados.
al estar el arduino apagado obviamnte no hay LOW si no 0 y los reles quedan N.O
lo que sucede es:

+5V ====> Arduino Boot ====> Salidas Digitales>LOW <====>Rele Accionado==> 1 segundo despues====> Salida HIGH===>Rele en Rposo

quiero evitar ese LOW

Les adjunto un video del comportamiento con este Soft:

#include <SoftwareSerial.h>
#include <Servo.h>
Servo servo1;

SoftwareSerial blue(0, 1);   //Crea conexion al bluetooth - PIN 2 a TX y PIN 3 a RX

char NOMBRE[21]  = "CAJON-ELVIS"; // Nombre de 20 caracteres maximo
char BPS         = '4';     // 1=1200 , 2=2400, 3=4800, 4=9600, 5=19200, 6=38400, 7=57600, 8=115200
char PASS[5]    = "1234";   // PIN O CLAVE de 4 caracteres numericos
int estado = 0;
int retardo = 100;
int analogo = 0;

void setup()
{
  servo1.attach(4);
  pinMode(13, OUTPUT);
  pinMode(13, HIGH);
  pinMode(12, OUTPUT);
  pinMode(12, HIGH);
  pinMode(11, OUTPUT);
  pinMode(11, HIGH);
  pinMode(10, OUTPUT);
  pinMode(10, HIGH);
  pinMode(9, OUTPUT);
  pinMode(9, HIGH);
  pinMode(8, OUTPUT);
  pinMode(8, HIGH);
  pinMode(7, OUTPUT);
  pinMode(7, HIGH);
  pinMode(6, OUTPUT);
  pinMode(6, HIGH);
  pinMode(5, OUTPUT);
  pinMode(5, HIGH);
  pinMode(4, OUTPUT);
  pinMode(4, HIGH);
  pinMode(3, OUTPUT);
  pinMode(3, HIGH);

  blue.begin(9600); // inicialmente la comunicacion serial a 9600 Baudios (velocidad de fabrica)

  blue.print("AT");  // Inicializa comando AT


  blue.print("AT+NAME"); // Configura el nuevo nombre
  blue.print(NOMBRE);
  // espera 1 segundo

  blue.print("AT+BAUD");  // Configura la nueva velocidad
  blue.print(BPS);

  blue.print("AT+PIN");   // Configura el nuevo PIN
  blue.print(PASS);
}

void loop()
{
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  if (blue.available() > 0) {       // Si el puerto serie esta habilitadp
    estado = blue.read();      // Lee lo que llega por el puerto Serie
  }

  if (estado == 'a') {                 // on/off de los pin 13 al pin 6
    digitalWrite(13, HIGH);
  }
  if (estado == 'b' ) {
    digitalWrite(13, LOW);
  }
  if (estado == 'c') {

    digitalWrite(12, LOW);
    delay(1000);
    estado = 'd';
  }
  if (estado == 'd' ) {
    digitalWrite(12, HIGH);
  }
  if (estado == 'e') {
    digitalWrite(11, LOW);
  }
  if (estado == 'f' ) {
    digitalWrite(11, HIGH);
  }
  if (estado == 'g' ) {
    digitalWrite(10, LOW);
  }
  if (estado == 'h' ) {
    digitalWrite(10, HIGH);
  }
  if (estado == 'i' ) {
    digitalWrite(9, LOW);
  }
  if (estado == 'j' ) {
    digitalWrite(9, HIGH);
  }
  if (estado == 'k' ) {
    digitalWrite(8, LOW);
  }
  if (estado == 'l' ) {
    digitalWrite(8, HIGH);
  }
  if (estado == 'm' ) {
    digitalWrite(7, LOW);
  }
  if (estado == 'n' ) {
    digitalWrite(7, HIGH);
  }
  if (estado == 'o' ) {
    digitalWrite(6, LOW);
  }
  if (estado == 'p' ) {
    digitalWrite(6, HIGH);
  }
  if (estado == 'A' ) {   // Movimiento del SERVO
    servo1.write(0);
  }
  if (estado == 'B' ) {
    servo1.write(90);
  }
  if (estado == 'C' ) {
    servo1.write(180);
  }

  if (estado == 's') {   //  Dimer 1 conectado al pin 5
    analogWrite(5, 0);
  }

  if (estado == 't') {
    analogWrite(5, 3);
  }
  if (estado == 'u') {
    analogWrite(5, 8);
  }
  if (estado == 'v') {
    analogWrite(5, 20);
  }
  if (estado == 'w') {
    analogWrite(5, 30);
  }
  if (estado == 'x') {
    analogWrite(5, 60);
  }
  if (estado == 'y') {
    analogWrite(5, 125);
  }
  if (estado == 'z') {
    analogWrite(5, 255);
  }



  if (estado == '1') {           //  Dimer 2 conectado al pin 3
    analogWrite(3, 0);
  }

  if (estado == '2') {
    analogWrite(3, 3);
  }
  if (estado == '3') {
    analogWrite(3, 8);
  }
  if (estado == '4') {
    analogWrite(3, 20);
  }
  if (estado == '5') {
    analogWrite(3, 30);
  }
  if (estado == '6') {
    analogWrite(3, 60);
  }
  if (estado == '7') {
    analogWrite(3, 125);
  }
  if (estado == '8') {
    analogWrite(3, 255);
  }

  if (estado == 'q') {     // envia el valor leido del puerto analogo A0
    analogo = analogRead(A1);
    Serial.print(analogo);
    Serial.println("°C");
    delay (retardo);
    estado = 0;
  }
  delay(retardo);
}

un videillo

Cuando el ATmega328P ( u otro microcontrolador Atmel usado) se inicializa con un Power-ON por ejemplo, los pines quedan configurados como “inputs” y por lo tanto en modo alta impedancia. Esta condicion no puede disparar ningun optoacoplador ni ningun rele.
Lo que suceda a partir de ese momento tras el Power-ON es decision exclusiva del software que corre en el microcontrolador, y es ahi (pienso yo) donde hay que aplicar el remedio.

Justamente por eso le digo que cambie su forma de pensar!! Que use las salida del RELE que se comporte en el arranque como el quiere que lo haga. Entonces debe pensar como ajustar el código a esa salida y no a la opuesta.

Mi comentario intenta establecer un estado "conocido" de la electronica del chip, en este caso definido por el fabricante, para a partir de ahi poder ir analizando el software. De otro modo podria parecer que es aleatorio el estado de los pines y por lo tanto "inexplicable" la forma de funcionar. Saludos.

Comprendo bien lo que expresan ambos, pero soy yo el que no está explicando bien. Si el rele al alimentar arduino se activa es lógico pensar que debo usar el contacto opuesto para asegurar que actúe como on off, Pero el sistema no consta de sólo 2 Estados que serían rele actuado o no actuado a esto hay que sumarle sistema apagado,puedo cambiar en el software los estados en el loop eso está claro pero al hacer esto debería usar el contacto N.C de mi rele y esto haría que al apagar el sistema la carga conectada a ese rele se Active. Cosa que no es para nada buena, por ende mi pregunta radica en,como evitar el que suceda lo anterior Saludos y de verdad les agradezco si ayuda y tiempo

Por lo visto sólo me queda darle autonomía al arduino acoplado una batería y así evitar que en cualquier caso el equipo quede sin alimentación y se me cree el lío

No te he respondido porque me di cuenta que estaba en un punto equivocado.
Asi que voy a probar lo que dices y te daré una respuesta PROBADA.
Justamente trabajando con un ESP8266 tengo un problema similar pero no le di la importancia que tu indicas porque uso los contactos justamente en la posición en la que des energizados no comprometen la carga que controlan (en mi caso un motor).
Veré de hacer lo mismo con Arduino y te comento.

Si no me he perdido, en mis pruebas iniciales de aprendizaje me pasaba esto, y lo "solucioné", si no recuerdo mal, poniendo resistencias de positivo a cada salida, ya que hay placas con relés que estando a cero es cuando se activa, y poniendo una resistencia, me dejaba de hacer estos pulsos "erróneos"(luego ya cambió todo y no está en servicio), pero me parece recordar que así me iba bien en el aranque

Probare el tema de las resistencias desde +5 a las salidas y vere que pasa

Buenas les comento que hasta ahora la mejor solución ha sido con una batería de respaldo al arduino.

Yo entiendo bien el problema, me pasa lo mismo. En mi sistema no puedo permitir que los reles de salida parpadeen al arrancar el Arduino.
Si encuentro una solucion te comento

Podrias quitar el jumper 'Vcc JD-Vcc" de la placa de reles y alimentarlos desde una salida de arduino.

Del pin de salida al pin JD-Vcc.

Asi tendrias control sobre cuando estan alimemtados los reles.

No lo he provado, se me acaba de ocurrir.

La solución es como dice Sebas quitando el Jumper. Alimentando con 5V JD-VCC Por otro lado si tienes 3.3V lo conectas a VCC. Compartes GND en ambos casos y la salida del arduino a los INX Asi funciona con 3.3V

Hola amigos, es claro el problema en estos casos....la mayoría de los fabricantes de los módulos de reles (o todos) por algún motivo ( que no comprendo) aceptaron como única norma la de activo en bajo, a mi entender un despropósito por desaprovechar la placa con optoacopladores, tendrían que haber dejado a disposición ánodo y cátodo del opto y así se solucionaba todo dándole algo más de flexibilidad a nuestros proyectos. Como bien dice sebas82 es la única solución que pude darle a mi proyecto con 4 reles y un receptor 433, con lo cual fue necesario cambiar el micro Attiny85 por no tener más pines para alimentar JD-Vcc, una pena....Claro está que utilizando módulos de a 1 rele esto no pasaría. Saludos