Проблемы с использованием массивов C++

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

// initialise motors

// Motor 1
//int in1 = 4;
//int in2 = 2 ;
// Motor 2
//int in3 = 8;
//int in4 = 7;
// Motor 3
//int in5 = 12;
//int in6 = 13;
// Motor 4
//int in7 = 9;
//int in8 = 10;

// Array of PWM's
int thisPin = 0;
uint8_t pwms[] = {3,5,6,11};
byte numberPwms = 4;

// Array for output channels
// Motor 1 (4 = High, 2 = Low)
// Motor 2 (8 = High, 7 = Low)
// Motor 3 (12 = High, 13 = Low)
// Motor 4 (9 = High, 10 = Low)
int mtrpin = 0;
uint8_t motors[] = {4,2,8,7,12,13,9,10};
byte motorPin = 8;

void setup()
{
//  pinMode(in1, OUTPUT);
//  pinMode(in2, OUTPUT);
//  pinMode(in3, OUTPUT);
//  pinMode(in4, OUTPUT);
//  pinMode(in5, OUTPUT);
//  pinMode(in6, OUTPUT);
//  pinMode(in7, OUTPUT);
//  pinMode(in8, OUTPUT);

  for (pwmPin = 0; pwmPin < numberPwms; pwmPin++){
      for (mtrPin = 0; mtrpin < motorPin; mtrPin++){
            pinMode(motors[mtrPin], OUTPUT);
        pinMode(pwms[pwmPin], OUTPUT);
        };
    }; 
}


void motorLoop(){
// setting the direction to turn and speed

//  digitalWrite(in1, HIGH); // Motor 2
//  digitalWrite(in2, LOW);  
//  digitalWrite(in3, HIGH); // Motor 2
//  digitalWrite(in4, LOW);  
//  digitalWrite(in5, HIGH); // Motor 3
//  digitalWrite(in6, LOW);
//  digitalWrite(in7, HIGH); // Motor 4
//  digitalWrite(in8, LOW);

// Set the speed for the Motors

  for(int pwmPin = 0; pwmPin < numberPwms; pwmPin++){
      for (mtrPin = 0; mtrpin < motorPin; mtrPin++){
            pinMode(motors[mtrPin], LOW);
        analogWrite(pwms[pwmPin], 200);
      };
   };  
};

void loop()
{
  motorLoop();
  delay(500);

}

Мне удалось заставить первоначальный вызов работать, но теперь я превращаю все это в массивы. Мне удалось заставить его работать с ШИМ, но теперь, после добавления массива двигателей, он перестал работать и выдает это сообщение об ошибке.

В функции «Пустота установки ()»; 41:8: ошибка: 'pwmPin' не был объявлен в этой области 42:11: ошибка: 'mtrPin' не был объявлен в этой области В функции 'void motorLoop()'; 74:8: ошибка: «mtrPin» не был объявлен в этой области.

Я знаю, что ошибка, вероятно, будет очень простой, но я не могу найти, чтобы спасти свою жизнь.

Кроме того, циклы for были вызваны так, как они есть сейчас, и разделены, и я все еще получаю те же ошибки. Вы можете увидеть этот код по адресу https://www.tinkercad.com/things/fFQKRTjhDrb-motor-initial-turn/editel.

Любая помощь по этому вопросу будет принята с благодарностью :)


person Ben Robinson    schedule 15.11.2019    source источник
comment
Разбейте его на более мелкие части. При написании кода всегда полезно часто собирать, а не писать кучу, а затем нажимать сборку. Написать функцию, построить. Добавьте больше кода в эту функцию, build. И так далее.   -  person dandan78    schedule 15.11.2019
comment
Проверьте регистр ваших переменных. С++ чувствителен к регистру (как следует из ошибки)   -  person fredrik    schedule 15.11.2019
comment
В c++ нет типа byte (кроме std::byte из c++17). Возможно, вы захотите использовать unsigned char   -  person Rhathin    schedule 15.11.2019
comment
Байт @Rhathin является стандартным типом в Arduino-C++   -  person Piglet    schedule 15.11.2019
comment
Большое спасибо всем. Удалось заставить его работать. Никогда не думал проверять правильность значений с учетом регистра. :D   -  person Ben Robinson    schedule 18.11.2019


Ответы (1)


In Function 'Void setup()'; 41:8: error: 'pwmPin' was not declared in this scope 42:11: error: 'mtrPin' was not declared in this scope In function 'void motorLoop()'; 74:8: error: 'mtrPin' was not declare in this scope.

Как говорит компилятор: mtrPin не был объявлен, и все же вы его используете.

Объявления вводят имена в программу, например, имя вашей переменной mtrPin. Другими примерами являются пространства имен, функции и классы. Имя должно быть объявлено, прежде чем его можно будет использовать. Вы не можете ссылаться на имя, которое объявлено позже в коде.

int mtrPin; // this is a (uninitialized) declaration -> mtrPin can be used
int mtrPin { 0 }; // this is a (value) initialization -> mtrPin can be used
person mfnx    schedule 15.11.2019
comment
Привет, спасибо за ваш ответ. Мне удалось заставить его работать, так как это оказалось проблемой с учетом регистра. Спасибо за отзыв :D - person Ben Robinson; 18.11.2019