annotate projects/basic_button/render.cpp @ 246:da5ce9876fcc

Improved basic_button project
author Giulio Moro <giuliomoro@yahoo.it>
date Tue, 19 Apr 2016 22:22:26 +0100
parents db76215feb69
children ac8eb07afcf5
rev   line source
giuliomoro@246 1 /*
giuliomoro@77 2 *
giuliomoro@77 3 * Andrew McPherson and Victor Zappi
giuliomoro@77 4 * Queen Mary, University of London
giuliomoro@77 5 */
giuliomoro@77 6
giuliomoro@77 7 #include <BeagleRT.h>
giuliomoro@77 8 #include <Utilities.h>
giuliomoro@77 9 #include <cmath>
giuliomoro@77 10 #include <rtdk.h>
giuliomoro@246 11 #include <stdlib.h>
giuliomoro@77 12
giuliomoro@77 13 // setup() is called once before the audio rendering starts.
giuliomoro@77 14 // Use it to perform any initialisation and allocation which is dependent
giuliomoro@77 15 // on the period size or sample rate.
giuliomoro@77 16 //
giuliomoro@77 17 // userData holds an opaque pointer to a data structure that was passed
giuliomoro@77 18 // in from the call to initAudio().
giuliomoro@77 19 //
giuliomoro@77 20 // Return true on success; returning false halts the program.
giuliomoro@77 21
giuliomoro@77 22 bool setup(BeagleRTContext *context, void *userData)
giuliomoro@77 23 {
giuliomoro@246 24 pinModeFrame(context, 0, P8_08, INPUT);
giuliomoro@246 25 pinModeFrame(context, 0, P8_07, OUTPUT);
giuliomoro@77 26 return true;
giuliomoro@77 27 }
giuliomoro@77 28
giuliomoro@77 29 // render() is called regularly at the highest priority by the audio engine.
giuliomoro@77 30 // Input and output are given from the audio hardware and the other
giuliomoro@77 31 // ADCs and DACs (if available). If only audio is available, numAnalogFrames
giuliomoro@77 32 // will be 0.
giuliomoro@77 33
giuliomoro@77 34 /* basic_button
giuliomoro@77 35 * - connect an LED in series with a 470ohm resistor between P8_07 and ground.
giuliomoro@77 36 * - connect a 1k resistor to P9_03 (+3.3V),
giuliomoro@77 37 * - connect the other end of the resistor to both a button and P8_08
giuliomoro@77 38 * - connect the other end of the button to ground.
giuliomoro@77 39 * The program will read the button and make the LED blink when the button is pressed.
giuliomoro@77 40 */
giuliomoro@77 41
giuliomoro@77 42 void render(BeagleRTContext *context, void *userData)
giuliomoro@77 43 {
giuliomoro@77 44 for(unsigned int n=0; n<context->digitalFrames; n++){
giuliomoro@223 45 int status=digitalReadFrame(context, 0, P8_08); //read the value of the button
giuliomoro@246 46 digitalWriteFrameOnce(context, n, P8_07, status); //write the status to the LED
giuliomoro@246 47 float out = 0.1 * status * rand() / (float)RAND_MAX * 2 - 1; //generate some noise, gated by the button
giuliomoro@246 48 for(unsigned int j = 0; j < context->audioChannels; j++){
giuliomoro@246 49 audioWriteFrame(context, n, j, out); //write the audio output
giuliomoro@246 50 }
giuliomoro@223 51 }
giuliomoro@77 52 }
giuliomoro@77 53
giuliomoro@77 54 // cleanup() is called once at the end, after the audio has stopped.
giuliomoro@77 55 // Release any resources that were allocated in setup().
giuliomoro@77 56
giuliomoro@77 57 void cleanup(BeagleRTContext *context, void *userData)
giuliomoro@77 58 {
giuliomoro@77 59 // Nothing to do here
giuliomoro@77 60 }
giuliomoro@246 61