Hallo Leute,
ich habe hier ein sehr seltsames Problem mit 2 verschiedenen OLED Displays
Ich habe mir einen Sketch für einen Arduino NANO erstellt für die Auswertung eines inkrementellen Drehgebers an eine WABECO Bohrständer (inspiriert und modifiziert von Offy's Blog Digitaler Bohrtiefenmesser für Deinen Wabeco Bohrständer - YouTube ).
mit einem 0.96" AZ Delivery Display funktioniert der Sketch tadellos ohne Probleme - soweit so gut.
Da dieses Anzeige ein wenig klein und meine Augen nicht mehr die besten sind, dachte ich mir ich baue ein 1,3" OLEd auch von AZ einfach mal statt des 0.96" ein.
und jetzt kommts - sketch hängt manchmal beim einschalten(kommt über die reine "Bohrtiefe in mm" Anzeige nicht raus) und erst nach drücken des reset button und rot aufleuchten der L Led beginnt er wieder richtig anzuzeigen. Auch sehr seltam wenn ich den seriellen monitor/oder plotter aktiviere dann beginnte es auch wieder richtig anzuzeigen. Das ganze passiert aber nur wenn ich die leitung des "Nullstelltasters"=D4 gegen GND anstecke. Ich habe es auch schon mit einem 10k Pullup vom SCL/A5 Anschluss versucht, das hilft zwar am Steckbrett, nicht aber wenn die Schaltung dann eingebaut wird und die Bohrmaschine am Bohrständer daneben läuft. Der Fehler ist auch unnachvollziehbar abhängig ob ich den USB Anschluss oder direkte 5v/2,5A zur Spannungsversorgung verwende.
Ich habe jetzt Nächte damit verbracht alle Varianten zu Testen und in vielen Blogs nachzulesen was denn das Problem sein könnte, bin aber mit meinem bescheidenen Latein am Ende.
Bitte um ein paar hints wie ich meine Augen schonen und doch das grössere Display einsetzten kann.
Ich habe auch den Sketch noch reinkopiert, bitte um Nachsicht wenn ich da was falscjh mache , es ist mein erster Sketch und mein erster Forumeintrag
Danke Armin,
//variablen
volatile long temp ; //This variable will increase or decrease depending on the rotation of encoder
double mmLength = 0;
double counter = 0;
#include <Arduino.h>
#include <U8x8lib.h>
U8X8_SH1106_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
//umrechnungsfaktor impulse -> cm
#define CALIBRATION 0.0458333
void setup() {
Serial.begin (9600);
u8x8.begin();
u8x8.setPowerSave(0);
pinMode(4, INPUT_PULLUP);// Pin 4 als Input für nullen definieren
pinMode(2, INPUT_PULLUP); // internal pullup input pin 2
pinMode(3, INPUT_PULLUP); // internal pullup input pin 3
//Setting up interrupt
//A rising pulse from encodenren activated ai0(). AttachInterrupt 0 is DigitalPin nr 2 on moust Arduino.
attachInterrupt(0, ai0, RISING);
//B rising pulse from encodenren activated ai1(). AttachInterrupt 1 is DigitalPin nr 3 on moust Arduino.
attachInterrupt(1, ai1, RISING);
}
void umrechnung()
{
mmLength = counter * CALIBRATION;
}
void loop()
{
u8x8.setFont(u8x8_font_8x13B_1x2_f);
u8x8.setCursor(4,0);
u8x8.print("Bohrtiefe");
u8x8.setCursor(6,2);
u8x8.print("in mm");
mmLength = counter * CALIBRATION;
u8x8.setCursor(1,5);
u8x8.setFont(u8x8_font_courB18_2x3_f);
//u8x8.setFont(u8x8_font_8x13B_1x2_f);
if(mmLength >= 0 && mmLength < 10){
u8x8.print(" ");
}
if(mmLength < 0 && mmLength > -10){
u8x8.print(" ");
}
if(mmLength > 10 && mmLength < 100){
u8x8.print(" ");
}
if(mmLength < -10 && mmLength > -100){
u8x8.print(" ");
}
if(mmLength > 100){
u8x8.print(" ");
}
if(mmLength < -100){
u8x8.print("");
}
u8x8.print(mmLength);
// nullen wenn pin4 auf low
if(!digitalRead(4)){
counter = 0;
delay (1000);
}
// Ausgabe des Wertes am serial Monitor
Serial.println (mmLength);
}
void ai0() {
// ai0 is activated if DigitalPin nr 2 is going from LOW to HIGH
// Check pin 3 to determine the direction
if(digitalRead(3)==LOW) {
counter++;}
else {
counter--;
}
}
void ai1() {
// ai0 is activated if DigitalPin nr 2 is going from LOW to HIGH
// Check with pin 2 to determine the direction
if(digitalRead(2)==LOW) {
counter--;
}else {
counter++;
}
}