exit status 1 - expected primary-expression before '(' token

Когда я пытаюсь скомпилировать следующий скетч, компилятор возвращает ошибку «статус выхода 1 — ожидаемое первичное выражение перед токеном '('» и выделяет «midi();» в моем коде.

Вот мой скетч:

#include <Stepper.h>
#include <Servo.h>
#include <MIDI.h>

/*ARDUINO MOTOR SHIELD
 * The pin breakdown is as follows:
 * Function          Channel A   Channel B
 * Direction         Digital 12  Digital 13
 * Speed (PWM)       Digital 3   Digital 11
 * Brake             Digital 9   Digital 8
 * Current Sensing   Analog 0  Analog 1
 */

const int stepsPerRevolution = 200;  // 1,8 град. Угол шага (200 шагов/360 градусов об.)
const int dirChA = 12;     // присвоение имени "dirChA" контакту 12
const int dirChB = 13;     // присвоение имени "dirChB" контакту 13
const int pwmChA = 3;      // присвоение имени «pwmChA» контакту 3
const int pwmChB = 11;     // присвоение имени «pwmChB» контакту 11
const int brkChA = 9;      // присвоение имени "brkChA" контакту 9
const int brkChB = 8;      // присвоение имени "brkChB" контакту 8

const int srvoMtr = 10;    // присвоение имени "srvoMtr" контакту 10

const int pButton1 = 4;    // присвоение имени «pButton1» контакту 4
const int pButton2 = 5;    // присвоение имени «pButton2» контакту 5
const int pButton3 = 6;    // присвоение имени "pButton3" контакту 6
const int pButton4 = 7;    // присвоение имени «pButton4» контакту 7

const int ledLight = 2;    // присвоение имени «ledLight» контакту 2

const int tonePin = 1;     // присвоение имени "tonePin" контакту 1

Stepper myStepper(stepsPerRevolution, dirChA, dirChB);  // инициализируем библиотеку шаговых двигателей на контактах 12 & 13
Servo myServo;  // инициализируем сервобиблиотеку с логическим именем myServo

int pButton1State = 0;     // переменная для чтения состояния pButton1 как LOW или HIGH
int pButton2State = 0;     // переменная для чтения состояния pButton2 как LOW или HIGH
int pButton3State = 0;     // переменная для чтения состояния pButton3 как LOW или HIGH
int pButton4State = 0;   // переменная для чтения состояния pButton4 как LOW или HIGH

int pButtonFlag = 0;     // переменная, когда кнопка 1 была нажата и отпущена

int myServoPos = 0;    // переменная, когда сервопривод достиг своей позиции
int myServoFlag = 0;   // переменная для сервопривода при нажатии любой из 4 кнопок pButton

void setup() {
//Serial.begin(31250); // инициализируем последовательный порт для обмена сообщениями & Поиск неисправностей
 //Serial.println("Выполняется установка UNO");

 // 1 шаговый двигатель
// Serial.println("\nШаговой двигатель");
 pinMode(dirChA, OUTPUT);   // инициализируем контакт 12 как ВЫХОД
 digitalWrite(dirChA, LOW);   //инициализируем вывод 12 как НИЗКИЙ (напряжение на выводе 0 В)
// Serial.println("Канал А - PIN 12 - установлен как Выход и Низкий");
 pinMode(dirChB, OUTPUT);   // инициализируем контакт 13 как ВЫХОД
 digitalWrite(dirChB, LOW);   // инициализируем вывод 13 как НИЗКИЙ (напряжение на выводе равно 0 В)
// Serial.println("Канал B Dir - PIN 13 - установлен как Выход и Низкий");
 pinMode(pwmChA, OUTPUT);   // инициализируем контакт 3 как ВЫХОД
 digitalWrite(pwmChA, LOW);   // инициализируем вывод 3 как НИЗКИЙ (напряжение на выводе равно 0 В)
// Serial.println("Канал A PWM - PIN 3 - установлен как выходной и низкий");
 pinMode(pwmChB, OUTPUT);   // инициализируем контакт 11 как ВЫХОД
 digitalWrite(pwmChB, LOW);   // инициализируем вывод 11 как НИЗКИЙ (напряжение на выводе 0 В)
// Serial.println("ШИМ канала B - PIN 11 - установлен как выходной и низкий");
 pinMode(brkChA, OUTPUT);   // инициализируем контакт 9 как ВЫХОД
 digitalWrite(brkChA, LOW);   // инициализируем вывод 9 как НИЗКИЙ (напряжение на выводе равно 0 В)
// Serial.println("Тормоз канала А - PIN 9 - установлен как выходной и низкий");
 pinMode(brkChB, OUTPUT);   // инициализируем контакт 8 как ВЫХОД
 digitalWrite(brkChB, LOW);   // инициализируем вывод 8 как НИЗКИЙ (напряжение на выводе равно 0 В)
// Serial.println("Тормоз канала B - PIN 8 - установлен как выходной и низкий");

 myStepper.setSpeed(60);   // устанавливаем скорость шагового двигателя на 60 об/мин
// Serial.println("\nУстановить скорость шагового двигателя на 60 об/мин");

 // 4 кнопки
// Serial.println("\n4 кнопки");
 pinMode(pButton1, INPUT);   // инициализируем контакт 4 как ВХОД
 digitalWrite(pButton1, LOW);   // инициализируем вывод 4 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("Кнопка 1 — PIN 4 — установите входной и низкий уровень");
 pinMode(pButton2, INPUT);   // инициализируем контакт 5 как ВХОД
 digitalWrite(pButton2, LOW);   // инициализируем вывод 5 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("Кнопка 2 — PIN 5 — установите входной и низкий уровень");
 pinMode(pButton3, INPUT);   // инициализируем контакт 6 как ВХОД
 digitalWrite(pButton3, LOW);   // инициализируем вывод 6 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("Кнопка 3 — PIN 6 — установить входной и низкий уровень");
 pinMode(pButton4, INPUT);   // инициализируем вывод 7 как ВХОД
 digitalWrite(pButton4, LOW);   // инициализируем вывод 7 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("Кнопка 4 — PIN 7 — установить входной и низкий уровень");

 // 1 светодиодный светильник
// Serial.println("\nLED Light");
 pinMode(ledLight, OUTPUT);   // инициализируем контакт 2 как ВЫХОД
 digitalWrite(ledLight, LOW);   // инициализируем вывод 2 как НИЗКИЙ (напряжение на выводе 0 В)
// Serial.println("Светодиодный индикатор - PIN 2 - установлен на выход и низкий уровень");

 // 1 пьезодинамик
midi();
// Serial.println("Пьезодинамик инициализирован");
}

