Sequencer

Uit TrompBot
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);     
  }
}