/*Dieser Sketch faehrt das Auto und hupt per IR-Fernbedienung. Die Codes wurden vorher ermittelt mit Sketch xxx. Fahren auch nach Loslassen der jeweiligen Taste, solange bis eine andere Taste gedrueckt wird. Deshalb wird eine Taste fuer Stoppen erforderlich. Das Infrarotlicht wird mit einem Code verschluesselt gesendet. Man kann dann den Code im Serial Monitor lesen. Diesen Code auslesen und in passende Werte umwandeln benoetigt umfangreichen Code. Das Programm greift deshalb auf eine "Library" (Bibliothek) zurueck, die geladen werden muss: "IRremote by Armin Joachimsmeyer". Ab Version 3.0 muss der Sketch geaendert werden (hier wird Version 4.1.2 genutzt). Siehe auch https://roboticsbackend.com/arduino-ir-remote-controller-tutorial-setup-and-map-buttons/ Das decodierte Signal erscheint auch im Serial Monitor. */ #include "Fahrablaufmodule.h" #include "Hupen.h" #include <IRremote.hpp> #define IR_RECEIVE_PIN 12 //IR-Empfaenger gibt Signal an Pin D12 /*Achtung: funktioniert nicht mit D0 (Fehlermeldung beim Hochladen) bzw.D1 (kein Ansprechen des IR-Empfaengers)*/ void setup() { Serial.begin(9600); Serial.println("Warten auf Signal von IR Fernbedienung"); IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); pinMode (11,OUTPUT); //an IN1 Drehrichtung an Rad links pinMode (8,OUTPUT); //an IN2 an Rad links pinMode (7,OUTPUT); //an IN3 an Rad rechts pinMode (17,OUTPUT); //an IN4 an Rad rechts pinMode (6,OUTPUT); //an EN1 Geschwindigkeit an Rad links pinMode (5,OUTPUT); //an EN2 Geschwindigkeit an Rad rechts /*stop*/ digitalWrite (11,LOW); digitalWrite (8,LOW); digitalWrite (17,LOW); digitalWrite (7,LOW); } void loop() { if (IrReceiver.decode()) { IrReceiver.resume(); Serial.println(IrReceiver.decodedIRData.command); } int value = IrReceiver.decodedIRData.command; switch(value) { case 24: forward(); break; // Button "Pfeil vor" case 82: back(); break; // Button "Pfeil rueck" case 8: left(); break; // Button "Pfeil rechts" case 90: right(); break; // Button "Pfeil links" case 28: stopp(); break; // Button "OK" case 25: hupen();break; // Button "0" default: break; //break: Programm springt weiter } }
void forward() { digitalWrite(7, HIGH); // Schalte Motoren RECHTS ein digitalWrite(17, LOW); analogWrite(5, 250); // Setze die Geschwindigkeit zwischen 0...255 digitalWrite(11, HIGH); // Schalte Motoren LINKS ein digitalWrite(8, LOW); analogWrite(6, 250); // Setze die Geschwindigkeit zwischen 0...255 Serial.println("FORWARD"); } void back() { digitalWrite(7, LOW); // Schalte Motoren RECHTS ein digitalWrite(17, HIGH); analogWrite(5, 250); // Setze die Geschwindigkeit zwischen 0...255 digitalWrite(11, LOW); // Schalte Motoren LINKS ein digitalWrite(8, HIGH); analogWrite(6, 250); // Setze die Geschwindigkeit zwischen 0...255 Serial.println("BACK"); } void left() { digitalWrite(7, HIGH); // Schalte Motoren RECHTS ein digitalWrite(17, LOW); analogWrite(5, 250); // Setze die Geschwindigkeit zwischen 0...255 digitalWrite(11, LOW); // Schalte Motoren LINKS ein digitalWrite(8, HIGH); analogWrite(6, 250); // Setze die Geschwindigkeit zwischen 0...255 Serial.println("LEFT"); } void right() { digitalWrite(7, LOW); // Schalte Motoren RECHTS ein digitalWrite(17, HIGH); analogWrite(5, 250); // Setze die Geschwindigkeit zwischen 0...255 digitalWrite(11, HIGH); // Schalte Motoren LINKS ein digitalWrite(8, LOW); analogWrite(6, 250); // Setze die Geschwindigkeit zwischen 0...255 Serial.println("RIGHT"); } void stopp() { digitalWrite(7, LOW); // Schalte alle Motoren aus digitalWrite(17, LOW); digitalWrite(11, LOW); digitalWrite(8, LOW); Serial.println("STOP"); }
/*Es wird ein Ton erzeugt mit einem Passive Buzzer (Piezo-Summer). Die Tonhoehe (Frequenz) und Tondauer kann programmiert werden. Achtung: Der Befehl "tone()" kann nicht verwendet werden, ist in Kollision mit dem Bibliotheksprogramm IRremote.*/ void hupen() { pinMode(4, OUTPUT); //an Pin D4 Tonsignal zum Passive Buzzer for (int i=0 ; i<500 ; i++) //HIGH-LOW wiederholen i-mal { digitalWrite (4 , HIGH); // HIGH fuer 1ms delay (1); digitalWrite (4 , LOW); // LOW fuer 1ms delay (1); } }