삼성 아틱 GPIO 사용하기 - Blink LED (C 사용시)

메이커 2018-09-11 (화) 09:23 3년전 1158  

이전 포스팅에서는 아틱 IDE과 아두이노 IDE, 그리고 파이썬을 이용한 LED를 깜빡이는 예제를 구현해보았습니다.

 

이번에는 C언어를 사용해보도록 하겠습니다.

 

본 튜토리얼의 전체 PDF는 다음의 링크에서 참고하실 수 있습니다. 

 

https://goo.gl/JVMp9q 

  

4) C언어를 사용하는 경우 

  

nano blink.c

 

 #include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

#include <unistd.h>

 

#define HIGH 1

#define LOW 0

#define INPUT 1

#define OUTPUT 0

 

int outputPin = 28;

 

bool digitalPinMode(int pin, int dir){

  FILE * fd;

  char fName[128];

  

  // Exporting the pin to be used

  if(( fd = fopen("/sys/class/gpio/export", "w")) == NULL) {

    printf("Error: unable to export pin\n");

    return false;

  }

  fprintf(fd, "%d\n", pin);

  fclose(fd);

 

  // Setting direction of the pin

  sprintf(fName, "/sys/class/gpio/gpio%d/direction", pin);

  if((fd = fopen(fName, "w")) == NULL) {

    printf("Error: can't open pin direction\n");

    return false;

  }

  if(dir == OUTPUT) {

    fprintf(fd, "out\n");

  } else {

    fprintf(fd, "in\n");

  }

  fclose(fd);

 

  return true;

}

 

bool digitalWrite(int pin, int val) {

  FILE * fd;

  char fName[128];

 

  // Open pin value file

  sprintf(fName, "/sys/class/gpio/gpio%d/value", pin);

  if((fd = fopen(fName, "w")) == NULL) {

    printf("Error: can't open pin value\n");

    return false;

  }

  if(val == HIGH) {

    fprintf(fd, "1\n");

  } else {

    fprintf(fd, "0\n");

  }

  fclose(fd);

 

  return true;

}

 

int setup() {

   if (!digitalPinMode(outputPin, OUTPUT))

     return -1;

   return 0;

}

 

int main(void) {

  if (setup() == -1)

  {

    exit(1);

  }

  while(1){

    digitalWrite(outputPin, HIGH);

    sleep(1);

    digitalWrite(outputPin, LOW);

    sleep(1);

  }

 

  return 0;

}

 

 


18f2d84b4efba7e9a9075d8254b2341d_1536629
 

  

메카리워즈 Image Map


모바일 버전으로 보기