Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
project:arduino-kickstarter-l02 [18.11.2011 18:39] – switch switch q-raiproject:arduino-kickstarter-l02 [14.01.2013 15:56] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== Architektur eines Sketches ====== ====== Architektur eines Sketches ======
 +Du hast nun deinen Arduino an den Rechner angeschlossen und das erste Mal ein Programm hochgeladen. Nun ist es an der Zeit, die Programme mal näher unter die Lupe zu nehmen.
 +Die Arduino-Umgebung bietet bereits eine Menge an Beispielprogrammen, die du dir angucken kannst.
 +
 +===== Minimales Programm =====
 Jedes Arduinoprogramm besteht zunächst aus zwei Teilen, ''setup'' und ''loop''. Jedes Arduinoprogramm besteht zunächst aus zwei Teilen, ''setup'' und ''loop''.
   * in der setup-Methode steht alles, was nur am Anfang einmal ausgeführt werden soll   * in der setup-Methode steht alles, was nur am Anfang einmal ausgeführt werden soll
Zeile 6: Zeile 10:
 Diesen Grundaufbau findest du im Programm ''BareMinimum'', welches du unter Basics findest. Diesen Grundaufbau findest du im Programm ''BareMinimum'', welches du unter Basics findest.
  
-===== Nichts tun ===== +<code> 
-Einfach aber nützlich: Du kannst den Arduino eine bestimmte Zeit lang warten lassen:+void setup(){ 
 +  // einmal 
 +}
  
-<code>delay(int);</code>+void loop()
 +  // immer wieder 
 +
 +</code>
  
-Die angegebene Zahl sind Millisekunden, und es handelt sich um ganze Zahlen (Datentyp int). 
  
