Dirigent: verschil tussen versies

Uit TrompBot
Naar navigatie springen Naar zoeken springen
Regel 14: Regel 14:
=Oplossing=
=Oplossing=
De oplossing is het maken van een dirigent die de andere robots in de maat kan houden. Hiervoor moeten de microcontrollers met elkaar kunnen ''praten'' dit kan bijvoorbeeld met de infrarood zender en ontvanger. Kijk hiervoor ook naar de voorbeeld programmas [[Voorbeeldprogramma#Verzenden|Verzenden]] en [[Voorbeeldprogramma#Ontvangen_-_Simpel|Ontvangen]]. Een aanpassing daarvan kan gebruikt worden om (net als een dirigent) steeds de maat aan te geven.
De oplossing is het maken van een dirigent die de andere robots in de maat kan houden. Hiervoor moeten de microcontrollers met elkaar kunnen ''praten'' dit kan bijvoorbeeld met de infrarood zender en ontvanger. Kijk hiervoor ook naar de voorbeeld programmas [[Voorbeeldprogramma#Verzenden|Verzenden]] en [[Voorbeeldprogramma#Ontvangen_-_Simpel|Ontvangen]]. Een aanpassing daarvan kan gebruikt worden om (net als een dirigent) steeds de maat aan te geven.
<syntaxhighlight>
/*
* dirigent.ino
* Wacht op indrukken van knop S2 en stuur dan continue IR pulsjes, met een snelheid van 10 per seconde
*/
void setup()
{
  int i;
  pinMode(6,OUTPUT); // pen 6: IR led
  pinMode(2,OUTPUT); // pen 2: rode LED
  pinMode(14,OUTPUT); // pen 14: groene LED
 
  pinMode(5, INPUT_PULLUP); // schakelaar
 
  while ( digitalRead(5) == HIGH ) // Loop zolang de knop S2 NIET is ingedruk (knipper groene led)
  {
    i++;
    delay(1);
    if ( i > 100 )
      digitalWrite(14,LOW);
    else
      digitalWrite(14,HIGH);
    if ( i > 200 )
      i = 0;
  }
  digitalWrite(14,LOW);
}
void loop()
{
  delay(50);
  digitalWrite(2,HIGH); // zet rode LED UIT
  tone(6,36000,10);    // Stuur puls op de IR van 36khz en 5miliseconde lang
  delay(45);
  digitalWrite(2,LOW); // zet rode LED AAN
}
</syntaxhighlight>

Versie van 4 nov 2013 21:43

Een [dirigent] zorgt ervoor dat alle muzikanten in een orkest gelijk beginnen en in hetzelfde tempo spelen.

Probleem

Hebben wij dat ook nodig bij onze robot orkesten?

Doe het volgende experiment om dat uit te zoeken:

  • Zet het programmatje Led aan en uit in twee launchpad microcontrollers
  • Zet de twee launchpads naast elkaar en druk bij beide op de RESET (S1) knop.
  • Laat op hetzelfe moment beide reset knoppen los
  • Beide ledjes knipperen als het goed is nu even snel en gelijktijdig
  • Wacht ongeveer 2 minuten
  • Kijk nu of de ledjes nog steeds gelijktijdig knipperen. Ja?

Oplossing

De oplossing is het maken van een dirigent die de andere robots in de maat kan houden. Hiervoor moeten de microcontrollers met elkaar kunnen praten dit kan bijvoorbeeld met de infrarood zender en ontvanger. Kijk hiervoor ook naar de voorbeeld programmas Verzenden en Ontvangen. Een aanpassing daarvan kan gebruikt worden om (net als een dirigent) steeds de maat aan te geven.

/*
 * dirigent.ino
 * Wacht op indrukken van knop S2 en stuur dan continue IR pulsjes, met een snelheid van 10 per seconde
 */
void setup() 
{
  int i;
  pinMode(6,OUTPUT); // pen 6: IR led
  pinMode(2,OUTPUT); // pen 2: rode LED
  pinMode(14,OUTPUT); // pen 14: groene LED
  
  pinMode(5, INPUT_PULLUP); // schakelaar
  
  while ( digitalRead(5) == HIGH ) // Loop zolang de knop S2 NIET is ingedruk (knipper groene led)
  {
    i++;
    delay(1);
    if ( i > 100 )
      digitalWrite(14,LOW); 
    else
      digitalWrite(14,HIGH); 
    if ( i > 200 )
      i = 0;
  }
  digitalWrite(14,LOW); 
}


void loop() 
{
  delay(50);
  digitalWrite(2,HIGH); // zet rode LED UIT
  tone(6,36000,10);     // Stuur puls op de IR van 36khz en 5miliseconde lang
  delay(45);
  digitalWrite(2,LOW); // zet rode LED AAN
}