Voorbeeldprogramma: verschil tussen versies

Uit TrompBot
Naar navigatie springen Naar zoeken springen
Regel 209: Regel 209:
Een afloop is een manier om verschillende dingen achter elkaar te doen. Het wordt vaak gebruikt in robots.
Een afloop is een manier om verschillende dingen achter elkaar te doen. Het wordt vaak gebruikt in robots.
<syntaxhighlight>
<syntaxhighlight>
// afloop.ino
int stap; // de stap variabele
int stap; // de stap variabele
void setup()
void setup()
{
{
   stap = 0; // we beginnen met stap = 0
   stap = 1; // we beginnen met stap = 0
   pinMode(2,OUTPUT);  // groene led is een uitgang
   pinMode(2,OUTPUT);  // groene led is een uitgang
   pinMode(5, INPUT_PULLUP); // de schakelaar is een ingang
   pinMode(5, INPUT_PULLUP); // de schakelaar is een ingang
   pinMode(14,OUTPUT); // rode led is een uitgang
   pinMode(14,OUTPUT); // rode led is een uitgang
  Serial.begin(9600);
}
}
 
void loop()
void loop()
{
{
Regel 223: Regel 225:
   {
   {
     case 1:  // als stap 1 is dan:
     case 1:  // als stap 1 is dan:
       digitalWrite(2, HIGH);
       digitalWrite(2, HIGH); // groen aan
      digitalWrite(14, HIGH); // rood aan
       stap = 2; // de volgende keer is stap 2
       stap = 2; // de volgende keer is stap 2
       break; // stop en ga verder na het einde van de switch }
       break; // stop en ga verder na het einde van de switch }
     case 2:  // als stap 2 is dan:
     case 2:  // als stap 2 is dan:
       digitalWrite(2, LOW);
       digitalWrite(2, LOW); // groen uit
       stap = 3; // de volgende keer is stap 3
       stap = 3; // de volgende keer is stap 3
       break; // stop en ga verder na het einde van de switch }
       break; // stop en ga verder na het einde van de switch }
Regel 234: Regel 237:
         stap = 4; // ga naar stap 4
         stap = 4; // ga naar stap 4
       else
       else
         stap = 1; de volgende keer is stap 1
         stap = 1; // de volgende keer is stap 1
       break;
       break;
     case 4: // als stap 4 is dan:
     case 4: // als stap 4 is dan:
       digitalWrite(14, HIGH);
       digitalWrite(14, LOW); // rood uit
       delay(4000);
       delay(4000); // wacht
       stap = 1; de volgende keer is stap 1
       stap = 1; // de volgende keer is stap 1
       break;
       break;
     default: // als stap een andere waarde heeft dan 1 van de eerder case waarden, dan:
     default: // als stap een andere waarde heeft dan 1 van de eerder case waarden, dan:
       stap = 0;
       stap = 1;
   }
   }
   delay(1000); // wacht 1 seconde
   delay(500); // wacht 1 seconde
  Serial.print("Stap is: ");
  Serial.println(stap);
}
}
</syntaxhighlight>
</syntaxhighlight>



Versie van 9 jul 2012 22:58

Beginnen | Hardware | Software | Voorbeeldprogramma | Inkscape & lasersnijden | Errors & Tips | Kekbot | [TrompBot Website] | Trompbots | Percussie & ritme | Fioretti programma


De Microcontroller wordt in de taal C++ geprogrammeerd. Deze taal heeft een aantal regels die je in de gaten moet houden om een goed programma te maken. Die regels zijn net zoiets als de spelling en gramatica van de Nederlandse of Engelse taal. Ze regelen hoe de taal moet gebruiken. Als je een programma maakt wat niet volgens de regels is, zal de computer het niet begrijpen en een foutmelding geven. Je moet dan je programma veranderen. Lees de regels dus eerst goed, en houd je er aan! Hieronder staan een paar programma's om te beginnen.


Een aantal voorbeeldprogramma's staan hier:

De basis

