-
Notifications
You must be signed in to change notification settings - Fork 139
/
render.cpp
66 lines (55 loc) · 1.97 KB
/
render.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
____ _____ _ _
| __ )| ____| | / \
| _ \| _| | | / _ \
| |_) | |___| |___ / ___ \
|____/|_____|_____/_/ \_\
http://bela.io
*/
/**
\example Digital/digital-output/render.cpp
Blinking an LED
---------------
This sketch shows the simplest case of digital out.
- Connect an LED in series with a 470ohm resistor between digital pin `gOutputPin` and ground.
The led is blinked on and off by setting the digital pin `1` and `0` every `gInterval seconds.
In `setup()` the pin mode must be set to output mode via `pinMode()`. For example:
`pinMode(context, 0, gOutputPin, OUTPUT)`.
In `render()` the output of the digital pins is set by `digitalWrite()`. For example:
`digitalWrite(context, n, gOutputPin, status)` where `status` can be equal to
either `1` or `0`. When set `1` the pin will give 3.3V, when set to
`0` 0V.
To keep track of elapsed time we have a sample counter count. When the count reaches
a certain limit it switches state to either `1` or `0` depending on its current
value. In this case the limit is `context->digitalSampleRate * gInterval` which
is the desired interval expressed in samples.
*/
#include <Bela.h>
int gOutputPin = 0; // digital pin 0 - check the pin diagram in the IDE
float gInterval = 0.5; // how often to toggle the LED (in seconds)
int gCount = 0; //counts elapsed samples
bool gStatus = false;
bool setup(BelaContext *context, void *userData)
{
pinMode(context, 0, gOutputPin, OUTPUT); // Set gOutputPin as output
return true;
}
void render(BelaContext *context, void *userData)
{
for(unsigned int n = 0; n < context->digitalFrames; ++n){
if(gCount == (int)(context->digitalSampleRate * gInterval)){ //if enough samples have elapsed
gCount = 0; //reset the counter
//toggle the status
if(gStatus == 0)
gStatus = 1;
else
gStatus = 0;
digitalWrite(context, n, gOutputPin, gStatus); //write the status to the LED (gOutputPin)
}
gCount++;
}
}
void cleanup(BelaContext *context, void *userData)
{
// Nothing to do here
}