void loop() {
  //Читаем состояние кнопки (нажата или не нажата?)
// Serial.println("\nЧтение состояний кнопки с 1 по 4: высокое или низкое");
  pButton1State = digitalRead(pButton1);   // считываем состояние pButton1 как LOW или HIGH
  pButton2State = digitalRead(pButton2);   // читаем состояние pBut ton2 как LOW или HIGH
  pButton3State = digitalRead(pButton3);   // считываем состояние pButton3 как LOW или HIGH
  pButton4State = digitalRead(pButton4);   // читаем состояние pButton4 как LOW или HIGH

  // проверяем, нажата ли кнопка. Если это так, pbuttonState имеет ВЫСОКИЙ уровень:
  if (pButton1State == HIGH) {
 // Serial.println("\nКнопка 1 нажата");
     pButtonFlag=1;  // меняем переменную pButton1Flag
 // Serial.println("Флаг кнопки 1 = 1");
  }
     if (pButtonFlag == 1){
 // Serial.println("Начало шагового двигателя — 40 шагов вперед");
        digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
        digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
        myStepper.step(40);          // шаг вперед на 40 шагов до позиции 1
        digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
        digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
 // Serial.println("Остановка шагового двигателя");
        delay(2000);

        myServoFlag=1;             // изменяем переменную ServoFlag для выдачи шоколада
 // Serial.println("\nServo Flag = 1 - выдача шоколада");

        if (myServoFlag == 1){
 // Serial.println("Запуск сервопривода");
           myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
 // Serial.println("Присоедините сервобиблиотеку к PIN 10");

           for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
               myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
               delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
           }
           myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
 // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
 // Serial.println("Сервоостанов");
 // Serial.println("Удерживать позицию ОТКРЫТО в течение 3 секунд");
           delay(2000);

           myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
 // Serial.println("Присоедините сервобиблиотеку к PIN 10");

           for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
               myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
               delay(15);
           }
           myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
 // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
 // Serial.println("Остановка сервопривода — ожидание следующего выбора");
        }    
        myServoFlag=0;                // изменяет значение myServoFlag обратно на ноль (0)
 // Serial.println("Флаг сервопривода = 0");

        digitalWrite(ledLight, HIGH);   // включаем свет, чтобы указать, что шоколад выдан
 // Serial.println("\nLed Light ON");
 // Serial.println("\nPlay Tones");

        void midi() {
                 tone(tonePin, 233, 203.992851562);
                 delay(226.658723958);
                 delay(4.82252604167);
                 tone(tonePin, 184, 412.325976562);
                 delay(458.139973958);
                 delay(4.82252604167);
                 tone(tonePin, 184, 99.8262890625);
                 delay(110.918098958);
                 delay(4.82252604167);
                 tone(tonePin, 155, 99.8262890625);
                 delay(110.918098958);
                 delay(4.82252604167);
                 tone(tonePin, 184, 203.992851562);
                 delay(226.658723958);
                 delay(4.82252604167);
                 tone(tonePin, 184, 203.992851562);
                 delay(226.658723958);
                 delay(236.303776042);
                 tone(tonePin, 184, 99.8262890625);
                 delay(110.918098958);
                 delay(4.82252604167);
                 tone(tonePin, 155, 99.8262890625);
                 delay(110.918098958);
                 delay(4.82252604167);
                 tone(tonePin, 184, 203.992851562);
                 delay(226.658723958);
                 delay(4.82252604167);
                 tone(tonePin, 184, 203.992851562);
                 delay(226.658723958);
                 delay(236.303776042);
                 tone(tonePin, 184, 203.992851562);
                 delay(226.658723958);
                 delay(236.303776042);
                 tone(tonePin, 233, 555.555);
                 }

        delay(3000);

// Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
        digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
        digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
        myStepper.step(-40);          // шаг назад на 40 шагов до позиции 0
        digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
        digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");

        digitalWrite(pButton1, LOW);   // инициализируем вывод 4 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("\nКнопка сброса 1 — PIN 4 — низкий уровень");
        digitalWrite(ledLight, LOW);   //выключает свет, указывая на завершение последовательности
// Serial.println("\nСветодиод выключен");

        pButtonFlag=0;                // изменяет значение pButtonFlat обратно на ноль (0)
// Serial.println("\Флаг кнопки 1 = 0");
        delay(2000); 
     }

  // позиция 2
  if (pButton2State == HIGH) {
// Serial.println("\nКнопка 2 нажата");
     pButtonFlag=1;  // меняем переменную pButtonFlag
// Serial.println("Флаг кнопки 2 = 1");
  }
     if (pButtonFlag == 1){
// Serial.println("Начало шагового двигателя — 80 шагов вперед");
        digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
        digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
        myStepper.step(80);          // шаг вперед на 80 шагов до позиции 2
        digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
        digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");
        delay(2000);

        myServoFlag=1;    // изменяем переменную ServoFlag для выдачи шоколада
// Serial.println("\nServo Flag = 1 - выдача шоколада");

        if (myServoFlag == 1){
// Serial.println("Запуск сервомотора");
           myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
// Serial.println("Присоедините сервобиблиотеку к PIN 10");

           for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
               myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
               delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
           }
           myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
// Serial.println("\nОтключить сервобиблиотеку к PIN 10");
// Serial.println("Сервоостанов");
// Serial.println("Удерживать позицию ОТКРЫТО в течение 2 секунд");
           delay(2000);

           myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
// Serial.println("Присоедините сервобиблиотеку к PIN 10");

           for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
               myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
               delay(15);
           }
           myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
// Serial.println("\nОтключить сервобиблиотеку к PIN 10");
// Serial.println("Остановка сервопривода — ожидание следующего выбора");
        }    
        myServoFlag=0;                // изменяет значение myServoFlag обратно на ноль (0)
// Serial.println("Флаг сервопривода = 0");

        digitalWrite(ledLight, HIGH);    // включаем свет, чтобы указать, что шоколад выдан
// Serial.println("\nСвет включен");
        delay(3000);

// Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
        digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
        digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
        myStepper.step(-80);          // шаг назад на 80 шагов до позиции 0
        digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
        digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");

        digitalWrite(pButton2, LOW);   // инициализируем вывод 5 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("\nКнопка сброса 2 — PIN 5 — низкий уровень");
        digitalWrite(ledLight, LOW);   // выключает свет, указывая на завершение последовательности
// Serial.println("\nСветодиод выключен");

        pButtonFlag=0;   // изменяет значение pButton2Flag обратно на ноль (0)
// Serial.println("\Флаг кнопки 2 = 0");
        delay(2000); 
    }

    // позиция 3
    if (pButton3State == HIGH) {
// Serial.println("\nКнопка 3 нажата");
       pButtonFlag=1;   // меняем переменную pButtonFlag
// Serial.println("Флаг кнопки 3 = 1");
    }
       if (pButtonFlag == 1){
// Serial.println("Начало шагового двигателя — 120 шагов вперед");
          digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
          digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
          myStepper.step(120);          // шаг вперед на 120 шагов до позиции 3
          digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
          digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");
          delay(2000);

          myServoFlag=1;   // изменяем переменную ServoFlag для выдачи шоколада
          Serial.println("\nServo Flag = 1 - Dispense Chocolate");

          if (myServoFlag == 1){
// Serial.println("Запуск сервопривода");
             myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
// Serial.println("Присоедините сервобиблиотеку к PIN 10");

             for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
                 myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
                 delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
             }
             myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
// Serial.println("\nОтключить сервобиблиотеку к PIN 10");
// Serial.println("Сервоостанов");
// Serial.println("Удерживать позицию ОТКРЫТО в течение 2 секунд");
             delay(2000);

             myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
// Serial.println("Присоедините сервобиблиотеку к PIN 10");

             for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
               myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
               delay(15);
             }
             myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
// Serial.println("\nОтключить сервобиблиотеку к PIN 10");
// Serial.println("Остановка сервопривода — ожидание следующего выбора");
          }    
          myServoFlag=0;                // изменяет значение myServoFlag обратно на ноль (0)
