Du willst Arduino programmieren? Dann bist du hier beim Arduino Programmierkurs genau richtig. Dieser Grundlagenkurs richtet sich an Anfänger. Für alle Programmbeispiele benötigen wir nur eine Schaltung.
Gliederung
Schaltung
Für die Vorbereitung baue bitte die folgende Schaltung auf:
Wir haben nun einen Taster am digitalen Pin 8, eine rote LED am digitalen Pin 5 und eine grüne am digitalen Pin 6.
Was ist ein Programm?
Ein Programm besteht aus aufeinander folgenden Befehlen. Sie werden der Reihe nach von oben nach unten ausgeführt.
Was sind Befehle?
Befehle sind Programmanweisungen, die bestimmte Funktionen auslösen. Der Befehl
pinMode(6, OUTPUT);
legt den digitalen Pin 6 als Output fest. Mit dem Befehl
digitalWrite(6, HIGH);
lassen sich so 5V+ auf den digitalen Pin 6 schalten. Jeder Befehl muss mit einem Semikolon enden!
Das probieren wir gleich aus. Lade das folgende Programm auf das Arduino:
void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6, HIGH); }
Die grüne LED leuchtet auf.
Programmiersprache von Arduino
Arduino programmiert man in der Programmiersprache C/C++. Diese ist in der Hardware-Programmierung weit verbreitet. Wenn man also sehr spezielle Funktionen sucht, kann man in einer C/C++ Referenz nachschlagen.
Arduino programmieren: die Programmstruktur
Ein Arduino-Programm hat eine bestimmte Programmstruktur. Im einfachsten Fall handelt es sich um die zwei Hauptmethoden setup() und loop(). Alles, was man in den geschweiften Klammern {} schreibt, gehört zu der jeweiligen Methode.
void setup() { } void loop() { }
Während die setup()-Methode nur beim Programmstart ausgeführt wird, wird die loop()-Methode kontinuierlich wiederholt.
Lade das folgende Programm auf das Arduino:
void setup() { pinMode(6, OUTPUT); } void loop() { digitalWrite(6, HIGH); delay(1000); digitalWrite(6, LOW); delay(1000); }
Der Befehl delay(1000); hält das Programm kurzzeitig an. Die Zahl in den runden Klammern gibt an, wie lange in Millisekunden das Programm angehalten werden soll. Hier sind es 1000 Millisekunden, also eine Sekunde.
Solche mit Befehlen übertragenen Werte nennt man Argumente. Bei delay(1000); ist das Argument also 1000, bei digitalWrite(6,HIGH); wären die Argumente 6 und HIGH.
Was sind Variablen?
Nun haben wir in unserem Programm an drei Stellen eine 6 eingetragen. Wenn wir nun statt der grünen lieber die rote LED leuchten lassen wollten, müssten wir das also an drei Stellen ändern. Das ist nicht sehr komfortabel. Besser ist es, die Information über die Pinnummer in einer Variablen zu speichern.
Eine Variable ist ein kleiner Speicher, in den eine Information einer bestimmten Form passt. Die Form wird durch den sogenannten Variablentyp bestimmt.
Variablentyp | Bedeutung | Beschreibung |
---|---|---|
int | ganze Zahlen | -32.768 bis 32.767 |
long | ganze Zahlen | -2.147.483.648 bis 2.147.483.647 |
float | Fließkommazahl | gebrochene Zahlen |
char | Character | Alphanumerische Zeichen (Buchstaben, Zahlen, Sonderzeichen) |
Bei der Pinnummer handelt es sich um eine ganze Zahl. Mit der Anweisung
int ledPin=6;
legen wir eine Variable vom Typ int an. Sie heißt ledPin und bekommt einen Wert von 6 zugewiesen. Überall, wo wir nun den Variablennamen angeben, wird er durch den Variablenwert ersetzt.
int ledPin=6; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Nun lässt sich auch schnell ein Programm schreiben, dass die andere LED blinken lässt.
int ledPin=5; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
if-Abfrage
Um einen Taster auszulesen, können wir den Befehl digitalRead(); verwenden. Er liefert einen Wert zurück, den man auslesen und vergleichen kann. Zum Vergleichen lässt sich die if-Abfrage nutzen:
int ledPin=5; int buttonPin=8; void setup() { pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); } void loop() { if (digitalRead(buttonPin)==HIGH){ digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
Um den Befehl digitalRead(); nutzen zu können, muss der entsprechende Pin vorher als Input deklariert worden sein: pinMode(buttonPin, INPUT);
Die Konstruktion if (digitalRead(buttonPin)==HIGH) prüft, ob der ausgelesene Zustand des Tasters gleich HIGH ist. In unserer Beispielschaltung wird HIGH ausgegeben, wenn der Pin irgendwie eine Verbindung zum 5V+ hat. Ist der Taster gedrückt, besteht diese. Das doppelte Gleichheitszeichen ist zwingend erforderlich! Ist die Bedingung in den Klammern der if-Abfrage richtig, also wahr, wird der Teil in den geschweiften Klammern ausgeführt. Ist er nicht wahr, wird der Teil ausgeführt, der hinter else steht.
for-Schleife
Manchmal möchte man bestimmte Vorgänge ein paar Mal wiederholen. Dafür bietet sich die for-Schleife an:
int greenPin=6; int redPin=5; void setup() { pinMode(greenPin, OUTPUT); pinMode(redPin, OUTPUT); } void loop() { for (int i=0; i<3; i=i+1){ digitalWrite(greenPin, HIGH); delay(250); digitalWrite(greenPin, LOW); delay(250); } for (int i=0; i<6; i=i+1){ digitalWrite(redPin, HIGH); delay(250); digitalWrite(redPin, LOW); delay(250); } }
Dieses Programm lässt erst die grüne LED dreimal blinken, dann die rote sechsmal. Die Konstruktion for (int i=0; i<3; i=i+1){} wiederholt alles in den geschweiften Klammern, solange die Fortsetzungsbedingung i<3 wahr ist. Bei i handelt es sich um eine Zählervariable, die beim Start angelegt und auf 0 gesetzt wird: int i=0. Bei jedem Schleifendurchlauf wird i um 1 erhöht: i=i+1. (Normalerweise schreibt man dies verkürzt durch i++).
Methoden
Dieser Programmtext ist noch relativ lang und lässt sich durch das Anlegen einer eigenen Methode verkürzen. Immer wenn man gleiche Befehlsfolgen wiederholen will, bietet sich das an:
int greenPin=6; int redPin=5; void setup() { pinMode(greenPin, OUTPUT); pinMode(redPin, OUTPUT); } void blinken(int thePin, int wiederholungen){ for (int i=0; i<wiederholungen; i=i+1){ digitalWrite(thePin, HIGH); delay(250); digitalWrite(thePin, LOW); delay(250); } } void loop() { blinken(greenPin,3); blinken(redPin,6); }
Die Methode void blinken() {} lässt eine LED eine bestimmte Anzahl oft blinken. Sie benötigt zwei Informationen: Welche LED soll blinken? Wie oft soll sie blinken? Beide Informationen sind ganzzahlig und werden in den runden Klammern als Argumente angelegt blinken(int thePin, int wiederholungen). Innerhalb der Methode kann man nun die Variablen „thePin“ und „wiederholungen“ verwenden.
Aus der loop()-Methode rufen wir die blinken()-Methode zweimal auf und übergeben jeweils die LED und die Anzahl der Wiederholungen.
blinken(greenPin,3); blinken(redPin,6);
Damit sind wir erstmal am Ende dieses Schnelleinstiegs angekommen. Ich hoffe, die Ausführungen waren verständlich und ich würde mich natürlich sehr über Kommentare dazu freuen.
Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!
- Die beliebtesten Arduino-Projekte von StartHardware
- Inklusive Schaltplan, Beschreibung und Code
- Arduino-Schnellstart-Kapitel
- Kompakter Programmierkurs
Funktioniert alles Super
Wie teuer ist die Ardoino box?#
Funktioniert alles
cool! hast du auch ein code fuer ein haustier,das gehen kann?
Pingback: Programmieren mit der Arduino Software leicht gemacht
hallo an alle ich hab ein kleines problem und hoffe ihr könnt mir helfen ich arbeite mit dem led ring von arduino und ich bekomme den grosen ring mit 40 led´s nicht komplett belechtet den 24 led ring aber schon weis jemand wie mann das löst danke schon mal im vorraus
was ist hier falsch?
#include
Servo Sl;
int messwert;
int sensor(A0);
int Temperatur;
int knopf;
int trigger=7;
int echo=6;
long dauer;
long entfernung;
void setup() {
pinMode(12, INPUT);
pinMode(11, OUTPUT);
Sl.attach(9);
pinMode(6,INPUT_PULLUP);
}
{
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
{
Serial.begin(9600)
knopf = digitalRead(6);
if (knopf == 0){
if (digitalRead 12==1) {
analogWrite(11, 450);
delay(500);
analogWrite(11, 10);
delay(500);
}
else {
analogWrite(11, LOW);
}
}
}
void loop() {
messwert=analogRead(sensor);
Temperatur=map(messwert,20,179,-40,62);
if(Temperatur>05152030= 500 || entfernung <= 0)
{
Serial.println("Kein Messwert");
}
else
Serial.print(entfernung);
Serial.println(" cm");
}
delay(1000);
}
}
Sehr gut erklärt, vielen Dank für die Hilfe!
Sehr gut erklärt, danke für deine Arbeit!!
Ich bin zum dem Thema Arduino gekommen, da ich gerne ein Pferderennen bauen möchte wie auf der Kirmes. ich habe mir überlegt ich würde gerne die Stepmotoren mit kontaktschalter ansteuern, sodass der motor bei kontakt eine umdrehung macht oder vll auch mehr muss ich später mal schauen. Dies ist denke ich mit einer If formel zu lösen nun möchte ich aber auch, dass der motor je nach getroffenen Loch mal 3 umdrehungen macht mal nur 2 oder 1. Ich würde gerne wissen, ob meine Idee überhaupt umzusetzten ist oder ich vll der Einfachheit halber es so löse, dass ich mehrere Kontaktschalter anbaue also bei einem 3 Punkte loch einfach 3 Kontaktschalter.
vielen Dank schon mal im voraus
Hi Xsold, dafür musst du ihn noch nur in der Arduino-Software kompilieren. Was anderes würde ich auch nicht machen. Liebe Grüße
int i=0;
void setup() {
Serial.begin(8200);
}
void loop() {
for (i; i<5; i=i+1) {
Serial.print(+);
}
for (i; i<=9; i=i+1) {
Serial.print("?");
}
delay (1000);
i=1;
}
Könnten sie mir helfen hier 4 Fehler zu finden?
ist dieser code valide?
MFG,
xsold_
#include
using namespace std;
class Ard {
public:
void setup()
{
pinMode(6, OUTPUT);
}
void loop(int num)
{
}
void _blink(int pin, int repeats)
{
for (int i = 0; i < repeats; i++)
{
digitalWrite(pin, HIGH);
delay(250);
digitalWrite(pin, LOW);
delay(250);
}
}
}
int main()
{
Ard arduino;
int _led = 5;
arduino.setup();
arduino._blink(_led, 10);
}
int i=0;
void setup()
{
Serial.begin(9200);
}
void loop()
{
for (i; i<5; i=i+1)
{
Serial.print("+");
}
for (i; i<=9; i=i+1)
{
Serial.print("?");
}
delay (1000);
i=1;
}
Die Geschwindigkeit ist schon mal falsch angegeben, vermutlich ein Tippfehler.
Zweiter Fehler: Serial.print erfolgt die Angabe in der Klammer immer mit Anführungszeichen.
Bei Fragezeichen ist es ja richtig gemacht…..
Ich finde es einfach nur schön
Cool
Sehr hilfreich. Als Anfänger habe ich nur eine Kleinigkeit gefunden: int buttonPin=8; in Methoden und in for-Schleife ist wahrscheinlich überflüssig.
Ah, stimmt. Vielen Dank für den Hinweis. Ich hab es geändert :-)
Wir haben in der Ausbildungswerkstatt den Rheinturm nachgebaut um swollen jetzt das richtige Programm schreiben auf Adruino. Die Uhr läuft zwar aber leider falsch. Wir würden gerne die Uhrzeit richtig einstellen und auch die Zeitumstellen berücksichtigen.
Hallo Stefan, super erklärt hier.
Ich bin neu und möchte eigentlich etwas ganz simples machen mit Neopixel. Doch leider werde ich nicht im Netzt fündig und ich weiß auch nicht wie man so einen Effekt beim namen nennen soll. Ich habe vor mir dies zu Drucken https://m.youtube.com/watch?v=8u2i7J_Zv6s doch leider gibt es keine Anleitung für die Beleuchtung die verbaut ist. Ausser das man weiß, das es Neopixel sind und ein Arduino benutzt wurde. Vielleicht kannst du mir weiter helfen, habe vor das mit 10 Pixel zu machen, es sollen max 3 leuchten und wenn die 4 langsam an geht, soll die letzte aus gehen und so weiter bis sie durch sind und von vorne anfangen. Sprich so eine Art von fade in/out nur halt jeder Pixel einzel. Am besten wäre wenn es am Ende ankommt das nicht alle aus gehen. Kannst du mir da weiter helfen?
Hallo Sebastian,
das ist ja ein spannendes Projekt. Ich schreibe ein Tutorial in den nächsten Tagen dazu und sag dann noch mal Bescheid. Danke für die Anregung.
Liebe Grüße
Stefan
Vielen lieben Dank!
Die zweite Variante finde ich am besten.
Wäre es noch möglich, über einen zweiten Daten Pin zwei Pixel auf halbe Kraft leuchten zu lassen? Damit es leicht leuchtet und nicht ganz dunkel wirkt. Sorry, wenn ich damit jetzt erst ankomme. Aber ist mir erst jetzt aufgefallen.
Naja, das bekomme ich zeitlich leider nicht hin, aber ich habe noch ein drittes Code-Beispiel hinzugefügt, bei der du die minimale Leuchtkraft einstellen kannst. Das war schnell umgesetzt. Schicke mir gern Fotos :-)
Hi Sebastian, was für eine spannende Idee. Ich hab zwei Lösungsvorschläge. Hoffentlich passt was davon für dich :-)
Zero Point Module mit Arduino und WS2812
Hallo, da wir gerade beim Thema blinken sind, ich suche einen Sketch für eine Flugzeugbeleuchtung (Boeing). Es gäbe im Internet zwar jede Menge für RC Flugzeuge, jedoch helfen die mir nicht da Signale von der Fernsteuerung ausgelesen werden. Ich möchte ein Standmodell beleuchten. Könnt ihr mir dabei behilflich sein?
Hallo Stephan, das klingt spannend. Kannst du mir sagen, was alles wie blinken soll? Liebe Grüße Stefan
Hi Stephan, ich hab mich mal dran versucht. Hoffentlich hilft es dir: https://starthardware.org/flugzeugbeleuchtung-mit-arduino/ Liebe Grüße Stefan
Moin, es waere sicher sinnvoll am Anfang zu erwaehnen welche Programmiersprache ueberhaupt verwendet wird. Danke fuer deine gute Erklaerung!
Hi Sysdef, vielen Dank für den Hinweis. Ich nehme das gern auf :-) Liebe Grüße Stefan
Hallo Stefan,
Ich finde deine Erklärungen sehr hilfreich. Da ich nicht weiß was du beruflich machst wollte ich gerne fragen ob du bereit wärst, für mich ein bestehendes Arduino Programm etwas umzubauen. Selbstverständlich nicht umsonst.
Ich würde mich über deine Antwort freuen.
Gruß Markus
Hallo Stefan,
ich finde es toll, was Du da aufgebaut hast. Dein Erklärungen sind super einfach und einige Sachen, die ich zwar im arduino.cc Forum andiskutiert gelesen hatte, konnte ich erst auf Deiner Seite nachvollziehen. Du erklärst wirklich gut.
Was ich noch in Deinem Eklärstil als gutes Thema fände, wäre wie man die „delay“ Funktion durch die Abfrage von „millis“ sauber programmiert. Da hätte zumindest ich noch Nachholbedarf.
Mach weiter so,
Gruß Leo
Hallo Leo, vielen Dank für Deine nette Nachricht. Es freut mich, dass Du mit den Tutorials was anfangen kannst. Und vielen Dank für die Anregung. Da schreibe ich bald was zu. Das ist ein super Thema! Ich hab mir gerade Deine Seite angesehen und da könnte ich auch noch was lernen. Messerschärfen z. B. hab ich noch nicht so drauf. Also liebe Grüße und bis bald, Stefan
Hallo Leo, der Beitrag zu den Timer-Funktionen ist jetzt online. Ich hoffe, er hilft dir weiter. Liebe Grüße
> Alles, was man in _den geschweiften_ Klammern { } schreibt
Typo.
Hab ich nicht gefunden. Wo steht das denn?
Vermutlich ist der dritte Satz im Abschnitt „Programmstruktur“ gemeint, da ist ein Schreibfehler.
Ah, stimmt. Vielen Dank Euch beiden :-)
Hallo lieber Herr Herrmann,
wunderbare Erklärungen und Erläuterungen die sie an uns un- bis wenig wissenden weitergeben. Dafür ein dickes Lob und vielen Dank. Leider hat es bei uns trotzdem nicht gereicht ein Problem zu lösen. Wir bauen auf Baukästen basierenden Modellautos im Maßstab 1/10 mit Motor, Licht usw. . Dafür gibt es auch schon Lösungen auf die wir bisher zurückgegriffen haben. Aber wir wollen uns weiter entwickeln… Unser aktuelles Fahrzeug soll eine Innenraumbeleuchtung bekommen. Licht an wenn eine der fünf Türen geöffnet wird. Das wurde über Hallsensoren gelöst. Jetzt möchten wir gern das ganze um eine Alarmanlage erweitern. Heisst, wir nutzen die vorhanden Sensoren und haben zusätzlich einen Schalter (später gern über Bluetooth). Beim umschalten („scharfschalten der Alarmanlage“) wird beim Öffnen einer der Türen nicht die Innenraumbeleuchtung geschaltet, sondern ein Ausgang an ein anderes minusschaltendes Modul, (Beier USM RC2) geschaltet werden. Mit der „if“ Funktion kommen wir nicht so richtig weiter. Anbei gern der Sketch für die Innenraumbeleuchtung. Wir sind verzweifelt. Können Sie uns helfen? Wie muss der Sketch umgeschrieben werden damit das realisiert werden kann?!
Viele Grüße
Tim & die Modellbauer
// an den Pins D2, D3, D4, D5 und D6 ist je ein Hall Sensor
// mit open collector angeschlossen
byte LEDPIN = 13;
byte sensorPin;
byte sensors;
boolean light;
// Verzögerungszeit bei Licht aus [ms]
int lightOffDelay = 2000;
void setup() {
// Pin Mode setzen, D2-D5 Input, Pullup aktiv
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
light = 0;
// serielle Schnittstelle f. Debug initialisieren
Serial.begin(9600);
Serial.println(„GO“);
}
void loop() {
sensors = 0;
// alle HALL Sensoren auslesen, sensors wird 1, wenn eine Tür offen is
for (sensorPin = 2; sensorPin <= 6; sensorPin++) {
sensors = sensors | digitalRead(sensorPin);
}
// wenn sensor Wert von aktueller Licht Situation abweicht, umschalten
if (sensors ^ light) {
if (sensors) {
digitalWrite(pinmode8, HIGH);
Serial.println("Licht an");
light = 1;
}
else {
// wenn alle Türen zu, warten und dann aus
delay(lightOffDelay);
digitalWrite(LEDPIN, LOW);
Serial.println("Licht aus");
light = 0;
}
}
delay(100);
}
Hallo Tim,
vielen Dank für die netten Worte. Ich hab den Sketch mal angepasst. Ich nutze die bitweisen Operatoren selten, sodass ich das mal ausgetauscht habe. Wenn Du die Variable armed auf false setzt, solltest Du anstelle der LED den Alarm scharf schalten. Hilft Euch das erstmal weiter?
Liebe Grüße
Stefan
// an den Pins D2, D3, D4, D5 und D6 ist je ein Hall Sensor
// mit open collector angeschlossen
int LEDPIN = 13;
int sensorPin[] = {2, 3, 4, 5, 6};
boolean sensorsState[5];
boolean armed = false; // bei true ist die Alarmanlage an
boolean doorOpen = false; // Tür ist offen bei true
int lightOffDelay = 2000; // Verzögerungszeit bei Licht aus [ms]
boolean lastDoorState = false; // speichert letzten Zustand (benötigt für Nachleuchten)
void setup() {
// Pin Mode setzen, D2-D5 Input, Pullup aktiv
for (int i = 0; i < 5; i++) { pinMode(sensorPin[i], INPUT_PULLUP); } pinMode(LEDPIN, OUTPUT); // serielle Schnittstelle f. Debug initialisieren Serial.begin(115200); Serial.println("GO"); } void loop() { doorOpen = false; // Sensoren auslesen for (int i = 0; i < 5; i++) { sensorsState[i] = digitalRead(sensorPin[i]); if (sensorsState[i] == 0) doorOpen = true; // falls eine Tür geöffnet, dann true, sonst false } if (doorOpen==true) { if (armed==true) { // Alarm digitalWrite(8, HIGH); digitalWrite(LEDPIN, LOW); Serial.println("Alarm an"); } else { // Innenraumbeleuchtung an digitalWrite(8, LOW); digitalWrite(LEDPIN, HIGH); Serial.println("Licht an"); } } if ((lastDoorState!=doorOpen)&&(doorOpen==false)){ // wenn alle Türen zu, warten und dann aus Serial.println("Nachleuchten"); digitalWrite(LEDPIN, HIGH); delay(lightOffDelay); digitalWrite(LEDPIN, LOW); Serial.println("Licht aus"); } lastDoorState=doorOpen; delay(100); }
Lieber Stefan,
das geht wie bei der Feuerwehr!! Wir werden uns das morgen mal nach der Schule in Ruhe anschauen und berichten.
Vielen Dank und beste Grüße
Tim
Tolle Seite,
als Blutjunger Anfänger Senior bitte die Frage:
habe zufällig einen „Arduino Uno“ und einen „Rasperry pi Sero“ (ohne Zubehör und Anleitung) günstig erstanden bzw. als Geschenk von Heise für ein Kurz Abo bekommen. Ist es möglich beide irgendwie zu verbinden zum experimentieren ?
Wäre sehr dankbar für dementsprechende und weitere Hinweise.
Schöne Grüße
wowo
Hallo Wowo,
also erstmal Glückwunsch zu den schönen Dingen. Man kann das Arduino-Board natürlich schon an den Raspberry Pi anschließen, aber wie so oft stellt sich die Frage nach dem Warum. Wenn Du eine Projektidee hast, kannst Du gucken, wie das am Besten umsetzbar ist. Um beide zu verbinden, würde ich das Arduino-Board per USB an den Pi anschließen und die »Serielle Kommunikation« zum Datenaustausch verwenden. Ich empfehle Dir aber, Dir ein gutes Buch zum Raspberry Pi zu besorgen. In Raspberry Pi: Das umfassende Handbuch* werden die wichtigsten Themen gut erklärt. Das Raspberry Pi ist eine ganz andere Baustelle, als das Arduino Board.
Liebe Grüße
Stefan
*Affiliate-Link
Sehr schöne und informative Seite. Mal eine Frage : Im obigen Beispiel werden die LED’s direkt, also ohne Treiber an die Pins des Arduino und somit an den Mikrocontroller gehängt. Schafft dieser das powermäßig denn auf Dauer, die LED’s direkt zu treiben ?
Ich hab‘ das vor Urzeiten mal so gelernt, das man beim ansteuern von LED’s diese immer über Treiber, z.B. einen Transistor oder entsprechenden IC laufen lassen sollte. Wie ist das beim Arduino ?
Hallo Thomas, also das hat Du eigentlich schon richtig gelernt. Da die LEDs aber inklusive Vorwiderstand nur ca. 20mA benötigen und der Chip des Arduino-Boards (ATMEGA328) bis zu 40mA liefern kann, geht das schon. Der Chip ist wirklich super robust. Liebe Grüße
Für den Anfang gut. Ich schau ‚mal weiter. Wie wird der Programmtransfer vom PC durchgeführt; welche Debug-Möglichkeiten gibt es?
Ich habe Deine Methode zum Blinken mal mit meinen „eigenen“ Variablen abgetippt, aber hier springt das Programm nicht zur nächsten LED, wenn die erste dreimal geleuchtet hat.
Ich habe alles verglichen. Und kopiere ich Deinen Code und lasse diesen ausführen, funktioniert alles, wie es soll …
Ich bin verwirrt :D
Ich bin begeistert! Endlich mal schön Schritt für Schritt der Programmaufbau, das Konzept erklärt, sodass ich noch Hoffnung habe, das C(++) auch für Normalos zu verstehen ist. Ich brenne auf die Folge-Kapitel.
Ihr schreibt oben mehrfach:
digitalWrite(6, HIGH);
delay(1000);
digitalWrite(6, HIGH);
delay(1000);
Ich glaube, „LOW“ ist in der unteren Reihe als Argument nötig, um das Blinken hinzubekommen.
@Lobotta: Sehr guter Hinweis, vielen Dank dafür! Schön, dass Dir die Anleitung gefällt.
Gute Erklärung
Fehlt nicht eine } Klammer im if Sketch?
@Mike: Stimmt, danke für den Hinweis. Die Formatierung habe ich auch gleich gefixt. Jetzt sollte es stimmen.
Super Klasse erklärt!! Einfach, strukturiert und ohne jegliches „Angeberwissen“. So macht das Spaß! Endlich versteht man es, nicht wie im Unterricht. Wenn es noch mehr davon gibt, bitte bescheid geben!!
Vielen Dank für das Kompliment <3
Guter Schnelleinstieg. Das wichtigste Handwerkszeug zum programmieren knapp und einfach erklärt. Vielen Dank!
Der Vorwiderstand der LED kommt an PLUS oben im Schaltbild!
Eigentlich nicht. Der »Plus« kommt ja aus den digitalen Pins. Auf welcher Seite der Vorwiderstand ist, ist meines Wissens nach nicht relevant. LG
Könnten Sie mir verraten wie man eine Formel eingibt, in der dann eine Variable drinsteht, die von einem Ultraschall sensor definiert wird?
Es soll ein Ultraschall Sensor eine Entfernung messen und danach den Wert in die Formel einsetzten, die dann einen Winkel daraus berechnet (Formel habe ich bereits). Dieser Winkelsoll an einen Servo geschickt werden, der diesen dann einstellt.
Grüsse xx_arduinofan_xx
Hi arduinofan – inzwischen wirst Du es auch woanders erfahren haben: Der „IF-Abfrage“-Teil oben ist der Schlüssel für Deinen Sensor.
if (digitalRead(buttonPin)==HIGH){
Die Bedingung muss sich „nur“ auf Deinen Sensor beziehen statt auf den Taster. Allerdings ist es ja so, dass der IR-Sensor ja in einem gewissen Bereich die Entfernungen messen kann. „10“ oder „105“ usw. würden wir als cm-Messungen erwarten, oder?
Wenn es nicht um „ein“ oder „aus“ geht, „ja“ oder „nein“, „0“ oder „1“, muss Ardi mit einem analogen Wert umgehen. Das ist dann oft ein Wert zwischen 0 und 1023. Versuch’s mal damit:
int ledPin=5; // die LED an Pin 5 soll unter Umständen (Bedingung!) leuchten
int SensorAnalog=A1; // neben + und – hast Du einen dritten Pin, der Werte an den Pin A1 liefern kann. Verbine sie mit einem Kabel.
int Wert1; // der am PIN A1 ankommende Messwert muss in einer Variablen gespeichert werden. Hier wird dafür „Platz reserviert“
void setup() {
pinMode(A1, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (serialRead(A1)<512){
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
coole website
mein ich ernst