這代碼通常都是複製過來,在小改下就好了git
代碼以下:oop
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #define LOGO16_GLCD_HEIGHT 16 //定義顯示高度 #define LOGO16_GLCD_WIDTH 16 //定義顯示寬度 int measurePin = 0; //Connect dust sensor to Arduino A0 pin int ledPower = 2; //Connect 3 led driver pins of dust sensor to Arduino D2 int samplingTime = 280; int deltaTime = 40; int sleepTime = 9680; int dustVal=0; int i=0; float ppm=0; char s[32]; float voltage=0; float dustdensity=0; float ppmpercf=0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) // init done i=0; ppm=0; display.clearDisplay(); } void loop(){ i=i+1; digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(samplingTime); dustVal = analogRead(measurePin); // read the dust value ppm=ppm+dustVal; delayMicroseconds(deltaTime); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(sleepTime); voltage=ppm/i*0.0049; dustdensity=0.17*voltage-0.1; ppmpercf=(voltage-0.0256)*120000; if(ppmpercf<0) ppmpercf=0; if(dustdensity<0) dustdensity=0; if(dustdensity>0.5) dustdensity=0.5; String dataString=""; dataString+=dtostrf(voltage,9,4,s); dataString+="PM2.5 ---> "; dustdensity = dustdensity*1000; dataString+=dtostrf(dustdensity,5,2,s); dataString+=" -----> "; dataString+=dtostrf(ppmpercf,8,0,s); i=0; ppm=0; Serial.println(dustdensity); Serial.println(dataString); display.clearDisplay(); display.setCursor(0,0); display.setTextSize(1); //設置字體大小 display.setTextColor(WHITE); //設置字體白色 display.print("dustDensity:"); display.print(dataString); //輸出字符 display.display(); //顯示以上 delay(1000); }
模塊:字體
OLED12864顯示屏:ui
模塊針腳 Arduino針腳spa
VCC ----> 3.3Vcode
GND ----> GNDblog
SCL ----> A5it
SDA ----> A4class
夏普灰塵傳感器GP2Y10:
float