// Serial.println("Флаг сервопривода = 0");

          digitalWrite(ledLight, HIGH);   // включаем свет, чтобы указать, что шоколад выдан
// Serial.println("\nСвет включен");
          delay(3000);

// Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
          digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
          digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
          myStepper.step(-120);         // шаг назад на 120 шагов до позиции 0
          digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
          digitalWrite(pwmChB, LOW);    // отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");

          digitalWrite(pButton3, LOW);   // инициализируем вывод 6 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("\nКнопка сброса 3 — PIN 6 — низкий уровень");
          digitalWrite(ledLight, LOW);   // выключает свет, указывая на завершение последовательности
// Serial.println("\nСветодиод выключен");

          pButtonFlag=0;   // изменяет значение pButton3Flag обратно на ноль (0)
// Serial.println("\Флаг кнопки 3 = 0");
          delay(2000); 
     }
    // позиция 4
    if (pButton4State == HIGH) {
// Serial.println("\nКнопка 4 нажата");
       pButtonFlag=1;   // меняем переменную pButtonFlag
// Serial.println("Флаг кнопки 3 = 1");
    }
       if (pButtonFlag == 1){
// Serial.println("Начало шагового двигателя — 160 шагов вперед");
          digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
          digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
          myStepper.step(160);          // шаг вперед на 160 шагов до позиции 3
          digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
          digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");
          delay(2000);

          myServoFlag=1;   // изменяем переменную ServoFlag для выдачи шоколада
// Serial.println("\nServo Flag = 1 - выдача шоколада");

          if (myServoFlag == 1){
// Serial.println("Запуск сервопривода");
             myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
// Serial.println("Присоедините сервобиблиотеку к PIN 10");

             for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
                 myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
                 delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
             }
             myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
// Serial.println("\nОтключить сервобиблиотеку к PIN 10");
// Serial.println("Сервоостанов");
// Serial.println("Удерживать позицию ОТКРЫТО в течение 2 секунд");
             delay(2000);

             myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
// Serial.println("Присоедините сервобиблиотеку к PIN 10");

             for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
               myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
               delay(15);
             }
             myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
// Serial.println("\nОтключить сервобиблиотеку к PIN 10");
// Serial.println("Остановка сервопривода — ожидание следующего выбора");
          }    
          myServoFlag=0;   // изменяет значение myServoFlag обратно на ноль (0)
// Serial.println("Флаг сервопривода = 0");

          digitalWrite(ledLight, HIGH);   // включаем свет, чтобы указать, что шоколад выдан
// Serial.println("\nСвет включен");
          delay(3000);

// Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
          digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
          digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
          myStepper.step(-160);         // шаг назад на 160 шагов до позиции 0
          digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
          digitalWrite(pwmChB, LOW);    // отключаем питание шагового двигателя
// Serial.println("Остановка шагового двигателя");

          digitalWrite(pButton3, LOW);   // инициализируем вывод 6 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
// Serial.println("\nКнопка сброса 3 — PIN 6 — низкий уровень");
          digitalWrite(ledLight, LOW);   // выключает свет, указывая на завершение последовательности
// Serial.println("\nСветодиод выключен");

          pButtonFlag=0;   // изменяет значение pButton3Flag обратно на ноль (0)
// Serial.println("\Флаг кнопки 4 = 0");
          delay(2000);          
       }
}  

Я включаю "midi();" Функция воспроизведения короткой мелодии через подключенный пьезодинамик (зуммер) при активации светодиода.

Когда я компилирую миди-код самостоятельно в отдельный скетч, он работает (см. ниже).

int tonePin = 1;
void setup() {
 midi ();
}

void midi() {
    tone(tonePin, 233, 203.992851562);
    delay(226.658723958);
    delay(4.82252604167);
    tone(tonePin, 184, 412.325976562);
    delay(458.139973958);
    delay(4.82252604167);
    tone(tonePin, 184, 99.8262890625);
    delay(110.918098958);
    delay(4.82252604167);
    tone(tonePin, 155, 99.8262890625);
    delay(110.918098958);
    delay(4.82252604167);
    tone(tonePin, 184, 203.992851562);
    delay(226.658723958);
    delay(4.82252604167);
    tone(tonePin, 184, 203.992851562);
    delay(226.658723958);
    delay(236.303776042);
    tone(tonePin, 184, 99.8262890625);
    delay(110.918098958);
    delay(4.82252604167);
    tone(tonePin, 155, 99.8262890625);
    delay(110.918098958);
    delay(4.82252604167);
    tone(tonePin, 184, 203.992851562);
    delay(226.658723958);
    delay(4.82252604167);
    tone(tonePin, 184, 203.992851562);
    delay(226.658723958);
    delay(236.303776042);
    tone(tonePin, 184, 203.992851562);
    delay(226.658723958);
    delay(236.303776042);
    tone(tonePin, 233, 555.555);

   }

