Guten Abend Profis,
sketch geschrieben, auf einen originalen Arduino UNO R3 geschoben, auf dem Steckbrett verdrahtet:
Läuft! Also Tasterdruck wird erkannt, Millis funktionieren, Ansteuerung der Pins klappt.
(Sketch hinten dran).
Mit dem Uno das Programm auf einen ATMega 88PA gebrannt, verdrahtet und:
Sketch läuft ohne auf einen Tastendruck zu warten, durch.
Hardware Verdrahtung geprüft, Taster mit Widerstand wie am UNO angeschlossen.
Ausgangspins gehen auf einen UDN 2981.
Jetzt brauche ich mal Hilfe beim Fehlersuchen.
Was könnte noch als Fehlerquelle in Betracht kommen? Gibt es da die üblichen Verdächtigen?
Merci.
Flötzinger
/*Programm für 4 Weichenstrassen
µC ATMega 88
1 LCD Modul 4x20 Zeichen
8 Taster, gestellt und gesperrt
8 Relaisansteuerungen SPS IN A/ IN B
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); // Datenleitungen an 27/ 28
const int Taster1 = 3; // Gleis 64 gesperrt; Geradefahrt W15, W16, W4
const int Taster2 = 2; // Gleis 64 gestellt; Abzweigfahrt W15, W16, W4
const int Taster3 = 16; // Gleis 63 gestellt; Geradefahrt W15, W16
const int Taster4 = 4; // Gleis 63 gesperrt; Abzweigfahrt W15, W16
const int Taster5 = 5; // Gleis 52 gestellt; Geradefahrt W15, W2
const int Taster6 = 17; // Gleis 52 gesperrt; Abzweigfahrt W15, W2
const int Taster7 = 7; // Gleis 53 gesperrt; Geradefahrt W15
const int Taster8 = 6; // Gleis 53 gestellt; Abzweigfahrt W15
const int Weiche_15_Abz = 8;
const int Weiche_15_Ger = 9;
const int Weiche_16_Abz = 10;
const int Weiche_16_Ger = 11;
const int Weiche_04_Abz = 12;
const int Weiche_04_Ger = 13;
const int Weiche_02_Abz = 14;
const int Weiche_02_Ger = 15;
unsigned long Startzeit1 =0; // Start Zeitablauf Anlassung Relais
unsigned long Ansteuerung =1000; // Anlassung Relais-> Kontakt SPS IN
//**************************************
void setup(){
pinMode(Taster1,INPUT); // Gleis 64 gestellt; SPS 4, ,IN A
pinMode(Taster2,INPUT); // Gleis 64 gesperrt; SPS 4, ,IN B
pinMode(Taster3,INPUT); // Gleis 63 gestellt; SPS 4, ,IN A
pinMode(Taster4,INPUT); // Gleis 63 gesperrt; SPS 4, ,IN B
pinMode(Taster5,INPUT); // Gleis 52 gestellt; SPS 4, ,IN A
pinMode(Taster6,INPUT); // Gleis 52 gesperrt; SPS 4, ,IN B
pinMode(Taster7,INPUT); // Gleis 53 gestellt; SPS 4, ,IN A
pinMode(Taster8,INPUT); // Gleis 53 gesperrt; SPS 4, ,IN B
pinMode(Weiche_15_Abz, OUTPUT);
pinMode(Weiche_15_Ger, OUTPUT);
pinMode(Weiche_16_Abz, OUTPUT);
pinMode(Weiche_16_Ger, OUTPUT);
pinMode(Weiche_04_Abz, OUTPUT);
pinMode(Weiche_04_Ger, OUTPUT);
pinMode(Weiche_02_Abz, OUTPUT);
pinMode(Weiche_02_Ger, OUTPUT);
lcd.init();
lcd.backlight();
}
//**************************************
void loop(){
// Weichenstrasse Gleis 64 Kohlenhandlung gestellt
if (digitalRead(Taster1)==HIGH){
digitalWrite(Weiche_15_Abz,HIGH); // SPS 4, W15, IN A
digitalWrite(Weiche_16_Abz,HIGH); // SPS 4, W16, IN A
digitalWrite(Weiche_04_Abz,HIGH); // SPS 1, W04, IN A
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Kohlenhandlung "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Abzweig "));
lcd.setCursor(0,2);
lcd.print(F("W 15, W 16, W 4 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 64 gestellt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Abz,LOW);// SPS 4, W15, IN A
digitalWrite(Weiche_16_Abz,LOW);// SPS 4, W16, IN A
digitalWrite(Weiche_04_Abz,LOW);// SPS 1, W04, IN A
}
// Weichenstrasse Gleis 64 Kohlenhandlung gesperrt
if (digitalRead(Taster2)==HIGH){
digitalWrite(Weiche_15_Ger,HIGH); // SPS 4, W15, IN B
digitalWrite(Weiche_16_Ger,HIGH); // SPS 4, W16, IN B
digitalWrite(Weiche_04_Ger,HIGH); // SPS 1, W04, IN B
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Kohlenhandlung "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Gerade "));
lcd.setCursor(0,2);
lcd.print(F("W 15, W 16, W 4 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 64 gesperrt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Ger,LOW);// SPS 4, W15, IN B
digitalWrite(Weiche_16_Ger,LOW);// SPS 4, W16, IN B
digitalWrite(Weiche_04_Ger,LOW);// SPS 1, W04, IN B
}
// Weichenstrasse Gleis 63 Diesellager gestellt
if (digitalRead(Taster3)==HIGH){
digitalWrite(Weiche_15_Abz,HIGH); // SPS 4, W15, IN A
digitalWrite(Weiche_16_Abz,HIGH); // SPS 4, W16, IN A
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Diesellager "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Abzweig "));
lcd.setCursor(0,2);
lcd.print(F("W 15, W 16 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 63 gestellt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Abz,LOW);// SPS 4, W15, IN A
digitalWrite(Weiche_16_Abz,LOW);// SPS 4, W16, IN A
}
// Weichenstrasse Gleis 63 Diesellager gesperrt
if (digitalRead(Taster4)==HIGH){
digitalWrite(Weiche_15_Ger,HIGH); // SPS 4, W15, IN B
digitalWrite(Weiche_16_Ger,HIGH); // SPS 4, W16, IN B
//digitalWrite(Weiche_04_Ger,HIGH); // SPS 1, W04, IN B
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Diesellager "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Gerade "));
lcd.setCursor(0,2);
lcd.print(F("W 15, W 16, "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 63 gesperrt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Ger,LOW);// SPS 4, W15, IN B
digitalWrite(Weiche_16_Ger,LOW);// SPS 4, W16, IN B
digitalWrite(Weiche_04_Ger,LOW);// SPS 1, W04, IN B
}
// Weichenstrasse Gleis 52 Lokschuppen links gestellt
if (digitalRead(Taster5)==HIGH){
digitalWrite(Weiche_15_Abz,HIGH); // SPS 4, W15, IN A
digitalWrite(Weiche_02_Abz,HIGH); // SPS 4, W16, IN A
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Lokschuppen links "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Abzweig"));
lcd.setCursor(0,2);
lcd.print(F("W 15, W 2 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 52 gestellt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Abz,LOW);// SPS 4, W15, IN A
digitalWrite(Weiche_02_Abz,LOW);// SPS 4, W16, IN A
}
// Weichenstrasse Gleis 52 Lokschuppen links gesperrt
if (digitalRead(Taster6)==HIGH){
digitalWrite(Weiche_15_Ger,HIGH); // SPS 4, W15, IN B
digitalWrite(Weiche_02_Ger,HIGH); // SPS 4, W16, IN B
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Lokschuppen links "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Gerade "));
lcd.setCursor(0,2);
lcd.print(F("W 15, W2 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 52 gesperrt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Ger,LOW);// SPS 4, W15, IN B
digitalWrite(Weiche_02_Ger,LOW);// SPS 4, W16, IN B
}
// Weichenstrasse Gleis 53 Lokschuppen rechts gestellt
if (digitalRead(Taster7)==HIGH){
digitalWrite(Weiche_15_Abz,HIGH); // SPS 4, W15, IN A
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Lokschuppen rechts "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Abzweig "));
lcd.setCursor(0,2);
lcd.print(F("W 15 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 53 gestellt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Abz,LOW);// SPS 4, W15, IN A
}
// Weichenstrasse Gleis 53 Lokschuppen rechts gesperrt
if (digitalRead(Taster8)==HIGH){
digitalWrite(Weiche_15_Ger,HIGH); // SPS 4, W15, IN B
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("Lokschuppen rechts "));
lcd.setCursor(0,1);
lcd.print(F("Weichen auf Gerade "));
lcd.setCursor(0,2);
lcd.print(F("W 15 "));
lcd.setCursor(0,3);
lcd.print(F("Gleis 53 gesperrt "));
Startzeit1=millis();
}
else if(millis()-Startzeit1>=Ansteuerung){
digitalWrite(Weiche_15_Ger,LOW);// SPS 4, W15, IN B
}
}//Ende Loop