This little program demonstrates how to use the SignalGenerator library.

Dependencies:   mbed

Committer:
Yann
Date:
Tue Nov 16 10:30:20 2010 +0000
Revision:
0:481720b53aed
Child:
1:719b21661920
V0.0.0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yann 0:481720b53aed 1 #include "SignalGenerator.h"
Yann 0:481720b53aed 2
Yann 0:481720b53aed 3 Serial g_debug(USBTX, USBRX); // tx, rx
Yann 0:481720b53aed 4
Yann 0:481720b53aed 5 /** CPU Available indicator
Yann 0:481720b53aed 6 */
Yann 0:481720b53aed 7 DigitalOut g_availableLed(LED1);
Yann 0:481720b53aed 8 Ticker g_available;
Yann 0:481720b53aed 9 void AvailableLedIndicator();
Yann 0:481720b53aed 10
Yann 0:481720b53aed 11 /** Static instance of SignalGenerator
Yann 0:481720b53aed 12 */
Yann 0:481720b53aed 13 SignalGenerator g_signal(p18);
Yann 0:481720b53aed 14 Ticker g_synchronousUserInput;
Yann 0:481720b53aed 15 void SynchronousUserInput();
Yann 0:481720b53aed 16 SignalGenerator::SignalGeneratorType DisplaySignalGeneratorTestMenuAndGetChoice();
Yann 0:481720b53aed 17
Yann 0:481720b53aed 18 int main() {
Yann 0:481720b53aed 19 volatile SignalGenerator::SignalGeneratorType _choice; // User selects the desired signal type
Yann 0:481720b53aed 20 volatile int frequency; // Signal frequency
Yann 0:481720b53aed 21
Yann 0:481720b53aed 22 wait(1); // Needed after startup
Yann 0:481720b53aed 23
Yann 0:481720b53aed 24 // Launch available indicator
Yann 0:481720b53aed 25 g_availableLed = 1;
Yann 0:481720b53aed 26 g_available.attach(&AvailableLedIndicator, 2.0); // Never detached
Yann 0:481720b53aed 27
Yann 0:481720b53aed 28 // Start infinite loop
Yann 0:481720b53aed 29 while(true)
Yann 0:481720b53aed 30 {
Yann 0:481720b53aed 31 // Acquire settings
Yann 0:481720b53aed 32 _choice = DisplaySignalGeneratorTestMenuAndGetChoice();
Yann 0:481720b53aed 33 printf("\r\nEnter signal frequency (< 1MHz/# of samples): ");
Yann 0:481720b53aed 34 scanf("%d", &frequency);
Yann 0:481720b53aed 35
Yann 0:481720b53aed 36 // Prepare the signal
Yann 0:481720b53aed 37 g_signal.SetSignalFrequency(_choice, frequency);
Yann 0:481720b53aed 38
Yann 0:481720b53aed 39 // Launch execution
Yann 0:481720b53aed 40 if (g_signal.BeginRunAsync() == -1) {
Yann 0:481720b53aed 41 // Synchronous mode
Yann 0:481720b53aed 42 g_synchronousUserInput.attach(&SynchronousUserInput, 0.005); // 5ms
Yann 0:481720b53aed 43 g_signal.Run(); // Never stopped
Yann 0:481720b53aed 44 printf("\r\nSignal Generator terminated\r\n");
Yann 0:481720b53aed 45 g_synchronousUserInput.detach();
Yann 0:481720b53aed 46 } else {
Yann 0:481720b53aed 47 // Asynchronous mode
Yann 0:481720b53aed 48 printf("\r\n\r\nPress any key to terminate\r\n");
Yann 0:481720b53aed 49 while (getchar() != 'q');
Yann 0:481720b53aed 50 g_signal.EndRunAsync();
Yann 0:481720b53aed 51 }
Yann 0:481720b53aed 52 } // End of 'while' statement
Yann 0:481720b53aed 53 } // End of main program
Yann 0:481720b53aed 54
Yann 0:481720b53aed 55 void AvailableLedIndicator() {
Yann 0:481720b53aed 56 g_availableLed != g_availableLed;
Yann 0:481720b53aed 57 } // End of function AvailableLedIndicator
Yann 0:481720b53aed 58
Yann 0:481720b53aed 59 void SynchronousUserInput() {
Yann 0:481720b53aed 60 if (g_debug.readable()) {
Yann 0:481720b53aed 61 g_signal.Stop();
Yann 0:481720b53aed 62 getchar();
Yann 0:481720b53aed 63 }
Yann 0:481720b53aed 64 } // End of function SynchronousUserInput
Yann 0:481720b53aed 65
Yann 0:481720b53aed 66 SignalGenerator::SignalGeneratorType DisplaySignalGeneratorTestMenuAndGetChoice()
Yann 0:481720b53aed 67 {
Yann 0:481720b53aed 68 do {
Yann 0:481720b53aed 69 printf("\r\n\r\nTest demo v0.1 - Generate signal\r\n");
Yann 0:481720b53aed 70 printf("\tSquareSignal:\t0\r\n");
Yann 0:481720b53aed 71 printf("\tTriangleSignal:\t1\r\n");
Yann 0:481720b53aed 72 printf("\tSawtoothSignal:\t2\r\n");
Yann 0:481720b53aed 73 printf("\tReverse sawtoothSignal:\t3\r\n");
Yann 0:481720b53aed 74 printf("\tSinusSignal:\t4\r\n");
Yann 0:481720b53aed 75 switch (getchar()) {
Yann 0:481720b53aed 76 case '0' :
Yann 0:481720b53aed 77 return SignalGenerator::SquareSignal;
Yann 0:481720b53aed 78 case '1' :
Yann 0:481720b53aed 79 return SignalGenerator::TriangleSignal;
Yann 0:481720b53aed 80 case '2' :
Yann 0:481720b53aed 81 return SignalGenerator::SawtoothSignal;
Yann 0:481720b53aed 82 case '3' :
Yann 0:481720b53aed 83 return SignalGenerator::ReverseSawtoothSignal;
Yann 0:481720b53aed 84 case '4' :
Yann 0:481720b53aed 85 return SignalGenerator::SinusSignal;
Yann 0:481720b53aed 86 } // End of 'switch' statement
Yann 0:481720b53aed 87 } while (true);
Yann 0:481720b53aed 88 } // End of function DisplaySignalGeneratorTestMenuAndGetChoice