Не могу создать функцию.

Тема в разделе "Arduino & Shields", создана пользователем olegoriy, 12 мар 2018.

  1. olegoriy

    olegoriy Гик

    Доброй ночи.
    Столкнулся с такой проблемой.Не могу создать адекватную функцию для уменьшения кода.
    Задача, при нажатии кнопки при определенном значении Y увеличивать значение X.
    Изначально все замечательно работает:
    Код (C++):
    if (!digitalRead(knopkaPL)) {
      if(r - p2 > i2){
      if(y1 == 1){
      x1=x1+1;
      if(x1 > 255){x1 = 255;}
      }
      if(y1 ==2){
      x2=x2+1;
      if(x2 > 255){x2 = 255;}
      }
      if(y1 ==3){
      x3=x3+1;
      if(x3 > 255){x3 = 255;}
      }
      if(y1 ==4){
      x4=x4+1;
      if(x4 > 255){x4 = 255;}
      }
      if(y1 ==5){
      x5=x5+1;
      if(x5 > 255){x5 = 255;}
      }
      if(y1 ==6){
      x6=x6+1;
      if(x6 > 255){x6 = 255;}
      }
      if(y1 ==7){
      x7=x7+1;
      if(x7 > 255){x7 = 255;}
      }
      if(y1 ==8){
      x8=x8+1;
      if(x8 > 255){x8 = 255;}
      }
      p2 = r;
      }}
    Но когда пытаюсь все это запихнуть в функцию то значения X1 при определенном Y1 прибавляются , но остальные Xn становятся равны Yn
    Код (C++):
    if (!digitalRead(knopkaPL)) {
      if(r - p2 > i2){
       x1 = channelData(1, x1);
       x2 = channelData(2, x2);
       x3 = channelData(3, x3);
       x4 = channelData(4, x4);
       x5 = channelData(5, x5);
       x6 = channelData(6, x6);
       x7 = channelData(7, x7);
       x8 = channelData(8, x8);
       p2 = r;
      }}

     
       byte channelData(byte poz, byte num){
      if(y1 == poz){
        int result;
        result=num+1;
      if(result > 255){result = 255;}
      return result;}}
    Понимаю что не правильно создаю функцию. Подскажите пожалуйста где ошибка?
     
  2. olegoriy

    olegoriy Гик

    Вроде разобрался. Перенес объявление возвратной переменной из условия и вроде все заработало))
    Код (C++):
    int channelData(int poz, int num){
       int result = num;
       if(y1 == poz)result=num+1;
       if(result > 255)result = 255;
       return result;
     
  3. fogary

    fogary Гик

    Такой вариант не рассматривали:
    Код (C++):
    byte xx[8] = {0,0,0,0,0,0,0,0}

    if (!digitalRead(knopkaPL)) {
      if(r - p2 > i2){
        if (xx[y1 - 1] < 255) xx[y1 - 1] = xx[y1 - 1] + 1;
        p2 = r;
      }
    }