Hallo,
ich arbeite in meinem Betrieb derzeit an einem Projekt:
Es sollen vier Relais und vier LEDs über die serielle Schnittstelle des PCs, mithilfe eines Arduino UNO, angesteuert werden.
Allerdings soll dies auch manuell, mithilfe eines Drehschalters geschehen können.
Deshalb gibt es einen Schalter, um zwischen diesen beiden Möglichkeiten zu wechseln.
Ich habe schon einen Code geschrieben, allerdings funktioniert dieser nur teilweise.
Die reine Steuerung über die serielle Schnittstelle funktioniert, doch sobald ich den Code für das manuelle Schalten hinzufüge, funktioniert nichts mehr...
Sobald das Programm startet, setzt der Arduino den Port 5 auf HIGH und ich weiß nicht warum.
Man kann den Port dann auch nicht mehr auf LOW setzen...
Am besten zeige ich euch mal mein Sketch:
/*
CODE V1
*/
//Deklarierung der Ports für die vier LEDs
const byte led1 = 2;
const byte led2 = 3;
const byte led3 = 4;
const byte led4 = 5;
//Deklarierung der Ports für die vier Relais
const byte rel1 = 6;
const byte rel2 = 7;
const byte rel3 = 8;
const byte rel4 = 9;
//Deklarierung der Ports für die vier Schaltereingänge
const byte sw1 = 10;
const byte sw2 = 11;
const byte sw3 = 12;
const byte sw4 = 13;
//Deklarierung des Ports für den Auswahlschalter für die Auswahl zwischen PC und Manuell
const byte modus = 0;
//Variable zum Speichern des Zustands des jeweiligen Schalters
int schalterstatus1 = 0;
int schalterstatus2 = 0;
int schalterstatus3 = 0;
int schalterstatus4 = 0;
//Variable zum Speichern des Zustand des Auswahlschalters
int auswahl = 0;
void setup()
{
//Serielle Komminkation mit 9600 Baud, 8 Bit, keiner Parität und einem Stoppbit
Serial.begin(9600,SERIAL_8N1);
pinMode(led1, OUTPUT); //LED Ports als Ausgänge
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(rel1, OUTPUT); //Relais Ports als Ausgänge
pinMode(rel2, OUTPUT);
pinMode(rel3, OUTPUT);
pinMode(rel4, OUTPUT);
pinMode(sw1, INPUT); //Schalter Ports als Eingänge
pinMode(sw2, INPUT);
pinMode(sw3, INPUT);
pinMode(sw4, INPUT);
}
void loop()
{
auswahl = digitalRead(modus); // Auslesen und Speichern des Auswahlschalters
// Wenn der Auswahlschalter auf "HIGH" steht, soll die Steuerung der LEDs und Relais über die serielle Schnittstelle funktionieren
if(auswahl == 1)
{
if (Serial.available())
{
switch (Serial.read()) // Dieser Abschnitt lässt die LEDs und die Relais ein- und ausschalten
{
case '1': digitalWrite(led1, !digitalRead(led1)); digitalWrite(rel1, !digitalRead(rel1)); break;
case '2': digitalWrite(led2, !digitalRead(led2)); digitalWrite(rel2, !digitalRead(rel2)); break;
case '3': digitalWrite(led3, !digitalRead(led3)); digitalWrite(rel3, !digitalRead(rel3)); break;
case '4': digitalWrite(led4, !digitalRead(led4)); digitalWrite(rel4, !digitalRead(rel4)); break;
}
}
}
// Wenn der Auswahlschalter auf "LOS" steht, soll die Steuerung, manuell, über den Drehschalter erfolgen
else if(auswahl == 0)
{
schalterstatus1 = digitalRead(sw1); // Auslesen und Speichern des Statuses der Eingänge
schalterstatus2 = digitalRead(sw2);
schalterstatus3 = digitalRead(sw3);
schalterstatus4 = digitalRead(sw4);
//Wenn der erste Schalterstatus "HIGH" ist, soll LED1 und Relais1 geschaltet werden, ansonsten nicht
if(schalterstatus1 == HIGH)
{
digitalWrite(led1, HIGH);
digitalWrite(rel1, HIGH);
}
else
{
digitalWrite(led1, LOW);
digitalWrite(rel1, LOW);
}
//Wenn der zweite Schalterstatus "HIGH" ist, soll LED2 und Relais2 geschaltet werden, ansonsten nicht
if(schalterstatus2 == HIGH)
{
digitalWrite(led2, HIGH);
digitalWrite(rel2, HIGH);
}
else
{
digitalWrite(led2, LOW);
digitalWrite(rel2, LOW);
}
//Wenn der dritte Schalterstatus "HIGH" ist, soll LED3 und Relais3 geschaltet werden, ansonsten nicht
if(schalterstatus3 == HIGH)
{
digitalWrite(led3, HIGH);
digitalWrite(rel3, HIGH);
}
else
{
digitalWrite(led3, LOW);
digitalWrite(rel3, LOW);
}
//Wenn der vierte Schalterstatus "HIGH" ist, soll LED4 und Relais4 geschaltet werden, ansonsten nicht
if(schalterstatus4 == HIGH)
{
digitalWrite(led4, HIGH);
digitalWrite(rel4, HIGH);
}
else
{
digitalWrite(led4, LOW);
digitalWrite(rel4, LOW);
}
}
}