Variables vuelven a 0

Hola buenas tardes, quisiera saber si estoy declarando mal las variables, probe declarar en el setup y fuera del mismo, pero siempre vuelven a 0.
El problema es el siguiente: Ingreso 1er dato por bt y lo almacena como pin, 2 dato lo almacena como hora encendido, 3ro minuto encendido, 4to hora apagado y 5to minuto apagado.

Al realizar la lectura del 5to dato pido que muestre por el serial los datos almacenados y me ocurre que todos los datos, menos el ultimo ingresado vuelven a 0.

Las variables en cuestion son:

 int dato;
 int pin;
 int vuelta;
 int horaPinOn;
 int minutoPinOn;
 int horaPinOff;
 int minutoPinOff;

Adjunto codigo

#include <SoftwareSerial.h>
#include <SPI.h>      // incluye libreria bus SPI
#include <RTClib.h>

SoftwareSerial miBT(6,7);
int corriente1 = A0; //LIVING
int corriente2 = A2; //COCINA

float voltaje_entrada;
float voltaje_final;
float voltaje_entrada2;
float voltaje_final2;
float resistencia1 = 47000;
float resistencia2 = 10000; 

int sector1=1;
int living =8;
int cocina =9;
int enchufe=10;

RTC_DS1307 RTC;
char sale;
String readString;
char c=miBT.read();

void setup() {
  Serial.begin(9600);
  miBT.begin(38400);
  RTC.begin();
//  SPI.begin();      
  int dato;
  int pin;
  int vuelta;
  int horaPinOn;
  int minutoPinOn;
  int horaPinOff;
  int minutoPinOff;  
  
  //DECLARAMOS LOS PINES
  pinMode(corriente1, INPUT);
  pinMode(corriente2, INPUT);
  pinMode(living,OUTPUT);
  pinMode(cocina,OUTPUT);
  pinMode(enchufe,OUTPUT);

  digitalWrite(living,HIGH);
  digitalWrite(cocina,HIGH);
  digitalWrite(enchufe,HIGH);
}

