Sequencer
Naar navigatie springen
Naar zoeken springen
Beginnen | Hardware | Software | Voorbeeldprogramma | Inkscape & lasersnijden | Errors & Tips | Kekbot | [TrompBot Website] | Trompbots | Percussie & ritme | Fioretti programma
Een sequencer is een programma wat iets opneemt en weer afspeeld.
/*
* sequecer.ino
* Een simpele sequencer
* Neem een aantal maten op, en speel tegelijk af
*/
#define MOTOR 12 // Motor op pen 12
#define ROOD 2 // rode led op pen 2
#define GROEN 14 // groene led op pen 14
#define KNOP 10 // knop op pen 10
// Definieer de array van de sequencer
#define LEN (8*16)
#define DELAY 50
byte seq[LEN];
int pos=0;
void setup()
{
pos = 0;
pinMode(KNOP,INPUT); // schakelaar
pinMode(MOTOR,OUTPUT); // relais
pinMode(ROOD,OUTPUT); // rode led
pinMode(GROEN,OUTPUT); // groene led
digitalWrite(GROEN,HIGH); // zet groene led AAN
digitalWrite(ROOD,LOW); // zet rode led UIT
for(int j=0;j<LEN;j++) // Maak de sequencer array leeg
seq[j] = 0;
}
// Kijk of knop ingedrukt wordt tijdens wachttijd. Wacht altijd dezelfde tijd
// geef de waarde "false" terug als de knop niet was ingedrukt,
// of "true" als hij was ingedrukt
boolean leesknop()
{
boolean druk=false;
for(int j=0; j<DELAY; j++)
{
if ( digitalRead(KNOP) == LOW )
druk=true;
delay(1);
}
return druk;
}
// De hoofdlus, deze wordt steeds aangeroepen
void loop()
{
pos = pos + 1; // ga naar de volgende positie
if ( pos % 8 ) // als de positie geen veelvoud is van 8 (met modulo functie)
digitalWrite(GROEN,LOW);
else
digitalWrite(GROEN,HIGH);
if ( pos > (LEN-1) ) // Einde van array
pos = 0; // zet positie weer terug op 0
// als er een knop wordt ingedrukt, of eerder in de array deze tel was opgeslagen
if( leesknop() || (seq[pos] == 1) )
{
digitalWrite(MOTOR,LOW); // motor en led aan
digitalWrite(ROOD,HIGH);
seq[pos] = 1; // zet deze tel in array
}
else
{
digitalWrite(MOTOR,HIGH); // motor en led uit
digitalWrite(ROOD,LOW);
}
}