//*************************************************************************************
//**
Test knapper som klaver-toner
**
//*************************************************************************************
int
analogPin = A3;
// Analog port A3
int
audioOutPin = 3;
// Højtaler forbindes til pin3 og til GND
// 100 Ohm beskytter porten mod overbelastning
int
val = 0;
// variable til at gemme den læste værdi
int
val1[10] = {51,68,76,81,85,87,89,91}; // Heltals tabel af læste knapper
division 10
int
node[10] = {523,587,659,698,784,880,988,1047}; //
C-dur skalaen i Hertz følger knapperne
int
dltime = 100;
// delay-tid = 0,1 sekund
//**************************************************************************************
//**************************************************************************************
//**
Arduino har en DEBUG-FUNKTION, som kaldes fra ARDUINO software
udviklings miljø,**
//**
MENU-liniens Værktøjer, vælg
Seriel
Overvågning.
**
//**
Der åbnes et vindue, som kan kommunikere via USB-linien med
ARDUINO'en via **
//** USB
interface. Husk at checke, at BAUD-rate er ens i program og i
Winduet
**
//**************************************************************************************
void
setup()
{
Serial.begin(9600);
// Start serial communication DEBUG,
9600 Baud
}
//**************************
HOVED-LOOP ********************************************
void
loop()
{
int nyval = 0;
val = analogRead(analogPin);
// Læs den ANALOGE input pin
//**************************************************************************************
//**
En ANALOG port på ARDUINO kan læse en værdi mellem 0 og 5
Volt. Denne læsning **
//** resulterer i et tal mellem 0 og
1023
**
//**
Læsning af porten kan resultere i, at tallet har usynlige
decimal-dele, og så **
//**
vil resultatet stå og skifte mellem f. eks. 510 og 511. For at
undgå, at vi ikke **
//** står med en værdi der kan skifte til en anden, smider vi
det mindst betydende **
//** ciffer væk, ved at tage heltalsværdien af tallet
divideret med 10, som herunder **
//**************************************************************************************
nyval = int(val/10);
// her vil værdien 511 f. eks. blive
51
//**************************************************************************************
//
En "for-next-løkke"
tæller gennem vores knapper og vælger en tilsvarende
tone **
//
"i"
er en heltalsvariabel, som kan antage en hvilken som helst
heltalsværdi mellem **
// -32,768 til
32,767.
**
//
Her starter vi med at sætte værdien til 0
= null
**
//
derefter spørger vi om det er sandt eller falsk, at "i"
er mindre, eller lig med 8,**
//
for til sidst, hvis det er sandt, at "i" skal forøges
med "1". Men inden
da **
//
spørger vi om er sandt eller falsk, at tallet i vores tabel
"val1",
den
**
//
"i-ende"
karakter har samme værdi som knappen vi trykkede på, (hvis
i=2 testes 68 **
//
mod knappens værdi)
og hvis de er ens er det jo sandt, så aktiveres en Tone
på **
//
porten audioOutPin,
med en frekvens
svarende til den "i-ende"
(2= 587 hz)
tone i **
//
tabellen node,
som er C-durs skalaen i Hertz. Derefter laves en kort pause, og
der **
//
udskrives Serial.print
og hvis ikke knappen stadig er trykket, stoppes tonen igen
**
//**************************************************************************************
for ( int
i = 0; i <= 8; i++ )
{
if ( nyval
== val1[i] )
// er der trykket på en knap ?
{
tone(
audioOutPin,node[i] );
// Send noden til højtaler
if
( nyval == val1[i] )
// er knappen stadig trykket ?
{
delay(dltime); // lav et delay
//***************************************************************************************
//**
Her kunne indføres en Serial.print for at følge med i, om der
læses de forventede **
//** data fra den analoge
port.
**
//**
Det ville da se således
ud:
**
Serial.print("Button
Value is :
");
// DEBUG funktionen udskriver...
Serial.print(nyval);
// værdien for den læste knap
Serial.print("
the Tone is = ");
Serial.print(node[i]);
Serial.println("
Hz");
//Det
ville se sådan ud: Button Value is : 68 the Tone is = 587 Hz
//
"println" afslutter den opågældende
linie
**
//
Senere kan vi lære, hvordan man kan aktivere/de-aktivere en
sådan
funktion
**
//***************************************************************************************
}
}
else
{
noTone(
audioOutPin );
// eller sluk for tonen
}
}
}
//***************************************************************************************
//**
END af HOVED-LOOP og
DEMO-program
**
//***************************************************************************************