Не присваивается значение переменной.
- Войдите на сайт для отправки комментариев
Втр, 17/11/2015 - 13:28
На Arduino пытаюсь программировать чуть больше недели и возник затык в коде.
В программе в начале объявляется переменная char error[4] со значением "E0_".
После попытки подключения к интернету она должна измениться на "E1_" или "E2_", но ее значение остается "E0_". Где у меня ошибка в коде? Как бы должно работать но не работает.
char error[4] = "E0_";
// Основная программа
void loop()
{ incomingByte = Serial.read(); // считываем байт
switch (incomingByte)
{
case 'T':
// тут выполняем код если символ T
break;
case 'P':
if( !ConnectWiFi(AP_SSID,AP_PASS) ) // подключаемся к интернету
{
char error[4] = "E1_"; // неудачное подключение
}
else
char error[4] = "E2_"; // удачное подключение
for (int i = 0; i < 3; i++)
{
Serial.print(error[i]);
}
break;
// далее идет проверка других символов
case 'Z':
Не присваивается значение переменной
Как бы должно работать но не работает.
Где Вы его (значение) присваиваете?
Если Вам кажется, что Вы это делаете в строках 15 и 18, таки нет! Там Вы ничего не присваете - там Вы объявляете новые переменные.
А как тогда правильно будет? Мне нужно что бы строкавая переменная менялась. В ассемблере я бы давно это сделал, но тут как-то все мудренно ).
Не понимаю проблемы. Присвоение отлично работает, но присвоение это одна операция, а объявление новой переменной с заданием ей начального значения это совсем другая операция.
А как тогда правильно будет? Мне нужно что бы строкавая переменная менялась. В ассемблере я бы давно это сделал, но тут как-то все мудренно ).
Правильно будет прочитать http://studrada.fpm.kpi.ua/archive/Kernigan,Pichi-C-programming.pdf
Понимаете, написать Вам сейчас код - дело нехитрое, но судя по Вашему вопросу Вы АБСОЛЮТНО не знаете языка на котором пытаетесь писать, поэтому написание за Вас этой строчки ничего Вам не даст - через час у Вас будет новый затык ничуть не менее тривиальный, чем этот.
Прочитайте лучше книгу по языку - поверьте, это добрый и хороший совет.
Для начала так, вроде должно работать.
А вообще, если решили писать на C/C++, всё равно когда-то придётся с этим разбираться.
Читайте про массивы, строки, строковые константы, и про указатели конечно.
А, если ассемблером владеете, то всё намного проще.
Переменную, а точнее массив char error[4] нужно изменять так же как в ассемблере - то есть, по одному байту. В данном случае,
Если лениво - значит нужно написать функции, которые смогут выполнять операции со всей строкой сразу. И конечно, реально писать их не придётся, потому что "всё уже написано до нас". Гуглите "функции работы со строками".
А если, всё-таки, хочется присваивать значения строкам как обычным переменным - тут уже C++ поможет. Принцип тот же - пишутся специальные функции, например, для присваивания, склеивания или сравнения строк. Но вызывать функции явно уже не нужно - они будут вызываться автоматически, при использовании соответствующих операторов: "=", "+", или "==".
Знаю, сложно получилось :)
Для простоты, опять же, скажу что всё уже давно написано. Попробуйте использовать тип String - для него все эти операции уже заранее определены - можно пользоваться.
Для начала так, вроде должно работать.
А вообще, если решили писать на C/C++, всё равно когда-то придётся с этим разбираться.
Читайте про массивы, строки, строковые константы, и про указатели конечно.
так компилятор ругался что используется устаревшее преобразование.
Почитал, изменил и теперь компилируется без предупреждения.
const char* error = "E0_"; ........ case 'T':// Соединение с WiFi if( !ConnectWiFi(AP_SSID,AP_PASS) ) { const char* error = "E1_"; // неудачное подключение } else const char* error = "E2_"; // удачное подключениеЕвгенийП спасибо за книгу . Почитаю обязательно.
Datak спасибо за подсказку. Все работает. Для меня пока ассемблер намного понятьнее и проше чем С/С++ , но надеюсь и здесь все наверстать.
Почитал, изменил и теперь компилируется без предупреждения.
const char* error = "E0_"; ........ case 'T':// Соединение с WiFi if( !ConnectWiFi(AP_SSID,AP_PASS) ) { const char* error = "E1_"; // неудачное подключение } else const char* error = "E2_"; // удачное подключениеВы смеётесь? Компилироваться-то оно компилируется, только опять не работает ни хрена! Попробуйте!
Вы опять вместо присваивания объявили новые переменные!
Нет, всё-таки, завязывайте тыкать наугад - читайте КиР, а потом, после прочтения, возвращайтесь к программе.
Ошибся. Так работает
const char* error = "E0_"; ............... if( !ConnectWiFi(AP_SSID,AP_PASS) ) { error = "E1_"; // неудачное подключение } else error = "E2_"; // удачное подключение Serial.print(error); break;