<main 코드>
현재 동작: 차 움직이고, 2000 delay 이후에 정지
#include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <fcntl.h> #include <unistd.h> #include <linux/i2c-dev.h> #include <sys/ioctl.h> #define I2C_DEVICE "/dev/i2c-1" #define I2C_ADDR 0x16 int fd; int open_i2c() { if ((fd = open(I2C_DEVICE, O_RDWR)) < 0) { printf("Failed to open the i2c bus\n"); return -1; } if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) { printf("Failed to access addr\n"); return -1; } return 0; } void ctrl_car(int l_dir, int l_speed, int r_dir, int r_speed) { int reg = 0x01; unsigned char data[5] = {reg, (unsigned char)l_dir, (unsigned char)l_speed, (unsigned char)r_dir, (unsigned char)r_speed}; if (write(fd, data, 5) != 5) { printf("Failed to write to the i2c bus\n"); } } void car_run(int speed1, int speed2) { ctrl_car(1, speed1, 1, speed2); } void car_stop() { int reg = 0x02; unsigned char data[2] = {reg, 0x00}; if (write(fd, data, 2) == -1) { printf("Failed to write to the i2c bus\n"); } else printf ("car stop"); } int main() { if (open_i2c() != 0) { return -1; } car_run(100, 100); delay(2000); car_stop(); return 0; }
<sensor read 코드>
현재 동작: 4개의 센서 값 읽고 print
#include <stdio.h> #include <WiringPi.h> #include <time.h> #define Tracking_Left1 2 #define Tracking_Left2 3 #define Tracking_Right1 0 #define Tracking_Right2 7 int main() { if (wiringPiSetup() == -1) { return 1; } pinMode(Tracking_Left1, INPUT); pinMode(Tracking_Left2, INPUT); pinMode(Tracking_Right1, INPUT); pinMode(Tracking_Right2, INPUT); while (1) { printf("%d", digitalRead(Tracking_Left1)); printf("%d", digitalRead(Tracking_Left2)); printf("%d", digitalRead(Tracking_Right1)); printf("%d", digitalRead(Tracking_Right2)); delay(10); }
<참고 코드>
void Car_Back(YB_Pcb_Car *car, int speed1, int speed2) { Ctrl_Car(car, 0, speed1, 0, speed2); } void Car_Left(YB_Pcb_Car *car, int speed1, int speed2) { Ctrl_Car(car, 0, speed1, 1, speed2); } void Car_Right(YB_Pcb_Car *car, int speed1, int speed2) { Ctrl_Car(car, 1, speed1, 0, speed2); } void Car_Spin_Left(YB_Pcb_Car *car, int speed1, int speed2) { Ctrl_Car(car, 0, speed1, 1, speed2); } void Car_Spin_Right(YB_Pcb_Car *car, int speed1, int speed2) { Ctrl_Car(car, 1, speed1, 0, speed2); }

![[Notion] :](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fc0389671-d63b-4c5d-a65d-5113fb1666a2%2Faf276f8d-c43c-4190-a784-11927a8f1c86%2F%25EB%2585%25B8%25EC%2585%2598_%25EC%2595%2584%25EC%259D%25B4%25EC%25BD%2598.png?table=block&id=244dd211-78d0-4c22-8c35-2efb01da5258&cache=v2)