Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- WilliamMarshQMUL
- Date:
- 2018-01-24
- Revision:
- 1:284229960d6a
- Parent:
- 0:5307f49cd305
- Child:
- 2:4857a7cbb9da
File content as of revision 1:284229960d6a:
// Lab 3 Example Program 2
// -----------------------
// Periodically write to the AnalogOut to create a sine wave
// Alternate between two fixed frequencies every 5 sec
//
// THIS VERSION HAS DEBUGGING CODE USING THE SERIAL PORT
// Revised for mbed 5
#include "mbed.h"
#include "sineTable.h"
Ticker tick ; // Creates periodic interrupt
AnalogOut ao(PTE30) ; // Analog output
// --- following code for debugging ---
Thread debugT ;
Serial pc(USBTX, USBRX); // tx, rx, useful for debugging
// Put a simple reprsentation of the sine wave
// to the serial output. ONLY at low frequency
void debug(int index) {
int sine4 = sine[index] >> 11 ; // get top 5 bits
pc.putc('*') ;
while (sine4--) pc.putc('*') ;
pc.putc('\n') ;
//pc.putc('\r') ;
}
volatile int index = 0 ; // this variable is not just for debugging!!
void debugCallback() {
while (true) {
Thread::signal_wait(0x1) ;
debug(index) ; // there is a race condition here
}
}
// ---- end of debugging code ---------
// Function called every periodically
// Write new value to AnalogOut
void writeAout() {
ao.write_u16(sine[index]) ;
debugT.signal_set(0x1) ; // DEBUGGING low frequency only
index = (index + 1) % 64 ;
}
// Control the frequency of updates
// Alternative between two frequencies
int main() {
int update_us = 100000 ; // 100ms
debugT.start(&debugCallback) ;
while (true) {
pc.printf("Update at 64 x 100ms giving about 0.15Hz\n");
tick.attach_us(callback(&writeAout), update_us); // setup ticker to write to AnalogOut
Thread::wait(30000) ; // wait 30 sec - 30000ms
update_us = 150000 ; // 150ms
pc.printf("Update at 64 x 150ms giving about 0.1Hz\n");
tick.attach_us(callback(&writeAout), update_us); // setup ticker to write to AnalogOut
Thread::wait(30000) ; // wait 30 sec - 30000ms
update_us = 100000 ; // 100ms
}
}