Dit is een leeg programma. Het doet niets, maar is wel een correct programma (zonder spelfouten).

 //leeg.ino: Een leeg programma, dit doet niets
 void setup()
 {
   // Hier komen de opdrachten die 1 keer gedaan moeten worden bij het aanzetten
 }
 
 void loop()
 {
   // Hier komen de opdrachten die elke keer gedaan moeten worden
 }

tip: Als er op een regel twee forward slashes staan (dat ziet er zo uit: //) dan wordt alles daarna tot het einde van de regel niet gelezen door de computer. Dat is makkelijk want zo kan je commentaar in je programma zetten zodat je zelf nog weet wat je had bedoeld.

Led aan en uit

Een programma wat een lampje laat knipperen is de basis voor iedere programmeur. Het laat zien dat alles werkt:

 // knipper.ino: knipper de groene led, aan en uit, met 1 seconde ertussen.
 
 // Voer deze instructie 1x uit bij het aanzetten
 void setup() 
 {               
   pinMode(14, OUTPUT);     // Schakel aansluiting (pin) nummer 14 als uitgang. Deze aansluiting is verbonden met de LED
 }
 
 // Blijf deze functie herhalen, zoalang de microcontroller aan staat
 void loop() 
 {
   digitalWrite(14, HIGH);   // zet pin 14 uitgang HOOG (aan)
   delay(1000);              // Wacht 1 seconden (1000 milliseconden)
   digitalWrite(14, LOW);    // zet pin 14 uitgang LAAG (aan)
   delay(1000);              // Wacht 1 seconden (1000 milliseconden)
 }

Dan nog een: Dit is een variatie op het eerste programma, maar maakt een wat langer patroon

 // knipper2.ino: Maak een knipper patroon
 // Voer deze instructie 1x uit bij het aanzetten
 void setup() 
 {                
   pinMode(14, OUTPUT);     // Schakel aansluiting (pin) nummer 14 als uitgang. Deze aansluiting is verbonden met de LED
 }
 
 // Blijf deze functie herhalen, zoalang er spanning op de microcontroller staat
 void loop() 
 {
   digitalWrite(14, HIGH); 
   delay(100);   
  
   digitalWrite(14, LOW); 
   delay(100);  
  
   digitalWrite(14, HIGH);
   delay(200);
  
   digitalWrite(14, LOW);
   delay(200);          
 
   digitalWrite(14, HIGH);
   delay(200);
   
   digitalWrite(14, LOW);
   delay(1000);          
 }

Schakelaar inlezen

Als je de linker schakelaar S2 indrukt, dan gaat het rode lampje uit.

 // schakelaar.ino - lees een schakelaar in, en schake led aan en uit
 
 void setup()
 {
   pinMode(5, INPUT_PULLUP); // drukknop, als input
   pinMode(2, OUTPUT);   // LED als output
 }
 
 void loop()
 {
   if ( digitalRead(5) == HIGH ) // als de schakelaar HOOG is (niet ingedrukt)
     digitalWrite(2, HIGH);      //  zet dan de uitgang HOOG (lamp aan)
   else                          // anders
     digitalWrite(2, LOW);       //  zet de uitgang LAAG (lamp uit)
 }

Een servo besturen

Sluit de servo aan op de uitgang 13 van de Launchpad. Als je het programma start gaat de servo bewegen tussen twee posities (90 graden uit elkaar) met een wachttijd van 1 seconde tussen de bewegingen. Meer informatie over de Servo functies vind je op de Servo pagina.

 // beweeg.ino: Beweeg een servo tussen twee posities
 #include <Servo.h>    // zeg de computer dat we de servo functies willen gebruiken, anders kan hij die niet vinden

 Servo motor;  // definieer een servo motor 
 
 void setup() 
 {                
   motor.attach(13); // vebind servo met aansluitpen 13
 }
 
 void loop() 
 {
   motor.write(30);          // beweeg naar 30 graden stand
   delay(1000);              // Wacht 1 seconden (1000 milliseconden)
   motor.write(120);         // beweeg naar 120 graden stand
   delay(1000);              // Wacht 1 seconden (1000 milliseconden)
 }

De servo besturen met een schakelaar

Sluit de servo aan op aansluitpen 13 van de Launchpad, en druk op de linker schakelaar. De servo moet nu tussen twee posities bewegen.

 // beweeg-schakelaar.ino: Beweeg een servo tussen twee posities als je op de schakelaar drukt
 #include <Servo.h>    // zeg de computer dat we de servo functies willen gebruiken, anders kan hij die niet vinden

 Servo motor;  // definieer een servo motor 
 
 void setup() 
 {                
   motor.attach(13); // vebind servo met aansluitpen 13
   pinMode(5, INPUT_PULLUP);
 }
 
 void loop() 
 {
   if ( digitalRead(5) == HIGH )  // als de schakelaar HOOG is (niet ingedrukt):
     motor.write(30);             //   beweeg naar 30 graden stand
   else                           // anders:
     motor.write(120);            //   beweeg naar 120 graden stand
 }

Een functie

Een functie is een manier om 1x iets te schrijven, en meerdere keren te gebruiken. Hier een voorbeeld van een morse code Eerst worden functies gemaakt voor de punt en de streep van de morse code, en vervolgens worden deze functies gebruikt in de morse_s() en morse_o() functie, die in het hoofdprogramma loop() aangeroepen worden om het woord SOS te maken.

// functie.ino - voorbeeld van het gebruik van functies, stuur een morse code (http://nl.wikipedia.org/wiki/Morse)

// Bij het aanzetten: schakel aansluitpen 2 (rode lampje) als uitgang
void setup()
{
  pinMode(2, OUTPUT);
}

// geef een korte flits op de rode lamp
void punt()
{
  digitalWrite(2, HIGH);
  delay(200);
  digitalWrite(2, LOW);
  delay(200);
}

// geef een lange flits op de rode lamp
void streep()
{
  digitalWrite(2, HIGH);
  delay(600);
  digitalWrite(2, LOW);
  delay(200);
}

// stuur de letter "S" 
void morse_s()
{
  punt();
  punt();
  punt();
  delay(600);
}

// stuur de letter "O" 
void morse_o()
{
  streep();
  streep();
  streep();
  delay(600);
}

// stuur de de hele tijd de morse-code "SOS" (HELP!) via het lampje 
void loop()
{
  morse_s();
  morse_o();
  morse_s();
  delay(1400);
}

Een afloop

Een afloop is een manier om verschillende dingen achter elkaar te doen. Het wordt vaak gebruikt in robots.

// afloop.ino
int stap; // de stap variabele
void setup()
{
  stap = 1; // we beginnen met stap = 0
  pinMode(2,OUTPUT);  // groene led is een uitgang
  pinMode(5, INPUT_PULLUP); // de schakelaar is een ingang
  pinMode(14,OUTPUT); // rode led is een uitgang
  Serial.begin(9600);
}
 
void loop()
{
  switch( stap )  // doe iets, afhankelijk van de waarde van stap
  {
    case 1:  // als stap 1 is dan:
      digitalWrite(2, HIGH); // groen aan
      digitalWrite(14, HIGH); // rood aan
      stap = 2; // de volgende keer is stap 2
      break; // stop en ga verder na het einde van de switch }
    case 2:  // als stap 2 is dan:
      digitalWrite(2, LOW); // groen uit
      stap = 3; // de volgende keer is stap 3
      break; // stop en ga verder na het einde van de switch }
    case 3: // als stap 3 is dan:
      if ( digitalRead(5) == LOW ) // als we op de linker knop drukken dan:
        stap = 4; // ga naar stap 4
      else
        stap = 1; // de volgende keer is stap 1
      break;
    case 4: // als stap 4 is dan:
      digitalWrite(14, LOW); // rood uit 
      delay(4000); // wacht
      stap = 1; // de volgende keer is stap 1
      break;
    default: // als stap een andere waarde heeft dan 1 van de eerder case waarden, dan:
      stap = 1;
  }
  delay(500); // wacht 1 seconde
  Serial.print("Stap is: ");
  Serial.println(stap);
}

Berichten sturen naar de computer

Met Serial kan je berichten sturen naar de computer

Berichten sturen via infrarood licht

Met IR kan je berichten sturen met onzichtbaar infrarood licht. Dit kan je gebruiken om verschillende robots met elkaar te laten praten.