Не сохраняется значение переменной

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Собираю простую программу для преобразования 10-го значения в 16-е. Всё просто имею вход двоичный, (1,2,4,8) получаю от 0 до 15 и через сравнение перевожу в 0,1,2,3,4,5,6,7,8,9,А,В,С,D,E,F. Вот тут и возникла проблемма. В теле оператора IF я спокойно записываю в строковую переменную и вижу её через Serial , а вне этого тела я её уже не вижу. Я подозреваю что проблема в объявлении переменных, но что я не пробовал не срабатывает... Привожу скетч. 

 //Преобразование 10-го в 16 -й код
  int Val_0 = 0;
    int Val_1 = 0;
      int Val_2 = 0;
        int Val_3 = 0;
         int Val_RS = 0;
           int SummD = 0;
            int Dec_PIN_9 = 0;// переменная для опроса входа 9 "RS"
              int Dec_PIN_10 = 0;// переменная для опроса входа 10        
          int Dec_PIN_11 = 0;// переменная для опроса входа 11
      int Dec_PIN_12 = 0;// переменная для опроса входа 12
    int Dec_PIN_13 = 0;// переменная для опроса входа 13
    String Word;// строковая переменаая для формирования кода 
   String Word_1; // строковая переменая дублер Word
 
void setup()
{
   Serial.begin(9600);
  pinMode(9,INPUT_PULLUP);// определяем выход 9 как вход "RS" от ДТМФ дека
  pinMode(10,INPUT_PULLUP);// определяем выход 9 как вход "0" от ДТМФ дека
  pinMode(11,INPUT_PULLUP);// определяем выход 9 как вход "1" от ДТМФ дека
  pinMode(12,INPUT_PULLUP);// определяем выход 9 как вход "2" от ДТМФ дека
  pinMode(13,INPUT_PULLUP);// определяем выход 9 как вход "3" от ДТМФ дека
  String Word="";// строковая переменаая для формирования кода 
 
}
 
void loop()
{
  Val_0 = 0;
     Val_1 = 0;
       Val_2 = 0;
         Val_3 = 0;
            Val_RS=0;
          SummD = 0;
          String Word="";
            String Word_1="";
         Val_RS = digitalRead(9);
         
      
       
if(Val_RS==1) 
 
Val_0=digitalRead(10);  // записываем состояние из PIN_10 в Val_0
 
   if(Val_0==1) {SummD=SummD+1;
   };
 
 Val_1=digitalRead(11);  // записываем состояние из PIN_10 в Val_1
   if(Val_1==1) {SummD=SummD+2;
  };
 
  
 Val_2=digitalRead(12);  // записываем состояние из PIN_10 в Val_2
   if(Val_2==1) {SummD=SummD+4;
  };
 
   Val_3=digitalRead(13);  // записываем состояние из PIN_10 в Val_3
   if(Val_3==1) {SummD=SummD+8;
   };
if (SummD==0){  String Word = "0" ;};
 if (SummD==1){  String Word = "1" ;};
    if (SummD==2){  String Word = "2" ;};
      if (SummD==3){  String Word = "3" ;};
   
         if (SummD==4){  String Word = "4" ;};
           if (SummD==5){  String Word = "5" ;};
            if (SummD==6){  String Word = "6" ;};
               if (SummD==7){  String Word = "7" ;};
              if (SummD==8){  String Word = "8" ;};
            if (SummD==9){  String Word = "9" ;};
          if (SummD==10){  String Word = "A" ;};
        if (SummD==11){  String Word = "B" ;};
      if (SummD==12){  String Word = "C" ;}
    if (SummD==13){  String Word = "D" ;};
  if (SummD==14){  String Word = "E" ;};
if (SummD==15){  String Word = "F" ;
 
// Здесь всё нормально отображается
//Serial.println ( Word ) ;
//     Serial.println ( SummD ) ;  
  delay (10); };
 
// Отображение десятичного числа и строкового значения 
// Строковое значение не отображается
Serial.println ( Word ) ;
  Serial.println ( SummD ) ;               
delay (10);
 
};//конец тела оператора сравнения RS=1
 
 
 
}
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii (без этого дальнейшего разговора не будет)

2. Так Вы же её описываете внутри if. Ну, правильно, Вы её описали - она живёт до ближайшей закрывающей фигурной скобки, а там уничтожается. Всё так и должно быть. А Вы чего хотели?

А вот теперь я попытаюсь объяснить в чём Ваша ошибка, а Вы сможете убедиться в необходимости п.1 выше.

