Det behövs bokstavligen bara tone(pin, frekvens); i setup()

pin behöver vara en PWM-kapabel pin.
Sen kan man såklart snajsa till det hela med knappar/potentionmeter/rotary encoder/terminal input för att ändra frekvensen utan att behöva programera om arduinon.
Jag har dock en sketch som kan ändra frekvensen baserad på input(rotary encoder, i mitt fall), och den ser ut så här;
Kod: Markera alltconst uint8_t PinCLK = 2; // Used for generating interrupts using CLK signal
const uint8_t PinDT = 4; // Used for reading DT signal
const uint8_t PinSW = 7; // Used for the push button switch
int16_t frequency = 40;
int16_t lastFrequency = 0;
static unsigned long lastInterruptTime = 0;
void isr () {
unsigned long interruptTime = millis();
if (interruptTime - lastInterruptTime > 5) //debounce
{
if (digitalRead(PinDT))
{
frequency -= 10;
if (frequency < 40) //dont go lower than 40Hz
{
frequency = 40;
}
}
else
{
frequency += 10;
if (frequency > 30000) //dont go higher than 30k Hz
{
frequency = 30000;
}
}
lastInterruptTime = interruptTime;
}
} // isr
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
//rotary encoder pins and interrupt
pinMode(PinCLK,INPUT);
pinMode(PinDT, INPUT_PULLUP);
pinMode(PinSW, INPUT);
attachInterrupt(1, isr, FALLING);
}
void loop() {
// put your main code here, to run repeatedly:
if (frequency != lastFrequency)
{
Serial.print("Frequency changed to: ");
Serial.println(frequency);
tone(8, frequency); //pin 8 for DC tone;
lastFrequency = frequency;
}
}
Sen är det bara att koppla jord mellan huset och arduinon, och ansluta pin8 till den pinne på instrumenthuset man vill mata in frekvensen på
edit: jag valde att använda en cigguttags->usb(omlödd med kabel direkt från batteriet istället för att gå via cigguttaget) adapter för att strömförsörja min arduino, dom lösa volt-regulatorerna jag hade till hands blev obekvämt varma när dom matades med ~14V, även med kylfläns.
Jag valde också att ta bort 3.3V-regulatorn, 5V-regulatorn(eftersom jag ändå matar arduinon med 5V), all LEDs, och programmerings-chippet(satte brytare istället så det går att slå igång vid behov) för att minimera strömförbrukningen.
Jag använder en MEGA2560 som är rätt törstiga när det kommer till förbrukning, men fick ner det från över 100mA till 50-60mA i drift(detta inkluderar cigg-adaptern, displayen och turbomätaren), och ~5mA i viloläge.