This little program demonstrates how to use the SignalGenerator library.

Dependencies:   mbed

Committer:
Yann
Date:
Tue Nov 16 10:37:46 2010 +0000
Revision:
1:719b21661920
Parent:
0:481720b53aed
V0.0.0.2

Who changed what in which revision?

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