/* * * Simple (PWM) Oscillator Explained * Instead of using the Tone() function, you can create a square wave oscillator by turning the digital pin 11 (speakerpin) on (HIGH) and off (LOW) very fast: | HIGH | ___ ___ | | | | | 50% duty cycle LOW | ____| |____| | (50% on, 50 off) Determined by delayMicroseconds() | |____________________ TIME * * * * * */ #define SPEAKER_PIN 11 void setup() { // set pin 11 as output pinMode(SPEAKER_PIN, OUTPUT); } void loop() { //in simple-osc.ino we use tone(outputpin, 1000); to make a 1000Hz tone //1000Hz means 1000x on and off in one second. //instead of using tone(), we can write out what happens: //turn on a pin on and of on/off 1000x per second: digitalWrite( SPEAKER_PIN, LOW ); //turn pin off delayMicroseconds( 500 ); // wait digitalWrite( SPEAKER_PIN, HIGH );//tunr pin on delayMicroseconds( 500 ); // wait //the wait period determains how long it takes to loop through the //code, and thus how fast the code runs, and thus how fast //the pin turns on and off and thus at what frequency this happens: //we get an oscillation (on-off)! //Maths: // for 1Hz, the pin goes on and off in one second. So the delay should be 0.5 second // for 1000Hz the pin goes on/off 1000x in 1 sec. So the delay should be 1000x smaller: 0.0005 seconds // wich is 500 micro seconds (dont confuse milliseconds with microseconds). //To control the frequency with a knob we can use analogRead, uncomment the code below (and comment out the one above): // digitalWrite( SPEAKER_PIN, LOW ); //turn pin off // delayMicroseconds( analogRead(A2) ); // wait // digitalWrite( SPEAKER_PIN, HIGH );//tunr pin on // delayMicroseconds( analogRead(A2) ); // wait }