annotate examples/02-Digital/digital-output/render.cpp @ 500:b935f890e512 prerelease

Updated Doxy to 1.8.11 Amended example titles in render.cpp and file locations in Doxy file.
author Robert Jack <robert.h.jack@gmail.com>
date Wed, 22 Jun 2016 00:27:13 +0100
parents 8fcfbfb32aa0
children 1cec96845a23
rev   line source
robert@464 1 /*
robert@464 2 ____ _____ _ _
robert@464 3 | __ )| ____| | / \
robert@464 4 | _ \| _| | | / _ \
robert@464 5 | |_) | |___| |___ / ___ \
robert@464 6 |____/|_____|_____/_/ \_\
robert@464 7
robert@464 8 The platform for ultra-low latency audio and sensor processing
robert@464 9
robert@464 10 http://bela.io
robert@464 11
robert@464 12 A project of the Augmented Instruments Laboratory within the
robert@464 13 Centre for Digital Music at Queen Mary University of London.
robert@464 14 http://www.eecs.qmul.ac.uk/~andrewm
robert@464 15
robert@464 16 (c) 2016 Augmented Instruments Laboratory: Andrew McPherson,
robert@464 17 Astrid Bin, Liam Donovan, Christian Heinrichs, Robert Jack,
robert@464 18 Giulio Moro, Laurel Pardue, Victor Zappi. All rights reserved.
robert@464 19
robert@464 20 The Bela software is distributed under the GNU Lesser General Public License
robert@464 21 (LGPL 3.0), available here: https://www.gnu.org/licenses/lgpl-3.0.txt
robert@464 22 */
robert@464 23
robert@464 24
robert@464 25 #include <Bela.h>
robert@464 26 #include <cmath>
robert@464 27 #include <rtdk.h>
robert@464 28
robert@464 29 bool setup(BelaContext *context, void *userData)
robert@464 30 {
robert@464 31 pinMode(context, 0, P8_07, OUTPUT);
robert@464 32 return true;
robert@464 33 }
robert@464 34
robert@464 35 void render(BelaContext *context, void *userData)
robert@464 36 {
robert@464 37 static int count=0; //counts elapsed samples
robert@464 38 float interval=0.5; //how often to toggle the LED (in seconds)
robert@464 39 static int status=GPIO_LOW;
robert@464 40 for(unsigned int n=0; n<context->digitalFrames; n++){
robert@464 41 if(count==context->digitalSampleRate*interval){ //if enough samples have elapsed
robert@464 42 count=0; //reset the counter
robert@464 43 // status=digitalRead(context, 0, P8_07);
robert@464 44 if(status==GPIO_LOW) { //toggle the status
robert@464 45 digitalWrite(context, n, P8_07, status); //write the status to the LED
robert@464 46 status=GPIO_HIGH;
robert@464 47 }
robert@464 48 else {
robert@464 49 digitalWrite(context, n, P8_07, status); //write the status to the LED
robert@464 50 status=GPIO_LOW;
robert@464 51 }
robert@464 52 }
robert@464 53 count++;
robert@464 54 }
robert@464 55 }
robert@464 56
robert@464 57 void cleanup(BelaContext *context, void *userData)
robert@464 58 {
robert@464 59 // Nothing to do here
robert@464 60 }
robert@464 61
robert@464 62 /* ------------ Project Explantation ------------ */
robert@464 63
robert@464 64 /**
robert@500 65 \example digital-output/render.cpp
robert@464 66
robert@464 67 Blinking an LED
robert@464 68 ---------------
robert@464 69
robert@464 70 This sketch shows the simplest case of digital out.
robert@464 71
robert@464 72 - Connect an LED in series with a 470ohm resistor between P8_07 and ground.
robert@464 73
robert@464 74 The led is blinked on and off by setting the digital pin `HIGH` and `LOW` every interval seconds which is set in
robert@464 75 `render()`.
robert@464 76
robert@464 77 In `setup()` the pin mode must be set to output mode via `pinMode()`. For example:
robert@464 78 `pinMode(context, 0, P8_07, OUTPUT)`.
robert@464 79 In `render()` the output of the digital pins is set by `digitalWrite()`. For example:
robert@464 80 `digitalWrite(context, n, P8_07, status)` where `status` can be equal to
robert@464 81 either `HIGH` or `LOW`. When set `HIGH` the pin will give 3.3V, when set to
robert@464 82 `LOW` 0V.
robert@464 83
robert@464 84 To keep track of elapsed time we have a sample counter count. When the count reaches
robert@464 85 a certain limit it switches state to either `HIGH` or `LOW` depending on its current
robert@464 86 value. In this case the limit is `context->digitalSampleRate*interval` which
robert@464 87 allows us to write the desired interval in seconds, stored in `interval`.
robert@464 88 */
robert@464 89