Помогите с массивом

Здравствуйте. У меня есть двойной массив.

float type_cof_two[2][10] = {
  {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}, //углы атаки
  {0.18, 0.28, 0.4, 0.58, 0.72, 0.83, 1, 1.11, 1.2, 1.23} //коэфф
};

Так же есть переменная сервопривода: rot_servo.

И дано условие в функции Void():
if (chanel_c == 2) {
lcd.home();
lcd.print(“cy”); //cy - переменная
};

Вопрос: Как присвоить к “cy” значение массива из второй строки, если переменная сервопривода будет соответствовать значению из первой строки массива.
Пример: у сервопривода угол 4 градуса, значит коэфицент будет равен 0.4. А если значение сервопривода в диапазоне заданных углов(типо угол 5 между углом 4 и 6), то находится среднее значение, то есть если, к примеру, угол равен 5(его нету в массиве), то находится среднее число между углом 4 и 6((0.28+0.4)/2).

Нужна помощь очень срочно. Если не сможете сделать вместе со средним значением, то не надо, но хотя бы помогите с главным вопросом.

Начали, вроде, за здравие, а дальше …

Это что? Вставляйте код нормально.

Кто Вам сказал, что это переменная? Я вижу литерал типа const char * (по-простому – строковую константу). Никакой переменной здесь и не пахнет.

Тогда приводите код ПОЛНОСТЬЮ, чтобы его можно было запустить у себя и задавайте конкретный вопрос.

А вот это очень Ваши проблемы.
Запомните, не существует худшего слова для запроса о помощи, чем “срочно”. Это почти гарантированный перевод темы в глум и стёб. Не используйте это слово никогда (от слова совсем никогда), если конечно, глум и стёб не являются Вашей целью.

1 лайк

Понял. Ща исправимся.

#include <LiquidCrystal_I2C.h>
#include  <Servo.h>
#include "IRremote.h"

LiquidCrystal_I2C lcd(0x27, 16, 2);

Servo servo;

int rot_servo = 90; 

const int bc_p = 4; //это мои 4 кнопки управления
const int bc_m = 7;
const int bv_p = 13;
const int bv_m = 8;

int c = 0; //переменная коэфицента

float type_cof_two[2][10] = {
  {0, 2, 4, 6, 8, 10, 12, 14, 16, 18},
  {0.18, 0.28, 0.4, 0.58, 0.72, 0.83, 1, 1.11, 1.2, 1.23}
}; //массив


void setup() {
  // put your setup code here, to run once:
  pinMode(bc_p, INPUT);
  pinMode(bc_m, INPUT);
  pinMode(bv_p, INPUT);
  pinMode(bv_m, INPUT);


  servo.attach(3);
  servo.write(rot_servo);
  lcd.init();
  lcd.backlight();
}

void loop() {
  // put your main code here, to run repeatedly:
  lcd.home();
  lcd.print(с);
}

Слово “срочно” было к слову, извиняюсь.

Как всё сложно. Я бы сделал только один массив только с коэффициентами, но для всех 19-ти значений углов. А значение угла использовал бы как индекс для извлечения нужного коэффициента.

перебираем первый массив и сравниваем, совпало - из второго массива берём по индексу и присваиваем

1 лайк

Да я так и думал, но я не могу это сделать.

Тогда, что вы хотите?

Я в самом первом сообщении написал:

Вопрос: Как присвоить к “cy” значение массива из второй строки, если переменная сервопривода будет соответствовать значению из первой строки массива.
Пример: у сервопривода угол 4 градуса, значит коэфицент будет равен 0.4. А если значение сервопривода в диапазоне заданных углов(типо угол 5 между углом 4 и 6), то находится среднее значение, то есть если, к примеру, угол равен 5(его нету в массиве), то находится среднее число между углом 4 и 6((0.28+0.4)/2).

Я вам уже написал, как это сделать проще всего без всяких поисков и вычислений. Чем не устраивает?

Только щас дошло. Я думал вы хотели 2 массива. Щас попробую .

Ответ на ваш вопрос в сообщении 6

«А я думал сова» :joy:

5-ый полегче

Нечего там пробовать. Проще некуда:

float массив_коэффициентов[19] = {0.18, 0.23, 0.28, ...... , 1.23};
коэффициент = массив_коэффициентов[угол];

Написали, и что?
Какое отношение сервопривод имеет к массивам?

Я уже сделал, спасибо. Но теперь проблема в выведении этого числа на ЖК дисплей. Он выводит только целые числа, а не десят.

Разве это проблема? Выведите отдельно целую часть, потом напечатайте точку, а потом десятые.

В 16-й строке int ни на какие мысли не наводит?

float type_cof_two[19] = {
  0.18, 0.23, 0.28, 0.34, 0.4, 0.49, 0.58, 0.65, 0.72, 0.78, 0.83, 0.92, 1, 1.06, 1.11, 1.16, 1.2, 1.22, 1.23
};

c = type_cof_two[m_rot];

Serial.println(c);

Как бы работает, но все равно выводится только целая часть

да нет там проблемы