-===== Signale senden und empfangen =====+===== Signale lesen und schreiben =====
 Bevor du loslegst mit senden und empfangen, musst du dem Arduino mitteilen, welche Pins du wofür benutzen willst: Bevor du loslegst mit senden und empfangen, musst du dem Arduino mitteilen, welche Pins du wofür benutzen willst:
  
   * mit ''pinMode( //n//, OUTPUT)'' legst du fest, dass du an Pin Nummer //n// Signale senden willst   * mit ''pinMode( //n//, OUTPUT)'' legst du fest, dass du an Pin Nummer //n// Signale senden willst
   * mit ''pinMode( //n//, INPUT)'' entsprechend, dass du Signale empfangen willst   * mit ''pinMode( //n//, INPUT)'' entsprechend, dass du Signale empfangen willst
 +Das solltest du nur einmal tun, also gehört das in ''setup'' Senden und empfangen willst du dagegen die ganze Zeit, das tust du also in ''loop''.
  
-Das solltest du nur einmal tunalso gehört das in ''setup''Senden und empfangen willst du dagegen die ganze Zeit, das tust du also in ''loop''+Ein //Pin// ist ein Ein- oder Ausgang des Arduinos. Die Nummern zu den Pins stehen auf der Platine. 
 + 
 + 
 +==== Digitale Signale ==== 
 +Digitale Signale können genau zwei Werte annehmenHIGH und LOWDiese stehen dir als Konstanten zur Verfügung. 
 +  * HIGH = 1 = an 
 +  * LOW = 0 = aus 
 + 
 +Lesen und schreiben lassen sich Pins mit den folgenden beiden Methoden:
    
-  * mit ''digitalWrite(//n//, HIGH)'' sendet das Signal 1 (oder an), LOW entsprechend 0 (oder aus) +  * mit ''digitalRead(//pin//)'' liest das Signal auf dem Pin, also HIGH oder LOW 
-  * mit ''digitalRead(//n//)'' kannst du ein Signal als HIGH oder LOW empfangen+  * mit ''digitalWrite(//pin//, HIGH)'' schreibt das Signal HIGH (LOW analog)
  
-===== For-Schleifen ===== +So liest man zum Beispielwelcher Wert gerade an Pin 2 anliegt:
-Mit for-Schleifen kannst du ein bestimmtes Stück Code genau so oft ausführenwie du festlegst. +
-Wenn du es ''zahl'' mal willst, schreibst du das einfach folgendermaßen:+
  
 <code> <code>
-for(int i 0zahli++){ +wert digitalRead(2); 
-  // tue etwas +</code> 
-  delay(i * 1000);+ 
 +Ein einfaches Beispiel zum Schreiben liefert das Programm ''blink'': 
 + 
 +<code> 
 +void setup(){ 
 +  pinMode(13, OUTPUT); 
 +
 + 
 +void loop(){ 
 +  digitalWrite(13, HIGH); // LED an 
 +  delay(1000); // warte eine Sekunde 
 +  digitalWrite(13, LOW); // LED aus 
 +  delay(1000); // warte eine Sekunde
 } }
 </code> </code>
  
-Innerhalb der Schleife kannst du auf ''i'' zugreifen. Hier wird nach dem Ausführen des Codes ''i'' Sekunden lang gewartet (''delay'' wird in Millisekunden gezählt).+Während der Wartezeit bleibt das Signal auf den Pins gleich, die LED ist also abwechselnd 1s an und 1s aus. 
 + 
 +Ein Beispiel, in dem beide Funktionen genutzt werden findest du unter Digital -> Button. 
 + 
 + 
 +==== Analoge Signale ==== 
 +Analoge Signale sind etwas komplexer als digitale Signale. Sie können nicht nur zwischen HIGH und LOW unterscheiden, sondern auch zwischen einer Vielzahl von Werten dazwischen, abhängig von der Spannung. Die Werte sind für Lesen und schreiben unterschiedlich feingranular. 
 +  * lesen: Werte zwischen 0 (aus) und 1023 (an), also 1024 Werte / 10 bit Auflösung 
 +  * schreiben: Werte zwischen 0 (aus) und 255 (an), also 256 Werte / 8 bit Auflösung 
 + 
 +Lesen und schreiben lassen sich Pins mit den folgenden beiden Methoden: 
 + 
 +  * ''analogRead(//pin//)'' liest das Signal vom Pin, das zwischen 0 und 1023 liegt 
 +  * ''analogWrite(//pin//, wert)'' schreibt das Signal ''wert'' zwischen 0 und 255 auf den Pin 
 + 
 +Die Benutzung ist recht ähnlich zum digitalen Lesen und Schreiben (abgesehen von der Art der Werte). Das große Spektrum an Werten eignet sich besonders, um z.B. statt hartem Blinken einer LED einen weichen Übergang zwischen hell und dunkel zu erhalten. Ein Beispiel dafür findest du unter Analog -> Fading. 
 + 
 + 
 +====== Nützliche Kontrollstrukturen ====== 
 +Wie in allen höheren Programmiersprachen gibt es auch auf dem Arduino einige nützliche Kontrollstrukturen. Die Beispiele hier sind recht knapp gehalten - ausführliche Beispiele findest du unter Control. 
 + 
 + 
 +===== Nichts tun ===== 
 +Einfach aber nützlich: Du kannst den Arduino eine bestimmte Zeit lang warten lassen: 
 + 
 +<code>delay(int);</code> 
 + 
 +Die angegebene Zahl sind Millisekunden, und es handelt sich um ganze Zahlen (Datentyp int). 
  
 ===== If-Verzweigung ===== ===== If-Verzweigung =====
Zeile 67: Zeile 122:
  
 usw. ;-) usw. ;-)
 +
  
 ===== Fallunterscheidung mit switch ===== ===== Fallunterscheidung mit switch =====
-Falls du abhängig vom Wert einer Variablen etwas tun willst, sind ''switch'' Anweisungen das Richtige für dich. Hier solltest du alle Fälle, die dir wichtig sind, abhandeln. Für alle anderen Fälle gibt es ''default''.+Falls du abhängig vom Wert einer Variablen etwas tun willst, sind ''switch''-Unterscheidungen das Richtige für dich. Hier solltest du alle Fälle, die dir wichtig sind, abhandeln. Für alle anderen Fälle gibt es ''default''.
  
 <code> <code>
Zeile 93: Zeile 149:
 Das heißt in diesem Beispiel: Da nach case 1 das break fehlt, wird im Fall, dass ''zahl = 1'' ist auch der Code für ''zahl = 42'' ausgeführt. Das heißt in diesem Beispiel: Da nach case 1 das break fehlt, wird im Fall, dass ''zahl = 1'' ist auch der Code für ''zahl = 42'' ausgeführt.
 In den meisten Fällen //willst// du das nicht. :-) In den meisten Fällen //willst// du das nicht. :-)
 +
 +
 +===== Zähl-Schleifen =====
 +Mit ''for''-Schleifen kannst du ein bestimmtes Stück Code genau so oft ausführen, wie du festlegst.
 +Wenn du es ''zahl'' mal willst, schreibst du das einfach folgendermaßen:
 +
 +<code>
 +for(int i = 0; i < zahl; i++){
 +  // tue etwas
 +  delay(i * 1000);
 +}
 +</code>
 +
 +Innerhalb der Schleife kannst du auf ''i'' zugreifen. Hier wird nach dem Ausführen des Codes ''i'' Sekunden lang gewartet (''delay'' wird in Millisekunden gezählt).
 +
 +
 +===== Bedingte Schleifen =====
 +Mit ''while''-Schleifen kannst du ein bestimmtes Stück Code so lange immer wieder ausführen, wie eine bestimmte Bedingung gilt.
 +Nehmen wir mal an, du hast
 +  * einen Schalter, der an Pin ''schalter'' angebunden ist und Signale liefert (HIGH für gedrückt, LOW sonst)
 +  * eine LED, die an Pin ''led'' angebunden ist und Signale empfängt (HIGH für an, LOW für aus)
 +Du willst, dass die LED immer dann angeschaltet wird, wenn der Schalter gedrückt ist.
 +
 +<code>
 +// solange der Schalter gedrückt ist...
 +while(digitalRead(schalter) == HIGH){
 +  // ... schalte die LED an
 +  digitalWrite(led, HIGH);
 +}
 +// wenn der Schalter nicht mehr gedrückt ist, schalte die LED aus
 +digitalWrite(led, LOW);
 +</code>
  
  
project/arduino-kickstarter-l02.1321641543.txt.gz · Zuletzt geändert: 14.01.2013 15:56 (Externe Bearbeitung)
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International
Recent changes RSS feed Driven by DokuWiki