//INICIO DEL PROGRAMA
void loop() {

  //DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
  DateTime fecha = RTC.now(); //OBTIENE HORA Y FECHA
  c="";
  readString="";
  //int estEnchufe = digitalRead(enchufe);
  
  while(miBT.available()){
    c=miBT.read();
    readString+=c;
  }
   if(readString.length()>0){
    
    if (readString =="LIVING"){
      digitalWrite(living,!digitalRead(living));
    }    
    if (readString =="COCINA"){
      digitalWrite(cocina,!digitalRead(cocina));
    }   
    if (readString =="ENCHUFE"){
      digitalWrite(enchufe,!digitalRead(enchufe));
    } 
    if (readString =="SECTORUNO"){
      EstadoOk(sector1);  
    }          
    if (readString =="UNO"){
       pin=1;
       vuelta++;}
    if (readString =="DOS"){
       pin=2;
       vuelta++;}
    if (readString =="TRES"){
       pin=3;
       vuelta++;}
    if (readString =="CUATRO"){
       pin=4;
       vuelta++;}
    if (readString =="CINCO"){
       pin=5;
       vuelta++;}
    if (readString =="SEIS"){
       pin=6;
       vuelta++;}
    if (readString =="SIETE"){
       pin=7;
       vuelta++;}
    if (readString =="OCHO"){
       pin=8;
       vuelta++;}
    if (readString =="NUEVE"){
       pin=9;
       vuelta++;}
    if (readString =="DIEZ"){
       pin=10;
       vuelta++;}
    if (readString =="ONCE"){
       pin=11;
       vuelta++;}
    if (readString =="DOCE"){
       pin=12;
       vuelta++;}
    if (readString =="TRECE"){
       pin=13;
       vuelta++;}
    if (readString =="CATORCE"){
       pin=14;
       vuelta++;}
    if (readString =="QUINCE"){
       pin=15;
       vuelta++;}
    if (readString =="DIECISEIS"){
       pin=16;
       vuelta++;}
    if (readString =="DIECISIETE"){
       pin=17;
       vuelta++;}
    if (readString =="DIECIOCHO"){
       pin=18;
       vuelta++;}
    if (readString =="DIECINUEVE"){
       pin=19;
       vuelta++;}
    if (readString =="VEINTE"){
       pin=20;
       vuelta++;}
    if (readString =="VEINTIUNO"){
       pin=21;
       vuelta++;}
    if (readString =="VEINTIDOS"){
       pin=22;
       vuelta++;}
    if (readString =="VEINTITRES"){
       pin=23;
       vuelta++;}
    if (readString =="VEINTICUATRO"){
       pin=24;
       vuelta++;}
    if (readString =="TREINTA"){
       pin=30;
       vuelta++;}
    if (readString =="CUACINCO"){
       pin=45;
       vuelta++;}
    if (readString =="CERO"){
       pin=0;
       vuelta++;}
    }
   if(vuelta==1){
     dato=pin;

   }else if(vuelta==2){
     horaPinOn=pin;

   }else if(vuelta==3){
     minutoPinOn=pin;  

   }else if(vuelta==4){
     horaPinOff=pin;

   }else if(vuelta==5){
     minutoPinOff=pin;
     vuelta=0;
     Serial.println(" PIN ");
     Serial.println(dato);
     Serial.println(" HORA ON ");
     Serial.println(horaPinOn);
     Serial.println(" MIN ON ");
     Serial.println(minutoPinOn);
     Serial.println(" HORA OFF ");
     Serial.println(horaPinOff);
     Serial.println(" MIN OFF ");
     Serial.println(minutoPinOff);
   }
     delay(200);

   /*if(fecha.hour()>=horaPinOn && fecha.minute()>= minutoPinOn && fecha.hour()<=horaPinOff && fecha.minute()<= minutoPinOff){
      digitalWrite(cocina,LOW);
   }else digitalWrite(cocina,HIGH);*/
 }

Estan mal declaradas.
Declararlas en el setup solo las vuelve locales o sea tienen validez dentro del setup.

Debes declararlas como globales o en el loop.

Pero si declaro dentro del loop por ejemplo int dato;
Al volver al inicio del loop vuelve a tomar el valor declarado y no el ultimo almacenado. Saludos

Y porque no los pones globales?

Ya lo intente, quizás en alguna linea estoy reemplazando algo que no lo estoy viendo. Saludos

Si como globales falla entonces cerramos las persianas de Arduino porque nada funciona, seguramente algo esta mal en tu código.

Y claro mira esto

  int dato;
  int pin;

asi los defines no?

y luego tienes esto

   if (readString =="UNO"){
       pin=1;
       vuelta++;}

supuestamente ahi le dices que valor toma pin

pero luego haces esto

   if(vuelta==1){
     dato=pin;

   }else if(vuelta==2){
     horaPinOn=pin;

   }else if(vuelta==3){
     minutoPinOn=pin;  

   }else if(vuelta==4){
     horaPinOff=pin;

   }else if(vuelta==5){
     minutoPinOff=pin;

Lo miré rapidamente y puede que vuelta tome otra connotación pero en principio no me parece que cambies todo con ese valor.

cesar021:
Al volver al inicio del loop vuelve a tomar el valor declarado y no el ultimo almacenado. Saludos

¿has probado esto o solo lo supones?

Lo que surbyte quiere decir con declarar las variables como globales es que lo hagas al principio, antes del setup.

ElEspanol:
¿has probado esto o solo lo supones?

Loop es una función normal cuando se acaba las variables locales se eliminan.
Hay varias formas para que conserven el valor:
Declarar las variables con static.
Hacer otro bucle infinito dentro del loop, de forma que no sales y las variables locales no se destruyen.
Utilizar variables globales.

Arduino no te muestra la función main () pero hace algo como esto :

int main() {
Funcionparainicireldispositivo() ;
 setup() ;
 while(true) {
 loop() ;
 } 

}