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:
}
Я искал в Интернете ответ, но не нашел ни одного, который напрямую связан с тем, что я пытаюсь сделать. Можете ли вы мне помочь, пожалуйста?
@Stevie_D, 👍0
1 ответ
Вы попытались определить 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);
}
}
- Teensy 2.0 MIDI: количество нот в аккорде ограничено 6?
- Как получить исходные файлы для библиотек Arduino?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Существуют ли библиотеки сглаживания сигналов для Arduino?
- Wire.h не найден!
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Как эта строка кода определяет, подключен ли последовательный интерфейс?
Спасибо, Хосе! Я ценю ваш быстрый ответ. Итак, могу ли я вызвать программу для запуска вне функции цикла. Если да, то как? Я не эксперт., @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