Moin zusammen,
ich bin Modellbauer und möchte meine beleuchteten Modelle mit eine Arduino Nano und einer IR Fernbedienung ansteuern.
Den Sketch habe ich soweit auch geschrieben, aber eins verstehe ich nicht so ganz.
ich bin was das programmieren angeht noch totaler Anfänger.
die Ausgänge 11-17 geben keine volle Spannung ab und die Blinkfrequenz stimmt leider auch nicht, soll heißen wenn ich Taste OK,links oder rechts drücke glimmen die Ausgänge nur kurz auf.
kann mir jemand sagen wo mein Denkfehler liegt, vielen Dank
anbei der von mir erstellte Code
grüße Thomas
[code]
/* Programm zur realistischen Darstellung von Fahrzeugbeleuchtungen im Modellbau, gesteuert mit eine IR Fernbdienung */
#include <IRremote.hpp>
int eingang = 0; // Anschluss Empfaenger
int LED = 1; // Begrenzungslicht
int LED1 = 2; // Arbeitsscheinwerfer oder Rueckfahrscheinwerfer
int LED2 = 3; // Fernlicht oder Nebelscheinwerfer
int LED3 = 4; // Warnblinker
int LED4 = 5; // Frontblitzer
int LED5 = 9; // Heck oben links (1)
int LED6 = 10; // Heck zwei links (2)
int LED7 = 11; // Heck unten links (3)
int LED8 = 12; // Heck (4)
int LED9 = 13; // Heck (5)
int LED10 = 14; // Heck (6)
int LED11 = 15; // Heck (7)
int LED12 = 16; // Heck (8)
int LED13 = 17; // Heck (9)
int Taste0 = 0; // Schaltet alles aus
int Taste1 = 0; // Schaltet Begrenzungslicht
int Taste2 = 0; // Schaltet Arbeitsscheinwerfer
int Taste3 = 0; // Schaltet Fernlicht oder Nebelscheinwerfer
int Taste4 = 0; // Schaltet Warnblinker
int Taste5 = 0; // Schaltet Frontblitzer
int Taste6 = 0; // Schaltet Rundumlicht
int Taste7 = 0; // ohne Funktion
int Taste8 = 0; // ohne Funktion
int Taste9 = 0; // ohne Funktion
int TasteOK = 0; // Schaltet X
int Tasterechts = 0; // Schaltet Pfeil rechts
int Tastelinks = 0; // Schaltet Pfeil links
int StatusLed = HIGH; // Alle werde im Aus Zustand auf den HIGH Zustatnd versetzt, weil GND geschaltet
int StatusLED1 = HIGH;
int StatusLED2 = HIGH;
int StatusLED3 = HIGH;
int StatusLED4 = HIGH;
int StatusLED5 = HIGH;
int StatusLED6 = HIGH;
int StatusLED7 = HIGH;
int StatusLED8 = HIGH;
int StatusLED9 = HIGH;
int StatusLED10 = HIGH;
int StatusLED11 = HIGH;
int StatusLED12 = HIGH;
int StatusLED13 = HIGH;
unsigned long previousMillisLED3 = 0; // Warnblinker
unsigned long previousMillisLED4 = 0; // Frontblitzer
const long Interval3 = 500; // Zeit für Warnblinker in MS
const long Interval4 = 140; // Zeit für Frontblitzer in MS
unsigned long previousMillisLED5 = 0; // Blinkendes X
const long IntervallX = 400; // Zeit für Leitzeichen (X,rechts und links) in MS
unsigned long previousMillisLED12 = 0; // Blinkender Pfeil rechts
unsigned long previousMillisLED7 = 0; // Blinkender Pfeil links
int LEDrund [3] = {6,7,8}; // Rundumlicht (Anschluss 6,7 und 8)
int counter = 0;
unsigned long previousMillis = 0;
const long intervall = 100; //Zeit für den Wechsel zwischen LEDS der RUL
void setup() {
{
for (int i = 0;i < 3; i++)
pinMode (LEDrund [i],OUTPUT);
}
Serial.begin(9600);
IrReceiver.begin(eingang);
pinMode (LED, OUTPUT);
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode (LED5, OUTPUT);
pinMode (LED6, OUTPUT);
pinMode (LED7, OUTPUT);
pinMode (LED8, OUTPUT);
pinMode (LED9, OUTPUT);
pinMode (LED10, OUTPUT);
pinMode (LED11, OUTPUT);
pinMode (LED12, OUTPUT);
pinMode (LED13, OUTPUT);
}
void loop() {
if (IrReceiver.decode()) {
IrReceiver.printIRResultShort (&Serial);
switch (IrReceiver.decodedIRData.command) {
case 0x45: // Schaltet Begrenzungslicht ein oder aus
if (Taste1 == 0){
Taste1 = 1;
}
else {
Taste1 = 0;
} break;
case 0x46: // schaltet Arbeitsscheinwerfer
if (Taste2 == 0){
Taste2 = 1;
}
else {
Taste2 = 0;
} break;
case 0x47: // Fernlicht
if (Taste3 == 0){
Taste3 = 1;
}
else{
Taste3 = 0;
} break;
case 0x44: //Warnblinker
if (Taste4 == 0){
Taste4 = 1;
}
else {
Taste4 = 0;
} break;
case 0x40: //Frontblitzer
if (Taste5 == 0){
Taste5 = 1;
}
else {
Taste5 = 0;
} break;
case 0x43: //Rundumlicht
if (Taste6 == 0){
Taste6 = 1;
}
else {
Taste6 =0;
}break;
case 0x7: //
if (Taste7 == 0){
Taste7 =1;
}
else{
Taste7 = 0;
}break;
case 0x15: //
if (Taste8 == 0){
Taste7 = 1;
}
else{
Taste8 = 0;
}break;
case 0x9: //
if (Taste9 == 0){
Taste9 = 1;
}
else {
Taste9 = 0;
}break;
case 0x19: // schaltet alles aus
if (Taste0 == 0){
Taste0 = 1;
}
else {
Taste0 = 0;
}break;
case 0x1c: // Schaltet x
if (TasteOK == 0){
TasteOK = 1;
}
else {
TasteOK = 0;
}break;
case 0x8: //Pfeil links
if (Tastelinks == 0){
Tastelinks = 1;
}
else {
Tastelinks = 0;
}break;
case 0x5A: //Pfeil rechts
if (Tasterechts == 0){
Tasterechts = 1;
}
else{
Tasterechts = 0;
}break;
default:
break;
}
delay (150);
IrReceiver.resume();
}
if (Taste1 == 1) {
digitalWrite (LED, LOW);
}
else{
digitalWrite (LED, HIGH);
}
if (Taste2 == 1) {
digitalWrite (LED1, LOW);
}
else{
digitalWrite (LED1, HIGH);
}
if (Taste3 == 1) {
digitalWrite (LED2,LOW);
}
else{
digitalWrite (LED2,HIGH);
}
if (Taste4 == 1) {
loop_LED3 ();
}
else{
digitalWrite (LED3, HIGH);
}
if (Taste5 == 1) {
loop_LED4 ();
}
else{
digitalWrite (LED4, HIGH);
}
if (Taste6 == 1) {
loop_rund ();
}
else{
digitalWrite (LEDrund [1],HIGH);
digitalWrite (LEDrund [2],HIGH);
digitalWrite (LEDrund [3],HIGH);
}
if (TasteOK == 1) {
loop_LED5 ();
}
else {
digitalWrite (LED5, HIGH);
digitalWrite (LED7,HIGH);
digitalWrite (LED8, HIGH);
digitalWrite (LED9, HIGH);
digitalWrite (LED10, HIGH);
digitalWrite (LED12, HIGH);
}
if (Tasterechts == 1){
loop_LED12 ();
}
else{
digitalWrite (LED5, HIGH);
digitalWrite (LED7, HIGH);
digitalWrite (LED8, HIGH);
digitalWrite (LED10, HIGH);
digitalWrite (LED11, HIGH);
digitalWrite (LED12, HIGH);
digitalWrite (LED13, HIGH);
}
if (Tastelinks == 1){
loop_LED7 ();
}
else{
digitalWrite (LED5, HIGH);
digitalWrite (LED6, HIGH);
digitalWrite (LED7, HIGH);
digitalWrite (LED9, HIGH);
digitalWrite (LED10, HIGH);
digitalWrite (LED12, HIGH);
digitalWrite (LED13, HIGH);
}
if (IrReceiver.decodedIRData.command == 0x19)
{
Taste1 = 0;
Taste2 = 0;
Taste3 = 0;
Taste4 = 0;
Taste5 = 0;
Taste6 = 0;
Taste7 = 0;
Taste8 = 0;
Taste9 = 0;
TasteOK = 0;
Tasterechts = 0;
Tastelinks = 0;
}
}
void loop_LED3 () {
unsigned long currentMillisLED3 = millis ();
if (currentMillisLED3 - previousMillisLED3 >= Interval3)
{
previousMillisLED3 = currentMillisLED3;
if (StatusLED3 == HIGH){
StatusLED3 = LOW;
}
else{
StatusLED3 = HIGH;
}
digitalWrite (LED3, StatusLED3);
}
}
void loop_LED4 (){
unsigned long currentMillisLED4 = millis ();
if (currentMillisLED4 - previousMillisLED4 >= Interval4)
{
previousMillisLED4 = currentMillisLED4;
if (StatusLED4 == HIGH){
StatusLED4 = LOW;
}
else{
StatusLED4 = HIGH;
}
digitalWrite (LED4, StatusLED4);
}
}
void loop_rund (){
unsigned long currentMillis = millis ();
if (currentMillis - previousMillis >= intervall){
previousMillis = currentMillis;
if (counter == 0){
digitalWrite (LEDrund [2],HIGH);
}
else{
digitalWrite(LEDrund [counter - 1], HIGH);
}
digitalWrite (LEDrund [counter], LOW);
counter = counter +1;
if (counter >2){
counter = 0;
}
}
}
void loop_LED5 (){
unsigned long currentMillisLED5 = millis();
if (currentMillisLED5 - previousMillisLED5 >= IntervallX){
previousMillisLED5 = currentMillisLED5;
if (StatusLED5 == HIGH){
StatusLED5 = LOW;
if (StatusLED7 == HIGH){
StatusLED7 = LOW;
if (StatusLED8 == HIGH){
StatusLED8 = LOW;
if (StatusLED9 == HIGH){
StatusLED9 = LOW;
if (StatusLED10 == HIGH){
StatusLED10 = LOW;
if (StatusLED11 == HIGH){
StatusLED11 = LOW;
}
}
}
}
}
}
}else{
StatusLED5 = HIGH;
StatusLED7 = HIGH;
StatusLED8 = HIGH;
StatusLED9 = HIGH;
StatusLED10 = HIGH;
StatusLED11 = HIGH;
}
digitalWrite (LED5, StatusLED5);
digitalWrite (LED7, StatusLED7);
digitalWrite (LED8, StatusLED8);
digitalWrite (LED9, StatusLED9);
digitalWrite (LED10, StatusLED10);
}
void loop_LED12 (){
unsigned long currentMillisLED12 = millis ();
if (currentMillisLED12 - previousMillisLED12 >= IntervallX){
previousMillisLED12 = currentMillisLED12;
if (StatusLED5 == HIGH){
StatusLED5=LOW;
if (StatusLED7 == HIGH){
StatusLED7=LOW;
if(StatusLED8==HIGH){
StatusLED8=LOW;
if(StatusLED10==HIGH){
StatusLED10=LOW;
if (StatusLED11==HIGH){
StatusLED11=LOW;
if (StatusLED12==HIGH){
StatusLED12=LOW;
if(StatusLED13==HIGH){
StatusLED13=LOW;
}
}
}
}
}
}
}
}
else{
StatusLED5=HIGH;
StatusLED7=HIGH;
StatusLED8=HIGH;
StatusLED10=HIGH;
StatusLED11=HIGH;
StatusLED12=HIGH;
StatusLED13=HIGH;
}
digitalWrite (LED5, StatusLED5);
digitalWrite (LED7,StatusLED7);
digitalWrite (LED8,StatusLED8);
digitalWrite (LED10,StatusLED10);
digitalWrite (LED11,StatusLED11);
digitalWrite (LED12,StatusLED12);
digitalWrite (LED13,StatusLED13);
}
void loop_LED7 (){
unsigned long currentMillisLED7 = millis ();
if (currentMillisLED7 - previousMillisLED7 >= IntervallX){
previousMillisLED7 = currentMillisLED7;
if (StatusLED5 == HIGH){
StatusLED5=LOW;
if (StatusLED6 == HIGH){
StatusLED6=LOW;
if(StatusLED7==HIGH){
StatusLED7=LOW;
if(StatusLED9==HIGH){
StatusLED9=LOW;
if (StatusLED10==HIGH){
StatusLED10=LOW;
if (StatusLED12==HIGH){
StatusLED12=LOW;
if(StatusLED13==HIGH){
StatusLED13=LOW;
}
}
}
}
}
}
}
}
else{
StatusLED5=HIGH;
StatusLED6=HIGH;
StatusLED7=HIGH;
StatusLED9=HIGH;
StatusLED10=HIGH;
StatusLED12=HIGH;
StatusLED13=HIGH;
}
digitalWrite (LED5, StatusLED5);
digitalWrite (LED6,StatusLED6);
digitalWrite (LED7,StatusLED7);
digitalWrite (LED9,StatusLED9);
digitalWrite (LED10,StatusLED10);
digitalWrite (LED12,StatusLED12);
digitalWrite (LED13,StatusLED13);
}
[/code]