void loop() {
  // put your main code here, to run repeatedly:

}

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

, 👍0


1 ответ


3

Вы попытались определить void MIDI() {... внутри функции loop(). Но вы не можете вкладывать определения функций. Ваше определение (реализация) midi() должно находиться вне любой другой функции.

Вот так:

#include <Stepper.h>
#include <Servo.h>
#include <MIDI.h>

/*ARDUINO MOTOR SHIELD
   The pin breakdown is as follows:
   Function          Channel A   Channel B
   Direction         Digital 12  Digital 13
   Speed (PWM)       Digital 3   Digital 11
   Brake             Digital 9   Digital 8
   Current Sensing   Analog 0  Analog 1
*/

const int stepsPerRevolution = 200;  // 1,8 град. Угол шага (200 шагов/360 градусов об.)
const int dirChA = 12;     // присвоение имени "dirChA" контакту 12
const int dirChB = 13;     // присвоение имени "dirChB" контакту 13
const int pwmChA = 3;      // присвоение имени «pwmChA» контакту 3
const int pwmChB = 11;     // присвоение имени «pwmChB» контакту 11
const int brkChA = 9;      // присвоение имени "brkChA" контакту 9
const int brkChB = 8;      // присвоение имени "brkChB" контакту 8

const int srvoMtr = 10;    // присвоение имени "srvoMtr" контакту 10

const int pButton1 = 4;    // присвоение имени «pButton1» контакту 4
const int pButton2 = 5;    // присвоение имени «pButton2» контакту 5
const int pButton3 = 6;    // присвоение имени "pButton3" контакту 6
const int pButton4 = 7;    // присвоение имени «pButton4» контакту 7

const int ledLight = 2;    // присвоение имени «ledLight» контакту 2

const int tonePin = 1;     // присвоение имени "tonePin" контакту 1

Stepper myStepper(stepsPerRevolution, dirChA, dirChB);  // инициализируем библиотеку шаговых двигателей на контактах 12 & 13
Servo myServo;  // инициализируем сервобиблиотеку с логическим именем myServo

int pButton1State = 0;     // переменная для чтения состояния pButton1 как LOW или HIGH
int pButton2State = 0;     // переменная для чтения состояния pButton2 как LOW или HIGH
int pButton3State = 0;     // переменная для чтения состояния pButton3 как LOW или HIGH
int pButton4State = 0;   // переменная для чтения состояния pButton4 как LOW или HIGH

int pButtonFlag = 0;     // переменная, когда кнопка 1 была нажата и отпущена

int myServoPos = 0;    // переменная, когда сервопривод достиг своей позиции
int myServoFlag = 0;   // переменная для сервопривода при нажатии любой из 4 кнопок pButton

void midiplay() {
  tone(tonePin, 233, 203.992851562);
  delay(226.658723958);
  delay(4.82252604167);
  tone(tonePin, 184, 412.325976562);
  delay(458.139973958);
  delay(4.82252604167);
  tone(tonePin, 184, 99.8262890625);
  delay(110.918098958);
  delay(4.82252604167);
  tone(tonePin, 155, 99.8262890625);
  delay(110.918098958);
  delay(4.82252604167);
  tone(tonePin, 184, 203.992851562);
  delay(226.658723958);
  delay(4.82252604167);
  tone(tonePin, 184, 203.992851562);
  delay(226.658723958);
  delay(236.303776042);
  tone(tonePin, 184, 99.8262890625);
  delay(110.918098958);
  delay(4.82252604167);
  tone(tonePin, 155, 99.8262890625);
  delay(110.918098958);
  delay(4.82252604167);
  tone(tonePin, 184, 203.992851562);
  delay(226.658723958);
  delay(4.82252604167);
  tone(tonePin, 184, 203.992851562);
  delay(226.658723958);
  delay(236.303776042);
  tone(tonePin, 184, 203.992851562);
  delay(226.658723958);
  delay(236.303776042);
  tone(tonePin, 233, 555.555);
}


void setup() {
  //Serial.begin(31250); // инициализируем последовательный порт для обмена сообщениями & Поиск неисправностей
  //Serial.println("Выполняется установка UNO");

  // 1 шаговый двигатель
  // Serial.println("\nШаговой двигатель");
  pinMode(dirChA, OUTPUT);   // инициализируем контакт 12 как ВЫХОД
  digitalWrite(dirChA, LOW);   //инициализируем вывод 12 как НИЗКИЙ (напряжение на выводе 0 В)
  // Serial.println("Канал А - PIN 12 - установлен как Выход и Низкий");
  pinMode(dirChB, OUTPUT);   // инициализируем контакт 13 как ВЫХОД
  digitalWrite(dirChB, LOW);   // инициализируем вывод 13 как НИЗКИЙ (напряжение на выводе равно 0 В)
  // Serial.println("Канал B Dir - PIN 13 - установлен как Выход и Низкий");
  pinMode(pwmChA, OUTPUT);   // инициализируем контакт 3 как ВЫХОД
  digitalWrite(pwmChA, LOW);   // инициализируем вывод 3 как НИЗКИЙ (напряжение на выводе равно 0 В)
  // Serial.println("Канал A PWM - PIN 3 - установлен как выходной и низкий");
  pinMode(pwmChB, OUTPUT);   // инициализируем контакт 11 как ВЫХОД
  digitalWrite(pwmChB, LOW);   // инициализируем вывод 11 как НИЗКИЙ (напряжение на выводе 0 В)
  // Serial.println("ШИМ канала B - PIN 11 - установлен как выходной и низкий");
  pinMode(brkChA, OUTPUT);   // инициализируем контакт 9 как ВЫХОД
  digitalWrite(brkChA, LOW);   // инициализируем вывод 9 как НИЗКИЙ (напряжение на выводе равно 0 В)
  // Serial.println("Тормоз канала А - PIN 9 - установлен как выходной и низкий");
  pinMode(brkChB, OUTPUT);   // инициализируем контакт 8 как ВЫХОД
  digitalWrite(brkChB, LOW);   // инициализируем вывод 8 как НИЗКИЙ (напряжение на выводе равно 0 В)
  // Serial.println("Тормоз канала B - PIN 8 - установлен как выходной и низкий");

  myStepper.setSpeed(60);   // устанавливаем скорость шагового двигателя на 60 об/мин
  // Serial.println("\nУстановить скорость шагового двигателя на 60 об/мин");

  // 4 кнопки
  // Serial.println("\n4 кнопки");
  pinMode(pButton1, INPUT);   // инициализируем контакт 4 как ВХОД
  digitalWrite(pButton1, LOW);   // инициализируем вывод 4 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
  // Serial.println("Кнопка 1 — PIN 4 — установите входной и низкий уровень");
  pinMode(pButton2, INPUT);   // инициализируем контакт 5 как ВХОД
  digitalWrite(pButton2, LOW);   // инициализируем вывод 5 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
  // Serial.println("Кнопка 2 — PIN 5 — установите входной и низкий уровень");
  pinMode(pButton3, INPUT);   // инициализируем контакт 6 как ВХОД
  digitalWrite(pButton3, LOW);   // инициализируем вывод 6 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
  // Serial.println("Кнопка 3 — PIN 6 — установить входной и низкий уровень");
  pinMode(pButton4, INPUT);   // инициализируем вывод 7 как ВХОД
  digitalWrite(pButton4, LOW);   // инициализируем вывод 7 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
  // Serial.println("Кнопка 4 — PIN 7 — установить входной и низкий уровень");

  // 1 светодиодный светильник
  // Serial.println("\nLED Light");
  pinMode(ledLight, OUTPUT);   // инициализируем контакт 2 как ВЫХОД
  digitalWrite(ledLight, LOW);   // инициализируем вывод 2 как НИЗКИЙ (напряжение на выводе 0 В)
  // Serial.println("Светодиодный индикатор - PIN 2 - установлен на выход и низкий уровень");

  // 1 пьезодинамик
  midiplay();
  // Serial.println("Пьезодинамик инициализирован");
}

void loop() {
  //Читаем состояние кнопки (нажата или не нажата?)
  // Serial.println("\nЧтение состояний кнопки с 1 по 4: высокое или низкое");
  pButton1State = digitalRead(pButton1);   // считываем состояние pButton1 как LOW или HIGH
  pButton2State = digitalRead(pButton2);   // читаем состояние pButton2 как LOW или HIGH
  pButton3State = digitalRead(pButton3);   // считываем состояние pButton3 как LOW или HIGH
  pButton4State = digitalRead(pButton4);   // читаем состояние pButton4 как LOW или HIGH

  // проверяем, нажата ли кнопка. Если это так, pbuttonState имеет ВЫСОКИЙ уровень:
  if (pButton1State == HIGH) {
    // Serial.println("\nКнопка 1 нажата");
    pButtonFlag = 1; // меняем переменную pButton1Flag
    // Serial.println("Флаг кнопки 1 = 1");
  }
  if (pButtonFlag == 1) {
    // Serial.println("Начало шагового двигателя — 40 шагов вперед");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(40);          // шаг вперед на 40 шагов до позиции 1
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");
    delay(2000);

    myServoFlag = 1;           // изменяем переменную ServoFlag для выдачи шоколада
    // Serial.println("\nServo Flag = 1 - выдача шоколада");

    if (myServoFlag == 1) {
      // Serial.println("Запуск сервопривода");
      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
        delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Сервоостанов");
      // Serial.println("Удерживать позицию ОТКРЫТО в течение 3 секунд");
      delay(2000);

      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
        delay(15);
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Остановка сервопривода — ожидание следующего выбора");
    }
    myServoFlag = 0;              // изменяет значение myServoFlag обратно на ноль (0)
    // Serial.println("Флаг сервопривода = 0");

    digitalWrite(ledLight, HIGH);   // включаем свет, чтобы указать, что шоколад выдан
    // Serial.println("\nLed Light ON");
    // Serial.println("\nPlay Tones");

    midiplay();
    delay(3000);

    // Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(-40);          // шаг назад на 40 шагов до позиции 0
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");

    digitalWrite(pButton1, LOW);   // инициализируем вывод 4 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
    // Serial.println("\nКнопка сброса 1 — PIN 4 — низкий уровень");
    digitalWrite(ledLight, LOW);   //выключает свет, указывая на завершение последовательности
    // Serial.println("\nСветодиод выключен");

    pButtonFlag = 0;              // изменяет значение pButtonFlat обратно на ноль (0)
    // Serial.println("\Флаг кнопки 1 = 0");
    delay(2000);
  }

  // позиция 2
  if (pButton2State == HIGH) {
    // Serial.println("\nКнопка 2 нажата");
    pButtonFlag = 1; // меняем переменную pButtonFlag
    // Serial.println("Флаг кнопки 2 = 1");
  }
  if (pButtonFlag == 1) {
    // Serial.println("Начало шагового двигателя — 80 шагов вперед");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(80);          // шаг вперед на 80 шагов до позиции 2
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");
    delay(2000);

    myServoFlag = 1;  // изменяем переменную ServoFlag для выдачи шоколада
    // Serial.println("\nServo Flag = 1 - выдача шоколада");

    if (myServoFlag == 1) {
      // Serial.println("Запуск сервомотора");
      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
        delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Сервоостанов");
      // Serial.println("Удерживать позицию ОТКРЫТО в течение 2 секунд");
      delay(2000);

      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
        delay(15);
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Остановка сервопривода — ожидание следующего выбора");
    }
    myServoFlag = 0;              // изменяет значение myServoFlag обратно на ноль (0)
    // Serial.println("Флаг сервопривода = 0");

    digitalWrite(ledLight, HIGH);    // включаем свет, чтобы указать, что шоколад выдан
    // Serial.println("\nLed Light ON");
    delay(3000);

    // Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(-80);          // шаг назад на 80 шагов до позиции 0
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");

    digitalWrite(pButton2, LOW);   // инициализируем вывод 5 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
    // Serial.println("\nКнопка сброса 2 — PIN 5 — низкий уровень");
    digitalWrite(ledLight, LOW);   // выключает свет, указывая на завершение последовательности
    // Serial.println("\nСветодиод выключен");

    pButtonFlag = 0; // изменяет значение pButton2Flag обратно на ноль (0)
    // Serial.println("\Флаг кнопки 2 = 0");
    delay(2000);
  }

  // позиция 3
  if (pButton3State == HIGH) {
    // Serial.println("\nКнопка 3 нажата");
    pButtonFlag = 1; // меняем переменную pButtonFlag
    // Serial.println("Флаг кнопки 3 = 1");
  }
  if (pButtonFlag == 1) {
    // Serial.println("Начало шагового двигателя — 120 шагов вперед");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(120);          // шаг вперед на 120 шагов до позиции 3
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");
    delay(2000);

    myServoFlag = 1; // изменяем переменную ServoFlag для выдачи шоколада
    Serial.println("\nServo Flag = 1 - Dispense Chocolate");

    if (myServoFlag == 1) {
      // Serial.println("Запуск сервомотора");
      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
        delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Сервоостанов");
      // Serial.println("Удерживать позицию ОТКРЫТО в течение 2 секунд");
      delay(2000);

      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
        delay(15);
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Остановка сервопривода — ожидание следующего выбора");
    }
    myServoFlag = 0;              // изменяет значение myServoFlag обратно на ноль (0)
    // Serial.println("Флаг сервопривода = 0");

    digitalWrite(ledLight, HIGH);   // включаем свет, чтобы указать, что шоколад выдан
    // Serial.println("\nLed Light ON");
    delay(3000);

    // Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(-120);         // шаг назад на 120 шагов до позиции 0
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    // отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");

    digitalWrite(pButton3, LOW);   // инициализируем вывод 6 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
    // Serial.println("\nКнопка сброса 3 — PIN 6 — низкий уровень");
    digitalWrite(ledLight, LOW);   // выключает свет, указывая на завершение последовательности
    // Serial.println("\nСветодиод выключен");

    pButtonFlag = 0; // изменяет значение pButton3Flag обратно на ноль (0)
    // Serial.println("\Флаг кнопки 3 = 0");
    delay(2000);
  }
  // позиция 4
  if (pButton4State == HIGH) {
    // Serial.println("\nКнопка 4 нажата");
    pButtonFlag = 1; // меняем переменную pButtonFlag
    // Serial.println("Флаг кнопки 3 = 1");
  }
  if (pButtonFlag == 1) {
    // Serial.println("Начало шагового двигателя — 160 шагов вперед");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(160);          // шаг вперед на 160 шагов до позиции 3
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    //отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");
    delay(2000);

    myServoFlag = 1; // изменяем переменную ServoFlag для выдачи шоколада
    // Serial.println("\nServo Flag = 1 - выдача шоколада");

    if (myServoFlag == 1) {
      // Serial.println("Запуск сервопривода");
      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 0; myServoPos <= 100; myServoPos += 1) { // изменяется от 0 градусов до 100 градусов с шагом в 5 градусов
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'myServoPos'
        delay(15);                    // ждем 3 секунды, пока сервопривод достигнет позиции
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Сервоостанов");
      // Serial.println("Удерживать позицию ОТКРЫТО в течение 2 секунд");
      delay(2000);

      myServo.attach(srvoMtr);   // подключает сервобиблиотеку к контакту 10
      // Serial.println("Присоедините сервобиблиотеку к PIN 10");

      for (myServoPos = 100; myServoPos >= 0; myServoPos -= 1) { // изменяется от 100 градусов до 0 градусов с шагом в 1 градус
        myServo.write(myServoPos);    // сообщаем сервоприводу перейти на позицию в переменной 'pos
        delay(15);
      }
      myServo.detach();   // отсоединяем библиотеку сервоприводов от контакта 10
      // Serial.println("\nОтключить сервобиблиотеку к PIN 10");
      // Serial.println("Остановка сервопривода — ожидание следующего выбора");
    }
    myServoFlag = 0; // изменяет значение myServoFlag обратно на ноль (0)
    // Serial.println("Флаг сервопривода = 0");

    digitalWrite(ledLight, HIGH);   // включаем свет, чтобы указать, что шоколад выдан
    // Serial.println("\nСвет включен");
    delay(3000);

    // Serial.println("Запуск шагового двигателя - возврат в нулевую позицию");
    digitalWrite(pwmChA, HIGH);   // включаем питание шагового двигателя
    digitalWrite(pwmChB, HIGH);   // включаем питание шагового двигателя
    myStepper.step(-160);         // шаг назад на 160 шагов до позиции 0
    digitalWrite(pwmChA, LOW);    // отключаем питание шагового двигателя
    digitalWrite(pwmChB, LOW);    // отключаем питание шагового двигателя
    // Serial.println("Остановка шагового двигателя");

    digitalWrite(pButton3, LOW);   // инициализируем вывод 6 как НИЗКИЙ (напряжение на выводе менее 1,5 В)
    // Serial.println("\nКнопка сброса 3 — PIN 6 — низкий уровень");
    digitalWrite(ledLight, LOW);   // выключает свет, указывая на завершение последовательности
    // Serial.println("\nСветодиод выключен");

    pButtonFlag = 0; // изменяет значение pButton3Flag обратно на ноль (0)
    // Serial.printl n("\Button 4 Flag = 0");
    delay(2000);
  }
}
,

Спасибо, Хосе! Я ценю ваш быстрый ответ. Итак, могу ли я вызвать программу для запуска вне функции цикла. Если да, то как? Я не эксперт., @Stevie_D

Существует разница между **определением** функции и **вызовом** функции. Вы должны определить его вне любой другой функции. Но вы должны вызвать ее из setup() или цикла() (или какой-либо другой функции, которая вызывается ими и т. д.). Чтобы определить функцию, вы должны сказать void MIDI() {бла-бла-код здесь}, и чтобы вызвать его, просто напишите midi();., @jose can u c

Привет, Хосе, я новичок в Arduino. Мне нужен подробный пример в виде эскиза, или, если можно, исправьте предоставленный мной эскиз, чтобы он скомпилировался, пожалуйста. Хорошо?, @Stevie_D

Вы уже это сделали... Во втором блоке кода, который "действительно работает", поскольку midi() является единственным, у вас есть блок, который определяет, что делает midi(), и он не находится **внутри** setup () или loop(). И вы вызвали midi(); из функции setup(). Итак, просто переместите определение midi() {...} в место, которое **не находится внутри** какой-либо другой функции. В том месте в loop() или setup(), где вы хотите, чтобы произошло действие, просто *вызовите* функцию с помощью midi();, @jose can u c

Мне очень жаль, Хосе. У меня не получается, потому что я не понимаю/не понимаю вашего объяснения., @Stevie_D

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

Я обновил свой ответ, включив в него это очень простое изменение, точно так, как я объяснил. Просто ПЕРЕМЕЩИТЕ миди-функцию ВНЕ цикла()., @jose can u c

Очень полезно, Хосе! Спасибо, что помогли мне. Я благодарен вам., @Stevie_D

Код компилируется и загружается со смешанными результатами. Я отправил исправленный код под новым вопросом: «Код, вызывающий неработоспособность серводвигателя!» Пожалуйста, посмотрите. Спасибо., @Stevie_D

Извините, я больше не заинтересован в написании кода для вашего проекта. Я предлагаю вам узнать больше об основах программирования на языке C, так как это действительно поможет вам решить эти простые проблемы самостоятельно., @jose can u c