课程报告时顺便做的一个小玩意
单片机源程序如下:
- int pulsePin = A0; // Pulse Sensor purple wire connected to analog pin 0
- int blinkPin = 12; // pin to blink led at each beat
- int fadePin = 13; // pin to do fancy classy fading blink at each beat
- int fadeRate = 0; // used to fade LED on with PWM on fadePin
- // these variables are volatile because they are used during the interrupt service routine!
- volatile int BPM; // used to hold the pulse rate
- volatile int Signal; // holds the incoming raw data
- volatile int IBI = 600; // holds the time between beats, must be seeded!
- volatile boolean Pulse = false; // true when pulse wave is high, false when it's low
- volatile boolean QS = false; // becomes true when Arduoino finds a beat.
- #include "U8glib.h"
- U8GLIB_SSD1306_128X64 u8g(5, 4, 6, 2, 3); // SW SPI Com: SCL = 5,SDA = 4,CS = 6,RST = 3,DC = 2
- const uint8_t rook_bitmap[] PROGMEM = {
- 0x00, // 00000000
- 0x55, // 01010101
- 0x7f, // 01111111
- 0x3e, // 00111110
- 0x3e, // 00111110
- 0x3e, // 00111110
- 0x3e, // 00111110
- 0x7f // 01111111
- };
- void setup() {
- pinMode(blinkPin, OUTPUT); // pin that will blink to your heartbeat!
- pinMode(fadePin, OUTPUT); // pin that will fade to your heartbeat!
- Serial.begin(115200); // we agree to talk fast!
- interruptSetup(); // sets up to read Pulse Sensor signal every 2mS
- // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE,
- // AND APPLY THAT VOLTAGE TO THE A-REF PIN
- //analogReference(EXTERNAL);
- u8g.setColorIndex(1); // pixel on
- }
- void loop() {
- u8g.firstPage();
- do {
- draw();
- } while ( u8g.nextPage() );
- sendDataToProcessing(' ', Signal); // send Processing the raw Pulse Sensor data
- if (QS == true) { // Quantified Self flag is true when arduino finds a heartbeat
- fadeRate = 255; // Set 'fadeRate' Variable to 255 to fade LED with pulse
- sendDataToProcessing(',', BPM); // send heart rate with a 'B' prefix
- sendDataToProcessing(',', IBI); // send time between beats with a 'Q' prefix
- QS = false; // reset the Quantified Self flag for next time
- }
- ledFadeToBeat();
- delay(20); // take a break
- }
- void draw(void) {
- // graphic commands to redraw the complete screen should be placed here
- u8g.setFont(u8g_font_fur20);
- //u8g.setFont(u8g_font_osb21);
- if (QS) {
- u8g.drawBitmapP( 40, 40, 1, 8, rook_bitmap);
- }
- u8g.drawStr( 10, 20, "BPM");
- u8g.setPrintPos(80, 20);
- u8g.print(BPM);
- }
- void ledFadeToBeat() {
- fadeRate -= 15; // set LED fade value
- fadeRate = constrain(fadeRate, 0, 255); // keep LED fade value from going into negative numbers!
- analogWrite(fadePin, fadeRate); // fade LED
- }
- void sendDataToProcessing(char symbol, int data ) {
- Serial.print(symbol); // symbol prefix tells Processing what type of data is coming
- Serial.println(data); // the data to send culminating in a carriage return
- }
复制代码
所有资料51hei提供下载:
pulseOLED.zip
(3.48 KB, 下载次数: 31)
|