Arduino soll auf Tastendruck reagieren

Moin,

ich wollte mein Programm so schreiben, dass der Arduino eine LED zum leuchten bringt, solange ich zB. "A" gedrückt halte und eine andere, wenn ich "B" gedrückt halte. Bisher kann ich im SerialMonitor nur eine Zahl eingeben und muss dann Enter drücken, aber ich möchte, dass die LED so lange leuchtet, wie ich die Taste drücke.

Mein bisheriger Code:

 incoming = Serial.read();
  if(incoming != -1){
    temp = incoming;
  }
  Serial.println(temp);

  if(temp == 49){
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
  }

Freue mich über jede Hilfe :wink:

Viele Grüße
betaros

Da ist SerialMonitor das falsche Eingabe-Medium.
Der sendet dem Arduino erst mit der Enter-Taste etwas (nämlich die bis dahin eingegebene Text-Zeile).

Wenn du neben Arduino programmieren auc PC programmieren (lernen) willst, schreibst du dir ein passendes PC Programm,
Sonst : wie wäre es mit richtigen Tastern ? Da bräuchte man zwar keinen Arduino, aber es soll ja eine Übung sein :wink:

Danke für den schnellen Tipp. :slight_smile:

Ich habe das Starter Kit von Arduino.cc und da bis auf 2 Projekte alles durch. Nun hatte ich als nächstes vor ein Modellauto zu bauen, was ich mit meinem Gamepad steuern kann. Um mich langsam an das Thema heranzutasten dachte ich, dass ich erstmal die Tastatur als Controller nehme. Durch das Drücken der Tasten W,A,S,D soll so jeweils eine LED an oder aus gemacht werden.

Was das programmieren angeht: Bisher habe ich kaum in C++ programmiert, allerdings kenne ich relativ gut Java und Perl. Daher hoffe ich, dass ich mich relativ schnell in C++ einarbeite.

Bisher habe ich für das Auslesen von Tastenanschlägen unter Windows folgendes für C++ gefunden:

#include <windows.h>
...
if(GetAsyncKeyState('W')) {
	cout << "W wurde gedrueckt" << endl;
}

Das hat in einem Beispielprogramm auch gut funktioniert. Ich frage mich aber, wie ich das mit dem Arduino verbinden kann? :astonished:

Viele Grüße
betaros

Du musst gar nicht dauernd Daten hin schicken. Ein oder zwei Byte für LED AN und ein zweites Kommando für LED AUS. z.B:
'A' - 1 -> A an
'A' - 0 -> A aus

An/Aus könnte man theoretisch auch ins oberste Bit packen, aber das macht wieder Arbeit beim auswerten.

Du musst auch nicht C++ auf dem PC verwenden. Java oder C# gehen genauso, solange du weißt wie du die USB/serielle Schnittstelle ansprichst. Persönlich nehme ich dafür nur noch C#.

In .NET und WindowsForms gibt es dafür die KeyDown/Press/Up Events:

Da kannst du bei KeyDown einschalten und mit KeyUp ausschalten. Der Nachteil ist hier vielleicht, dass die Komponente dafür den Fokus haben muss, aber das kann man so machen, dass z.B. eine TextBox immer im Fokus ist wenn das Fenster aktiv ist.

Das Beispiel von dir ist für eine Konsolen-Anwendung. Das kann man auch nehmen, aber ein GUI ist hier nicht verkehrt.

Serial geht in .NET extrem einfach mit der SerialPort Klasse:

Die ganzen Optionen in dem Beispiel brauchst du i.d.R nicht. Nur diesen Konstruktor dem man den String des COM-Ports übergibt:

Danach einmal Open(). Und dann einfach die Write-Methode