// https://github.com/olikraus/u8g2/wiki
//------------------------------
// #include <Adafruit_SSD1306.h>
// #include <Adafruit_GFX.h>
//------------------------------
#include <Arduino.h>
#include <U8g2lib.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 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//------------------------------
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C
//U8G2_SSD1306_128X64_NONAME_HW_SW_I2C
//display(U8G2_R0,/*clock=*/14,/*data*/12,U8X8_PIN_NONE);
//u8g2(U8G2_R0,/*clock=*/14,/*data*/12,U8X8_PIN_NONE);
//U8X8_SSD1306_128X64_NONAME_F_SW_I2C display(U8G2_R0,/*clock=*/14,/*data*/12, U8X8_PIN_NONE);
U8G2_SSD1306_128X64_NONAME_F_SW_I2C display(U8G2_R0, /* clock=*/ 14, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE);
//U8X8_SSD1306_128X64_NONAME_HW_I2C display(U8G2_R0,/*clock=*/14,/*data*/12, U8X8_PIN_NONE);
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 14, /* data=*/ 12); // ESP32 Thing, HW I2C with pin remapping
//------------------------------
const int RE1 = 0; // 5;
const int RE2 = 16; // 0;
const int RE3 = 17; // 2;
const int RE4 = 5; // 13;
const int RE5 = 18; // 1;
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 zuendung = false;
boolean positiv = false; // Positive Halbwelle
boolean negativ = false; // Negative Halbwelle
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 (;;);
// }
//------------------------------
display.begin();
display.setPowerSave(0);
display.setFont(u8x8_font_pxplusibmcgathin_f);
//------------------------------
// 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);
boolean zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 30;
}
}
}
// 50mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 50) {
umpolen();
digitalWrite(RE2,HIGH);
delay(200);
digitalWrite(RE2,LOW);
delay(100);
boolean zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 50;
}
}
}
// 100mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 100) {
umpolen();
digitalWrite(RE3,HIGH);
delay(200);
digitalWrite(RE3,LOW);
delay(100);
boolean zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 100;
}
}
}
// 150mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 150) {
umpolen();
digitalWrite(RE4,HIGH);
delay(200);
digitalWrite(RE4,LOW);
delay(100);
boolean zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 150;
}
}
}
// 250mA Zündung
for (int d = 0; d < 2; d++) {
if (gezuendet == 0 or gezuendet == 250) {
umpolen();
digitalWrite(RE5,HIGH);
delay(200);
digitalWrite(RE5,LOW);
delay(100);
boolean zuendung = OptosAbfragen();
if (zuendung == true) {
gezuendet = 250;
}
}
}
//display.firstPage();
//display.clearDisplay();
display.clearBuffer();
//display.setFont(u8g2_font_7x14B_tr);
if (DEBUG) {
if (!digitalRead(Opto1) == HIGH) {
if (DEBUG) {
display.setCursor(0, 4);
display.print("Opto1=1 (Positive Halbwelle");
}
}
if (!digitalRead(Opto2) == HIGH) {
if (DEBUG) {
display.setCursor(0, 5);
display.print("Opto2=1 (Negative Halbwelle");
}
}
}
// Display Ausgabe
// https://github.com/olikraus/u8g2/wiki/u8g2reference
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// display.setCursor(0, 0);
display.setCursor(0, 0);
display.setCursor(0, 1);
if (gezuendet > 0) {
display.setCursor(0, 2);
display.print("Gezündet mit ");
display.print(gezuendet);
display.print(" mA");
display.setCursor(0, 2);
display.print("Typ: ");
if (positiv != negativ) {
display.print("Thyristor");
} else {
display.print("Triac");
}
}
digitalWrite(TAKT, LOW);
digitalWrite(takt, LOW);
display.setCursor(0, 3);
if (positiv == false and negativ == false) {
display.print("Kein Bauteil oder defekt");
} else {
display.print("Bauteil OK!");
}
display.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;
}