В прошлой статье мы разобрали как создать, закачать и запустить простую программу на С. Данная инструкция покажет, как можно использовать аппаратные ресурсы в Linux. Во время старта ядра Linux, оно загружает несколько модулей, которые дают доступ к "железу". После того, как эти модули были загружены, пользователь может "общаться" с "железом", используя стандартные файловые операции записи и чтения. Эта инструкция не имеет целью рассказать обо всех доступных функциях работы с аппаратными ресурсами.
Модули, доступные в EV3 блоке, могут быть отображены с помощью команды lsmod. Модули Lego, относящиеся к "железу", имеют префикс d_Имя в своем названии. Пример, представленный ниже, показывает один из способов управления моторами. Для того, чтобы скомпилировать этот код, я использовал переменные, объявленные в исходном коде прошивки EV3.
Как и в прошлой инструкции, надо создать папку для программы, файл программы motor.c и скопировать в нее следующий код:
Этот код - экспериментальный, используйте его на свой риск!
Этот код - экспериментальный, используйте его на свой риск!
#include <fcntl.h>
#include “lms2012.h”
// Motor power 0..100
const int SPEED = 50;
// The motor operations use a single bit (or a combination of them)
// to determine which motor(s) will be used
// A = 0×1, B = 0×2, C = 0×4, D = 0×8
// AC = 0×5
const char MOTOR = 0×1;
int main()
{
char motor_command[5];
int file;
//Open the device file
if((file = open(PWM_DEVICE_NAME, O_WRONLY)) == -1)
return -1; //Failed to open device
// For most operations, the second byte represent the motor(s)
motor_command[1] = MOTOR;
// Start the motor
motor_command[0] = opOUTPUT_START;
write(file,motor_command,2);
// Set the motor power
motor_command[0] = opOUTPUT_POWER;
motor_command[2] = SPEED;
write(file,motor_command,3);
// Run the motor for a couple of seconds
sleep(2);
// Stops the motor
motor_command[0] = opOUTPUT_STOP;
motor_command[1] = MOTOR;
write(file,motor_command,2);
// Close the device file
close(file);
return 0;
}
После создания motor.c и добавления всех необходимых файлов, код может быть скомпилирован:
arm-none-linux-gnueabi-gcc motor.c -o motor
Данная программа взаимодействует с модулем ядра d_pwm. Больше деталей о том, как можно управлять моторами, можно узнать из файла d_pwm.c в функции Device1Write.
Процедура загрузки программы на EV3 блок и ее запуска была приведена в прошлой статье.
Данная статья является переводом оригинальной статьи "Using the Motors" Lauro Ojeda с согласия автора.
Данная статья является переводом оригинальной статьи "Using the Motors" Lauro Ojeda с согласия автора.
Комментариев нет:
Отправить комментарий