#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Wire.h>
boolean DEBUG = true;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 u8g2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int RE1 = 0; // 5;
const int RE2 = 16; // 0;
const int RE3 = 17; // 2;
const int TAKT = 2; // 16; // Takt
const int takt = 4; // 4; // Takt invers
const int Opto1 = 23; // 3; // LED1
const int Opto2 = 19; // 15; // LED2
int gezuendet = 0; // mA für Zündung
boolean positiv = false; // Positive Halbwelle
boolean negativ = false; // Negative Halbwelle
boolean zuendung = false;
void setup() {
Serial.begin(9600);
//------------------------------
// display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
// if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
// display.println(F("Ecran SSD1306 non détecté"));
// for (;;);
// }
//------------------------------
u8g2.begin();
//------------------------------
// display.display();
pinMode(RE1, OUTPUT);
pinMode(RE2, OUTPUT);
pinMode(RE3, OUTPUT);
//pinMode(RE4, OUTPUT);
//pinMode(RE5, OUTPUT);
pinMode(TAKT, OUTPUT);
pinMode(takt, OUTPUT);
pinMode(Opto1, INPUT_PULLUP);
pinMode(Opto2, INPUT_PULLUP);
}
void loop() {
// 30mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 30) {
umpolen();
digitalWrite(RE1,HIGH);
delay(200);
digitalWrite(RE1,LOW);
delay(100);
zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 30;
}
}
}
// 60mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 60) {
umpolen();
digitalWrite(RE2,HIGH);
delay(200);
digitalWrite(RE2,LOW);
delay(100);
zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 60;
}
}
}
// 90mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 90) {
umpolen();
digitalWrite(RE1,HIGH);
digitalWrite(RE2,HIGH);
delay(200);
digitalWrite(RE1,LOW);
digitalWrite(RE2,LOW);
delay(100);
zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 90;
}
}
}
// 189mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 189) {
umpolen();
digitalWrite(RE3,HIGH);
delay(200);
digitalWrite(RE3,LOW);
delay(100);
zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 189;
}
}
}
// 269mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 269) {
umpolen();
digitalWrite(RE1,HIGH);
digitalWrite(RE2,HIGH);
digitalWrite(RE3,HIGH);
delay(200);
digitalWrite(RE1,LOW);
digitalWrite(RE2,LOW);
digitalWrite(RE3,LOW);
delay(100);
zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 269;
}
}
}
//u8g2.firstPage();
//u8g2.clearBuffer();
//u8g2.clearDisplay();
//u8g2.setFont(u8g2_font_7x14B_tr);
if (DEBUG) {
if (!digitalRead(Opto1) == HIGH) {
if (DEBUG) {
u8g2.setCursor(0, 3);
u8g2.print("Opto1=1 (Positive Halbwelle");
Serial.println("Opto1=1 (Positive Halbwelle");
}
}
if (!digitalRead(Opto2) == HIGH) {
if (DEBUG) {
u8g2.setCursor(0, 4);
u8g2.print("Opto2=1 (Negative Halbwelle");
Serial.println("Opto2=1 (Negative Halbwelle");
}
}
}
// Display Ausgabe
// https://github.com/olikraus/u8g2/wiki/u8g2reference
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// display.setCursor(0, 0);
// u8g2.setCursor(0, 0);
if (gezuendet > 0) {
u8g2.setCursor(0, 0);
u8g2.print("Gezündet mit ");
u8g2.print(gezuendet);
u8g2.print(" mA");
u8g2.setCursor(0, 1);
u8g2.print("Typ: ");
if (positiv != negativ) {
u8g2.print("Thyristor");
} else {
u8g2.print("Triac");
}
if (DEBUG) {
Serial.print("Gezündet mit ");
Serial.print(gezuendet);
Serial.println(" mA");
Serial.print("Typ: ");
if (positiv != negativ) {
Serial.println("Thyristor");
} else {
Serial.println("Triac");
}
}
}
digitalWrite(TAKT, LOW);
digitalWrite(takt, LOW);
u8g2.setCursor(0, 2);
if (positiv == false and negativ == false) {
u8g2.print("Kein Bauteil oder defekt");
if (DEBUG) {
Serial.println("Kein Bauteil oder defekt");
}
} else {
u8g2.print("Bauteil OK!");
if (DEBUG) {
Serial.println("Bauteil OK!");
}
}
//u8g2.sendBuffer();
if (DEBUG == false) {
do { // Endlosschleife
delay(1000);
} while (true);
} else {
gezuendet = 0; // mA für Zündung
positiv = false; // Positive Halbwelle
negativ = false; // Negative Halbwelle
}
}
boolean OptosAbfragen() {
boolean Opto1in = !digitalRead(Opto1);
boolean Opto2in = !digitalRead(Opto2);
if (Opto1in == HIGH) {
positiv = true;
}
if (Opto2in == HIGH) {
negativ = true;
}
if (Opto1in == HIGH or Opto2in == HIGH) {
return true;
}
return false;
}
boolean umpolen() {
digitalWrite(TAKT, !digitalRead(TAKT));
delay(90);
digitalWrite(takt, !digitalRead(TAKT));
delay(10);
return true;
}