정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

exit status 1 보드 Arduino/Genuino Uno 컴파일 에러.
최민규 | 2017-10-10

#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"

//OLED 연결핀
#define CLK  13
#define MOSI  11
#define CS  10
#define DC  4
#define RST 12
Adafruit_SSD1306 display(MOSI, CLK, DC, RST, CS);

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

/********************************************/

#define CHARWIDTH           5
#define CHARHEIGHT          8
#define AXISWIDTH           (2 + 1)
#define VISIBLEVALUEPIXELS  (128 - AXISWIDTH)
#define NUMVALUES           (2 * VISIBLEVALUEPIXELS)

#define TRIGGER_ENABLE_PIN       2
#define SCREEN_UPDATE_ENABLE_PIN 3

byte values[NUMVALUES];
int pos = 0;
int count = 0;
unsigned long readStartTime = 0;
int sampleRate = 1;

/********************************************/

//OLED에 글씨 출력하는 함수
void displayln(const char* format, ...)
{
  char buffer[32];

  va_list args;
  va_start(args, format);
  vsprintf(buffer, format, args);
  va_end(args);

  display.setTextSize(1);
  display.setTextColor(WHITE);

  int len = strlen(buffer);
  Serial.println(len);
  for (uint8_t i = 0; i < len; i++) {
    display.setCursor(9 * CHARWIDTH + (i * 7), 7 * CHARHEIGHT - 2);
    display.println(buffer[i]);
    Serial.print(buffer[i]);
  }
}

//그래프의 Y축에 기준점 표시
void drawAxis()
{
  for (int x = 0; x < 2; x++) {
    display.drawPixel(x,  0, WHITE);
    display.drawPixel(x, 13, WHITE);
    display.drawPixel(x, 26, WHITE);
    display.drawPixel(x, 38, WHITE);
    display.drawPixel(x, 50, WHITE);
    display.drawPixel(x, 63, WHITE);
  }
}

//들어온 데이터를 바탕으로 파형을 OLED에 그린다
void drawValues()
{
  int start = 0;

  if ( digitalRead(TRIGGER_ENABLE_PIN) ) {
    for (int i = 0; i < NUMVALUES; i++) {
      if ( values[i] == 0 ) {
        for (; i < NUMVALUES; i++) {
          if ( values[i] != 0 ) {
            start = i;
            break;
          }
        }
        break;
      }
    }

    if ( start >= VISIBLEVALUEPIXELS )
      return;
  }

  for (int i = 0; i < VISIBLEVALUEPIXELS; i++) {
    display.drawPixel(i + AXISWIDTH, 63 - (values[i + start]), WHITE);
  }
}

//화면 프레임시간 출력
void drawFrameTime(unsigned long us)
{
  displayln("%ld us", us);
}

/********************************************/

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC);

  //버튼 모드 설정
  pinMode(TRIGGER_ENABLE_PIN, INPUT_PULLUP);
  pinMode(SCREEN_UPDATE_ENABLE_PIN, INPUT_PULLUP);

  display.display();
  delay(2000);
  display.clearDisplay();
}

/********************************************/

void loop() {
  //1프레임 출력의 시간을 체크하기 위한 시간 측정 시작
  if ( pos == 0 )
    readStartTime = micros();

  //BIT SHIFT 연산
  if ( (++count) % sampleRate == 0 ) {
    values[pos++] = analogRead(0) >> 4;
  }

  if ( pos >= NUMVALUES ) {
    unsigned long totalSampleTime = (micros() - readStartTime) / 2;

    //화면 업데이트 핀이 눌려졌다면 OLED에 파형을 출력한다.
    if ( !digitalRead(SCREEN_UPDATE_ENABLE_PIN) ) {
      display.clearDisplay();
      drawAxis();
      drawValues();
      drawFrameTime(totalSampleTime);
      display.display();
    }

    pos = 0;
    count = 0;
  }
}

 

미니 오실로스코프 컴파일 문제가있네요 무슨문제일까요 아무리 도무지 찾아봐도 모르겠네요ㅜ

이전글   |    조도센서2개를 이용한 스텝모터제어 2017-10-08
다음글   |    아두이노와 서보모터 6개를 이용하여 로봇팔을 제작하고 있습니다.... 2017-10-10