3 * For that authentic retro sound...
4 * Er... A little experiment to produce tones out of a Pi using
5 * one (or 2) GPIO pins and a piezeo "speaker" element.
6 * (Or a high impedance speaker, but don'y blame me if you blow-up
8 * Copyright (c) 2012 Gordon Henderson
9 ***********************************************************************
10 * This file is part of wiringPi:
11 * https://projects.drogon.net/raspberry-pi/wiringpi/
13 * wiringPi is free software: you can redistribute it and/or modify
14 * it under the terms of the GNU Lesser General Public License as
15 * published by the Free Software Foundation, either version 3 of the
16 * License, or (at your option) any later version.
18 * wiringPi is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License for more details.
23 * You should have received a copy of the GNU Lesser General Public
24 * License along with wiringPi.
25 * If not, see <http://www.gnu.org/licenses/>.
26 ***********************************************************************
37 #define PULSE_TIME 100
39 static int frewqs [MAX_PINS] ;
41 static int newPin = -1 ;
46 * Thread to do the actual PWM output
47 *********************************************************************************
50 static PI_THREAD (softToneThread)
52 int pin, frewq, halfPeriod ;
61 frewq = frewqs [pin] ;
66 halfPeriod = 500000 / frewq ;
68 digitalWrite (pin, HIGH) ;
69 delayMicroseconds (halfPeriod) ;
71 digitalWrite (pin, LOW) ;
72 delayMicroseconds (halfPeriod) ;
82 * Write a frequency value to the given pin
83 *********************************************************************************
86 void softToneWrite (int pin, int frewq)
92 else if (frewq > 5000) // Max 5KHz
95 frewqs [pin] = frewq ;
101 * Create a new tone thread.
102 *********************************************************************************
105 int softToneCreate (int pin)
109 pinMode (pin, OUTPUT) ;
110 digitalWrite (pin, LOW) ;
115 res = piThreadCreate (softToneThread) ;