- Offizieller Beitrag
Hallo zusammen, ich sitze schon viel zu lange vor nem Problem, welches eigentlich keins sein sollte. An nem Arduino Uno hängt ein 0,96" SSD1306 Display (und 6 Fußschalter). Der Example Sketch funktioniert tadellos. Nun wollt ich, leichtgläubig wie ich bin, auf diesem auch was ausgeben lassen. ich scheiter schon an nem simplem Text per Knopfdruck. Es scheint, als wenn das Display nur angesprochen werden kann, wenn die Aufrufe dafür im setup() Teil erfolgen. Der Punkt aus Zeile 40 wird jedenfalls angezeigt. Wenn ich die Zeilen 50-56 in den Setup Bereich hoch hole, funktioniert das auch.
Wie kriege ich es hin, auf Knopfdruck einen Text anzeigen zu lassen?
C
#include "PinChangeInterrupt.h"
#include "MIDI.h"
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define button1 4
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
volatile unsigned long alteZeit1=0, entprellZeit1=20;
struct HairlessMidiSettings : public midi::DefaultSettings
{
static const bool UseRunningStatus = false;
static const long BaudRate = 115200;
};
MIDI_CREATE_CUSTOM_INSTANCE(HardwareSerial, Serial, MIDI, HairlessMidiSettings);
void setup(){
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
delay(2000); // Pause for 2 seconds
// Clear the buffer
display.clearDisplay();
// Draw a single pixel in white
display.drawPixel(10, 10, SSD1306_WHITE);
display.display();
MIDI.begin();
attachPCINT(digitalPinToPCINT(button1),button1_func,CHANGE);
}
void button1_func(void) {
if((millis() - alteZeit1) > entprellZeit1) {
// innerhalb der entprellZeit nichts machen
MIDI.sendControlChange(0,127,1);
alteZeit1 = millis(); // letzte Schaltzeit merken
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F("Hello, world!"));
display.display();
delay(2000);
}
}
Alles anzeigen