| #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;
 }
 }
   미니 오실로스코프 컴파일 문제가있네요 무슨문제일까요 아무리 도무지 찾아봐도 모르겠네요ㅜ |