NeoPixel LED hjärta Sensor jacka (3 / 6 steg)
Steg 3: Kodning tid!
Okej, nu är det dags att förbereda vår kod. Vi måste införliva delar av båda våra skisser så att Arduino bearbetar input från heartbeat sensorn som kontrollerar den NeoPixel ringen.
Puls sensor koden blir vår bas och vi kommer att lägga kod från den "enkla" skiss som vi använde för arduino. Vi måste skära större portionr av enkel skiss ut och klistra in dem i sina respektive platser inuti puls senor koden. Se nedan
NeoPixel Ring enkel skiss (c) 2013 Shae Erisson
släppt under GPLv3 licens att matcha resten av AdaFruit NeoPixel biblioteket
#include < Adafruit_NeoPixel.h >
#ifdef __AVR__
#include < avr/power.h >
#endif
Vilka stift på Arduino är ansluten till NeoPixels?
På en fasad eller Gemma föreslår vi att ändra detta till 1
#define stift 6
Hur många NeoPixels är kopplade till Arduino?
#define NUMPIXELS 16
När vi setup NeoPixel biblioteket, vi berätta det hur många pixlar, och som stift för att använda för att skicka signaler.
Observera att för äldre NeoPixel remsor du kan behöva ändra den tredje parametern--se strandtest
exempel för mer information om möjliga värden.
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel (NUMPIXELS, stift, NEO_GRB + NEO_KHZ800);
int delayval = 500. fördröjning för en halv sekund
void setup() {
Detta är för prydnadssak 5V 16MHz, kan du ta bort dessa tre rader om du inte använder en fasad
#if definieras (__AVR_ATtiny85__)
om (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
Slutet av prydnadssak speciell kod
pixels.BEGIN(); Detta initierar NeoPixel biblioteket.
}
void loop() {
För en uppsättning NeoPixels den första NeoPixel är 0, det andra är 1, hela vägen upp till antalet pixlar minus en.
för (int jag = 0; jag < NUMPIXELS; i ++} {
pixlar. Färgen tar RGB-värden, från 0,0,0 upp till 255,255,255
pixels.setPixelColor (i, pixlar. Color(0,150,0)); Måttligt ljusa gröna color.pixels.show(); Detta skickar uppdaterad pixel färg till hårdvaran.
Delay(delayval); Fördröjning för en viss tid (i millisekunder)
}
}
Vad vi behöver göra skärs ut var och en av de enskilda delarna av denna kod, särskilt variabeldeklarationer på toppen, som ogiltiga inställningar och ogiltig loop delar. Öppna både detta och puls Sensor skissen i separata fönster och överföra varje bit av koden från den "enkla" skissen över till sina respektive i puls sensor skissen.
När du är klar bör det se ut så här:
/ * Puls Sensor Amped 1.4 av Joel Murphy och Yury Gitman http://www.pulsesensor.com
---------------------- Notes ---------------------- ----------------------
Denna kod:
1) blinkar ledde till användarens levande hjärta stift 13
2) bleknar ledde till användarens levande HeartBeat
3) avgör BPM
4) skriver ut alla ovanstående att SerialRead mig:
https://github.com/WorldFamousElectronics/PulseSe...
---------------------- ---------------------- ----------------------
*
/ Variabler
int pulsePin = 0; Puls Sensor lila tråd ansluten till analoga stift 0
int blinkPin = 13. PIN blinka ledde på varje taktslag
int fadePin = 5; stift till fancy classy blekning blink på varje taktslag
int fadeRate = 0; används för att blekna LED på med PWM på fadePin
Flyktiga variabler, som används i avbrottstjänstens rutin!
flyktiga int BPM; int som innehåller rå Analog i 0. uppdateras varje 2mS
flyktiga int Signal; innehar inkommande rådata
flyktiga int IBI = 600; int som håller tidsintervallet mellan slår! Måste vara seedad!
flyktiga booleska puls = false; "True" när användarens levande heartbeat upptäcks. "Falskt" när inte en "levande beat".
flyktiga booleska QS = false; blir sant när Arduoino finner ett beat.
Hälsningar Serial OutPut--Sätta den här upp till dina behov
statisk boolean serialVisual = sant; Satt till "false" som standard. Åter inställd på 'true' för att se Arduino seriell övervaka ASCII visuella puls
---ADAFRUIT VARIABLER---
#include < Adafruit_NeoPixel.h >
#ifdef __AVR__
#include < avr/power.h >
#endif
Vilka stift på Arduino är ansluten till NeoPixels?
På en fasad eller Gemma föreslår vi att ändra detta till 1
#define stift 8
Hur många NeoPixels är kopplade till Arduino?
#define NUMPIXELS 16
När vi setup NeoPixel biblioteket, vi berätta det hur många pixlar, och som stift för att använda för att skicka signaler.
Observera att för äldre NeoPixel remsor du kan behöva ändra den tredje parametern--se strandtest
exempel för mer information om möjliga värden.
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel (NUMPIXELS, stift, NEO_GRB + NEO_KHZ800);
int delayval = 500. fördröjning för en halv sekund
//--------------------------------------------------------------------------
void setup() {
pinMode(blinkPin,OUTPUT); PIN-kod som kommer att blinka till ditt hjärta!
pinMode(fadePin,OUTPUT); PIN-kod som kommer att blekna till ditt hjärta!
Serial.BEGIN(115200); Vi är överens om att prata snabbt!
interruptSetup(); ställer in för att läsa puls Sensor signal varje 2mS
Om du driver puls sensorn på spänning lägre än styrelsen spänningen,
O-KOMMENTERA NÄSTA LINJE OCH TILLÄMPA DEN SPÄNNINGEN TILL A-REF STIFT
analogReference(EXTERNAL);
---ADAFRUIT installationen koden---
Detta är för prydnadssak 5V 16MHz, kan du ta bort dessa tre rader om du inte använder en fasad
#if definieras (__AVR_ATtiny85__)
om (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
Slutet av prydnadssak speciell kod.
pixels.BEGIN(); Detta initierar NeoPixel biblioteket.
}
//--------------------------------------------------------------------------
Där magiskt händer
void loop() {
serialOutput();
om (QS == true) {/ / ett hjärtslag hittades
BPM och IBI har fastställts
Kvantifierade Self "QS" true när arduino hittar ett hjärtslag
fadeRate = 255; Gör LED toningseffekt hända
Ange "fadeRate" variabel till 255 blekna LED med puls
serialOutputWhenBeatHappens(); Ett Beat hänt, utgång som till följetong.
QS = false; återställa flaggan kvantifierade Self till nästa gång
}
ledFadeToBeat(); Gör LED toningseffekt hända
Delay(20); ta en paus
---ADAFRUIT loop kod---
För en uppsättning NeoPixels den första NeoPixel är 0, det andra är 1, hela vägen upp till antalet pixlar minus en.
för (int jag = 0; jag < NUMPIXELS; i ++) {
pixlar. Färgen tar RGB-värden, från 0,0,0 upp till 255,255,255
pixels.setPixelColor (i, pixlar. Color(0,0,255)); Måttligt ljusa gröna färgen.
pixels.show(); Detta skickar uppdaterad pixel färg till hårdvaran.
Delay(2); Fördröjning för en viss tid (i millisekunder).
}
//---------------------------------------------------------------------------
}
void ledFadeToBeat() {
fadeRate-= 15. värdet för LED-fade
fadeRate = constrain(fadeRate,0,255); hålla LED fade värde från att gå in i negativa tal!
analogWrite(fadePin,fadeRate); Fade LED
}
Jag sektioneras ut varje del av koden som de är skarvas ihop, och jag bytte ett par värden också, en inställning färgen på neopixels i denna rad:
"pixels.setPixelColor (i, pixlar. Color(0,0,255));"
att 255 skapar den klarast lysande ren blå kan de göra, men du kan ställa in dem till vilken färg du vill ha med RGB-värden. Jag ändrade också data utgångsstiftet 8, bara i fall du väljer att använda min kod och saker verkar inte fungera.
När du har din kod tillsammans kontrollera, så länge som du har din parentes på rätt plats, det ska sammanställa fint och vara redo att gå!