Проблема со счётчиком

YaSerg
Offline
Зарегистрирован: 02.03.2017

Всем привет!

Хочу написать функцию которая будет в таймере добавлять значение М или MN к переменной  в зависимости больше или меньше 10 передаваемое значение в функцию. Но у меня получется какой-то бред.

Возможно из-за преобразования int в String.

Подскажите пожалуйста где я ошибаюсь.

String dightr ="";
String dightrlcd ="";
int i;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("I'm startend");
}

void loop() {
  // put your main code here, to run repeatedly:
  for (i = 0; i <= 15; i++){

  
  Serial.print("I = ");
  Serial.println(i);
  Serial.print("If = ");
  dightrlcd = dightVentFunction(i);
  Serial.println(dightrlcd);
  delay(1000);
  }
}

String dightVentFunction(int dightv) {
        Serial.println("Function started");
        delay(1000);
        Serial.println(dightv);
        delay(1000);
        if (dightv < 10) 
               { 
                Serial.println("< 10 = ");
                String dightr = dightv+"MN"; 
               Serial.println(dightr);
               }
          else { 
          Serial.println("> 10 = ");
          String dightr = dightr+"M";
          Serial.println(dightr); }
          return dightr;
          }

 

b707
Offline
Зарегистрирован: 26.05.2017

а что в итоге вы хотели получить? и в чем проблема?

YaSerg
Offline
Зарегистрирован: 02.03.2017

Если значение i меньше 10 положить в переменную значение i+MN, если больше i+M.

Например i=9, значит функция должна вренуть значение 9MN. Если например i=12, то ф-ция должна вернуть 12M

YaSerg
Offline
Зарегистрирован: 02.03.2017

Немного поигрался со скетчем и получилось выводить полученное значение в теле ф-ции строки 34 и 39. Но сама ф-ция ничего не возвращает (строка 20).

String dightr ="";
String dightrlcd ="";
int i;

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("I'm startend");
}

void loop() {
  // put your main code here, to run repeatedly:
  for (i = 0; i <= 15; i++){

  
  Serial.print("I = ");
  Serial.println(i);
  Serial.print("If = ");
  dightrlcd = dightVentFunction(i);
  Serial.println(dightrlcd);
  delay(1000);
  }
}

String dightVentFunction(int dightv) {
        Serial.println("Function started");
        delay(1000);
        Serial.println(dightv);
        delay(1000);
        if (dightv < 10) 
               { 
                Serial.println("< 10 = ");
                String dightr = String(dightv)+"MN"; 
               Serial.println(dightr);
               }
          else { 
          Serial.println("> 10 = ");
          String dightr = String(dightv)+"M";
          Serial.println(dightr); 
          }
          return dightr;
          }

 

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

YaSerg пишет:

Если значение i меньше 10 положить в переменную значение i+MN, если больше i+M.

Например i=9, значит функция должна вренуть значение 9MN. Если например i=12, то ф-ция должна вернуть 12M

String result = String( i ) + String( i < 10 ? "MN" : "M" );

И потом можете затолкать это в функцию.

 

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

YaSerg пишет:

          else { 

          Serial.println("> 10 = ");
          String dightr = String(dightv)+"M";
          Serial.println(dightr); 
          }
      return dightr;
   }

У вас dightr объявлена как локальная переменная в блоке else { ... } - к тому моменту, когда вы её пытаетесь return, она давно уже уничтожена (по завершению блока).

 

vk007
Offline
Зарегистрирован: 16.06.2015

Olej пишет:

YaSerg пишет:

Если значение i меньше 10 положить в переменную значение i+MN, если больше i+M.

Например i=9, значит функция должна вренуть значение 9MN. Если например i=12, то ф-ция должна вернуть 12M

String result = String( i ) + String( i < 10 ? "MN" : "M" );

И потом можете затолкать это в функцию.

Неправильный ответ. Вы не учли, при i=10, ничего делать не надо (по условию, что написал YaSerg).

YaSerg
Offline
Зарегистрирован: 02.03.2017

Olej пишет:

YaSerg пишет:

          else { 

          Serial.println("> 10 = ");
          String dightr = String(dightv)+"M";
          Serial.println(dightr); 
          }
      return dightr;
   }

У вас dightr объявлена как локальная переменная в блоке else { ... } - к тому моменту, когда вы её пытаетесь return, она давно уже уничтожена (по завершению блока).

А как верно? 

Объявлена она до setup.

 

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

vk007 пишет:

Неправильный ответ. Вы не учли, при i=10, ничего делать не надо (по условию, что написал YaSerg).

YaSerg написал дословно следующее (разуйте глаза):

Цитата:
Если значение i меньше 10 положить в переменную значение i+MN, если больше i+M.

Где здесь "ничего не делать"?

 

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

YaSerg пишет:

А как верно? 

Объявлена она до setup.

Да она может быть хоть 10 раз объявлена "до"...

А строки 33 и 38 в вашем листинге в сообщении #3 - это я писал?

 

 

YaSerg
Offline
Зарегистрирован: 02.03.2017

Olej пишет:

YaSerg пишет:

А как верно? 

Объявлена она до setup.

Да она может быть хоть 10 раз объявлена "до"...

А строки 33 и 38 в вашем листинге в сообщении #3 - это я писал?

 

 

Протупил. Спасибо!

vk007
Offline
Зарегистрирован: 16.06.2015

Olej пишет:

vk007 пишет:

Неправильный ответ. Вы не учли, при i=10, ничего делать не надо (по условию, что написал YaSerg).

YaSerg написал дословно следующее (разуйте глаза):

Цитата:
Если значение i меньше 10 положить в переменную значение i+MN, если больше i+M.

Где здесь "ничего не делать"?

Если в ТЗ не написано, что делать при i=10, то это не значит, что программа должна делать, что программист пожелает. А в условии речь идет только о <10 и >10. Так что разувайте глаза сами, читая ТЗ.