Member 14643516 Ответов: 3

Я хочу, чтобы приведенный ниже код был преобразован в C.


#include <servo.h> //включая библиотеку серводвигателя
Servo sg90; //инициализация переменной для servo с именем sg90
int initial_position = 90; //объявление начальной позиции на 90
int LDR1 = A0; //вывод, к которому подключен LDR
int LDR2 = A1; //вывод, к которому подключен LDR
int error = 5; //инициализация переменной для ошибки
int servopin=9;
недействительными установки()
{

sg90.attach(servopin); // прикрепляет сервопривод на штырь 9
pinMode(LDR1, INPUT); //создание PIN-кода LDR в качестве входного сигнала
pinMode(LDR2, вход);
sg90.write(initial_position); //перемещение сервопривода на 90 градусов
задержка(2000); // дает задержку в 2 секунды
}

пустая петля()
{
int R1 = analogRead(LDR1); // считывание значения из LDR 1
int R2 = analogRead(LDR2); // считывание значения из LDR 2
int diff1= abs(R1 - R2); // вычисление разницы между значениями LDR
int diff2= abs(R2 - R1);

if((diff1 <= error) || (diff2 <= error)) {
//если разница находится под ошибкой, то ничего не делайте
} еще {
если(R1 > R2)
{
initial_position = --initial_position; //переместите сервопривод в сторону 0 градусов
}
если(R1 < R2)
{
initial_position = ++initial_position; //переместите сервопривод на 180 градусов
}
}
sg90.write(initial_position); // запись позиции в серво
задержка(100);
}

Что я уже пробовал:

код написан на языке Си++. мне нужно перевести его в с. Спасибо.

Richard MacCutchan

Единственная часть, которая является C++, - это класс Servo, поэтому вам нужно будет связаться с человеком, который его написал. Кроме того, если у вас есть исходный код, вы можете конвертировать его самостоятельно.

Rick York

ОК. Так в чем же заключается ваш вопрос?

3 Ответов

Рейтинг:
2

Mike Hankey

Код Arduino в основном написан на C++ для среды Arduino. Код тесно переплетен, и для рефакторинга в C вам нужно будет спуститься на много уровней и модифицировать код на каждом уровне, в зависимости от сложности кода, определяющей, насколько трудно конвертировать.

Код доступен в различных подкаталогах, где установлена Arduino IDE.

Например код библиотеки сервоприводов находится;
&ЛТ;где IDE="" установленных=""&ГТ;\arduino-1.8.12\libraries\Servo\src\avr\Servo.cpp

Вероятно, было бы так же легко написать код с нуля, как и рефакторинг кода Arduino.

Я переработал некоторый код для использования в Atmel Studio, но в большинстве случаев я просто пишу код с нуля, используя код Arduino для справки.

Удачи вам!


Рейтинг:
1

OriginalGriff

То есть C: C++ - это (как следует из названия) надмножество C, и код C будет выполняться под C++.

И наоборот, если он не использует специально функции языка C++ (например, классы, операторы вставки и т. д.), код C++ будет работать практически без изменений, как код C.
Этот код не использует никаких функций языка C++: это код C, если только экземпляр Servo, который вы объявляете, не является классом (а мы понятия не имеем, что это такое: у нас нет доступа к остальной части вашего кода).


Рейтинг:
0

KarstenK

При преобразовании кода в C вы можете использовать структуры для использования дизайна класса, определив структуру со всеми членами класса и перепроектировав вызываемые функции с дополнительным первым параметром указателя на структуру. Это позволяет избежать копирования данных.

Читать это учебник по структуре и не забывайте работать с пуантами.