В строке № ХЗ-1 Вы описали переменную String Word, и, наверное думаете, что именно ей Вы присавиваете значения в строках №№ с ХЗ-2 по ХЗ-3. Ан нет! В этих строках Вы описали совершенно другие переменные с тем же именем. Уберите нахрен описания String в строках №№ с ХЗ-2 по ХЗ-3. Тогда Вы действительно будете присваивать значения переменной описанной в строке ХЗ-1.

 

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Ясно...

 

Vadim0312
Offline
Зарегистрирован: 27.11.2016
int Val_0 = 0;
    int Val_1 = 0;
      int Val_2 = 0;
        int Val_3 = 0;
         int Val_RS = 0;
           int SummD = 0;
            int Dec_PIN_9 = 0;// переменная для опроса входа 9 "RS"
              int Dec_PIN_10 = 0;// переменная для опроса входа 10        
          int Dec_PIN_11 = 0;// переменная для опроса входа 11
      int Dec_PIN_12 = 0;// переменная для опроса входа 12
    int Dec_PIN_13 = 0;// переменная для опроса входа 13
    String Word;// строковая переменаая для формирования кода 
   String Word_1; // строковая переменая дублер Word

void setup()
{
   Serial.begin(9600);
  pinMode(9,INPUT_PULLUP);// определяем выход 9 как вход "RS" от ДТМФ дека
  pinMode(10,INPUT_PULLUP);// определяем выход 9 как вход "0" от ДТМФ дека
  pinMode(11,INPUT_PULLUP);// определяем выход 9 как вход "1" от ДТМФ дека
  pinMode(12,INPUT_PULLUP);// определяем выход 9 как вход "2" от ДТМФ дека
  pinMode(13,INPUT_PULLUP);// определяем выход 9 как вход "3" от ДТМФ дека
  String Word="";// строковая переменаая для формирования кода 

}

void loop()
{
  Val_0 = 0;
     Val_1 = 0;
       Val_2 = 0;
         Val_3 = 0;
            Val_RS=0;
          SummD = 0;
          String Word="";
            String Word_1="";
         Val_RS = digitalRead(9);
         
      
       
if(Val_RS==1) 
{ 
 
Val_0=digitalRead(10);  // записываем состояние из PIN_10 в Val_0

   if(Val_0==1) {SummD=SummD+1;
   };

 Val_1=digitalRead(11);  // записываем состояние из PIN_10 в Val_1
   if(Val_1==1) {SummD=SummD+2;
  };

  
 Val_2=digitalRead(12);  // записываем состояние из PIN_10 в Val_2
   if(Val_2==1) {SummD=SummD+4;
  };

   Val_3=digitalRead(13);  // записываем состояние из PIN_10 в Val_3
   if(Val_3==1) {SummD=SummD+8;
   };
if (SummD==0){  String Word = "0" ;};
 if (SummD==1){  String Word = "1" ;};
    if (SummD==2){  String Word = "2" ;};
      if (SummD==3){  String Word = "3" ;};
   
         if (SummD==4){  String Word = "4" ;};
           if (SummD==5){  String Word = "5" ;};
            if (SummD==6){  String Word = "6" ;};
               if (SummD==7){  String Word = "7" ;};
              if (SummD==8){  String Word = "8" ;};
            if (SummD==9){  String Word = "9" ;};
          if (SummD==10){  String Word = "A" ;};
        if (SummD==11){  String Word = "B" ;};
      if (SummD==12){  String Word = "C" ;}
    if (SummD==13){  String Word = "D" ;};
  if (SummD==14){  String Word = "E" ;};
if (SummD==15){  String Word = "F" ;

// Здесь всё нормально отображается
//Serial.println ( Word ) ;
//     Serial.println ( SummD ) ;  
  delay (10); };

// Отображение десятичного числа и строкового значения 
// Строковое значение не отображается
Serial.println ( Word ) ;
  Serial.println ( SummD ) ;               
delay (10);

};//конец тела оператора сравнения RS=1



}

 

Vadim0312
Offline
Зарегистрирован: 27.11.2016

правда с нумерацией строк не проходит, но ничего научусь..

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Вам же сказали в ифах стринги убрать...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vadim0312 пишет:

но ничего научусь..

Учитесь. Потому что писать ещё раз "ХЗ" я не буду.

Vadim0312
Offline
Зарегистрирован: 27.11.2016

Да получилось...только подскажите как мне выкладывать скетч с нумерацией...:-)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Меня удивляет как Вы выложили без нумерации. Там по умолчанию - с нумерацией, а чтобы без нумерации было надо параметр менять. Я Вам дава ссылку, ну откройте, почитайте. Потом откройте диалог вставки кода, переключитесь на параметры, посмотрите.