diff --git a/project/motor.c b/project/motor.c old mode 100644 new mode 100755 index ddc617f..9f35bab --- a/project/motor.c +++ b/project/motor.c @@ -1,18 +1,99 @@ #include -#include +#include #include #include #define BASEPATH "/sys/class/gpio/" #define GPIO_FOLDER "gpio%s/" -#define PIN_IN1 "6" -#define PIN_IN2 "13" -#define PIN_IN3 "19" -#define PIN_IN4 "26" +#define PIN_MOTOR1_FORWARD "6" +#define PIN_MOTOR1_REVERSE "13" +#define PIN_MOTOR2_FORWARD "19" +#define PIN_MOTOR2_REVERSE "26" + +#define MOTOR_ON 0 +#define MOTOR_OFF 1 + +void writeFile(char *filename, char *buffer, size_t count) +{ + int fd = open(filename, O_WRONLY); + write(fd, buffer, count); + close(fd); +} + +void registerPin(char *pin) +{ + writeFile(BASEPATH "export", pin, strlen(pin)); +} + +void freePin(char *pin) +{ + writeFile(BASEPATH "unexport", pin, strlen(pin)); +} + +void setDirection(char *pin, char *direction, int dirlen) +{ + char path[50]; + sprintf(path, BASEPATH GPIO_FOLDER "direction", pin); + writeFile(path, direction, dirlen); +} + +void registerOutput(char *pin) +{ + registerPin(pin); + setDirection(pin, "out", 3); +} + +void writeOutput(char *pin, int state) +{ + char path[50]; + sprintf(path, BASEPATH GPIO_FOLDER "value", pin); + FILE *fd = fopen(path, "w"); + fprintf(fd, "%i", state); + fclose(fd); +} + +void forward(int motorNumber) +{ + if(motorNumber == 1) + { + writeOutput(PIN_MOTOR1_FORWARD, MOTOR_ON); + } + else if(motorNumber == 2) + { + writeOutput(PIN_MOTOR2_FORWARD, MOTOR_ON); + } + else if(motorNumber == 3) + { + writeOutput(PIN_MOTOR1_FORWARD, MOTOR_ON); + writeOutput(PIN_MOTOR2_FORWARD, MOTOR_ON); + } +} + +void reverse(int motorNumber) +{ + if(motorNumber == 1) + { + writeOutput(PIN_MOTOR1_REVERSE, MOTOR_ON); + } + else if(motorNumber == 2) + { + writeOutput(PIN_MOTOR2_REVERSE, MOTOR_ON); + } + else if(motorNumber == 3) + { + writeOutput(PIN_MOTOR1_REVERSE, MOTOR_ON); + writeOutput(PIN_MOTOR2_REVERSE, MOTOR_ON); + } +} int main() { - + registerOutput(PIN_MOTOR1_FORWARD); + registerOutput(PIN_MOTOR1_REVERSE); + registerOutput(PIN_MOTOR2_FORWARD); + registerOutput(PIN_MOTOR2_REVERSE); + + return 0; }