Не сохраняется значение переменной
- Войдите на сайт для отправки комментариев
Втр, 10/01/2017 - 13:43
Собираю простую программу для преобразования 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
}
1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii (без этого дальнейшего разговора не будет)
2. Так Вы же её описываете внутри if. Ну, правильно, Вы её описали - она живёт до ближайшей закрывающей фигурной скобки, а там уничтожается. Всё так и должно быть. А Вы чего хотели?
А вот теперь я попытаюсь объяснить в чём Ваша ошибка, а Вы сможете убедиться в необходимости п.1 выше.
В строке № ХЗ-1 Вы описали переменную String Word, и, наверное думаете, что именно ей Вы присавиваете значения в строках №№ с ХЗ-2 по ХЗ-3. Ан нет! В этих строках Вы описали совершенно другие переменные с тем же именем. Уберите нахрен описания String в строках №№ с ХЗ-2 по ХЗ-3. Тогда Вы действительно будете присваивать значения переменной описанной в строке ХЗ-1.
Ясно...
правда с нумерацией строк не проходит, но ничего научусь..
Вам же сказали в ифах стринги убрать...
но ничего научусь..
Учитесь. Потому что писать ещё раз "ХЗ" я не буду.
Да получилось...только подскажите как мне выкладывать скетч с нумерацией...:-)
Меня удивляет как Вы выложили без нумерации. Там по умолчанию - с нумерацией, а чтобы без нумерации было надо параметр менять. Я Вам дава ссылку, ну откройте, почитайте. Потом откройте диалог вставки кода, переключитесь на параметры, посмотрите.