This uses a combination of a few blog posts
The POT is wired thus:
centre (wiper) to A0
Right to GND
Left to 5V
The LED
Cathode to gnd via a 220 ohm resistor
Anode to pin 8
The delay function is essentially the clock.
Works ok, though using the delay() means that nothing else can run until the delay has finished.
The LED is on/off for a total of 60,000 millisecs/BPM = 1min/BPM
and then loops. The code is here:
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define LED 8 // LED pin
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define LED 8 // LED pin
#define MIN_BPM 20 /*write here the min BPM that you want */
#define MAX_BPM 300 /* write here the max BPM that you want */
#define POT A0 // the potentiometer connects to analog pin A0
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Variables
int bpm;
void setup() {
pinMode(LED, OUTPUT); // LED pin 8 is the output
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Variables
int bpm;
void setup() {
pinMode(LED, OUTPUT); // LED pin 8 is the output
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C
display.clearDisplay(); // Clear the buffer.
}
//---------------------------------------------------------------
void loop() {
bpm = map(analogRead(POT), 0, 1023, MIN_BPM, MAX_BPM);
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(bpm);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println(" BPM");
display.display();
display.clearDisplay(); // Clear the buffer.
}
//---------------------------------------------------------------
void loop() {
bpm = map(analogRead(POT), 0, 1023, MIN_BPM, MAX_BPM);
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(bpm);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println(" BPM");
display.display();
// the LED is on/off for a total of 60,000 millisecs/BPM = 1min/BPM
// and then loops.
/*this is the 1/1 output*/
digitalWrite(LED, HIGH); // turn LED on for 2 millisecs
delay(2000/bpm);
digitalWrite(LED, LOW); // turn LED off
delay(58000 / bpm);
digitalWrite(LED, HIGH); // turn LED on for 2 millisecs
delay(2000/bpm);
digitalWrite(LED, LOW); // turn LED off
delay(58000 / bpm);
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
No comments:
Post a Comment