Hallo Experten,
Erstkontakt somit bitte nicht Steinigen.
Es geht um einen Shot Timer für eine Lelit Mara X Siebträgermaschine.
Hab den Sketch? von Github bezogen, bekomme beim upload jedoch ständig die Fehlermeldung:
Compilation error: 'Adafruit_SSD1306' does not name a type
Das richtige Board und der Port sind ausgewählt, Arduino Nano. Das wars dann aber auch schon mit meinen Kenntnissen.
Ich hoffe mir kann hier jemand helfen.
Dan zeige dein Sketch (Programm), wir können nicht sehen auf dein Bildschirm und alle Glaskugel sind Defekt.
In der IDE auf Bearbeiten, Für Forum Kopieren und danach hier einfügen.
Dir fehlt die dazugehörige Lib.
Ich lad die immer als zip-File und bau die manuell ein. (SKETCH - BIBLIOTHEK EINBINDEN - ZIP-HINZUFÜGEN - )
Geht auch über den Manager ( STRG-SHIFT-I )
Und dort die richtige Bibliothek auswählen.
//Defines
#define SCREEN_WIDTH 128 //Width in px
#define SCREEN_HEIGHT 64 // Height in px
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // or 0x3D Check datasheet or Oled Display
#define BUFFER_SIZE 32
//Pins
int d5 = 5; //orange PIN 4 Mara TX to Arduino RX D5
int d6 = 6; //black PIN 3 Mara RX to Arduino TX D6
//Internals
long lastMillis;
int seconds = 0;
int lastTimer = 0;
long serialTimeout = 0;
char buffer[BUFFER_SIZE];
int index = 0;
//Mara Data
String maraData[7];
String* lastMaraData;
//Instances
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
SoftwareSerial mySerial(d5, d6);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
display.clearDisplay();
display.display();
Serial.begin(9600);
mySerial.begin(9600);
memset(buffer, 0, BUFFER_SIZE);
mySerial.write(0x11);
}
void getMaraData() {
/*
Example Data: C1.06,116,124,093,0840,1,0\n every ~400-500ms
Length: 26
[Pos] [Data] [Describtion]
0) C Coffee Mode (C) or SteamMode (V)
- 1.06 Software Version
1) 116 current steam temperature (Celsisus)
2) 124 target steam temperature (Celsisus)
3) 093 current hx temperature (Celsisus)
4) 0840 countdown for 'boost-mode'
5) 1 heating element on or off
6) 0 pump on or off
*/
while (mySerial.available()) {
serialTimeout = millis();
char rcv = mySerial.read();
if (rcv != '\n')
buffer[index++] = rcv;
else {
index = 0;
Serial.println(buffer);
char* ptr = strtok(buffer, ",");
int idx = 0;
while (ptr != NULL) {
maraData[idx++] = String(ptr);
ptr = strtok(NULL, ",");
}
lastMaraData = maraData;
}
}
if (millis() - serialTimeout > 6000) {
serialTimeout = millis();
mySerial.write(0x11);
}
}
void updateView() {
display.clearDisplay();
display.setTextColor(WHITE);
//HX
display.setCursor(2, 2);
display.setTextSize(2);
display.print(lastMaraData[3].toInt());
display.setTextSize(1);
display.print((char)247);
display.setTextSize(1);
display.print("C");
//Pump
display.setCursor(2, 30);
display.print("H");
if (lastMaraData[5].toInt() == 0)
display.drawCircle(17, 33, 6, WHITE);
else
display.fillCircle(17, 33, 5, WHITE);
display.setCursor(30, 30);
//Heat
display.print("P");
if (lastMaraData[6].toInt() == 0)
display.drawRect(40, 28, 10, 10, WHITE);
else
display.fillRect(40, 28, 10, 10, WHITE);
//Steam
display.setCursor(2, 50);
display.setTextSize(2);
display.print(lastMaraData[1].toInt());
display.setTextSize(1);
display.print((char)247);
display.setTextSize(1);
display.print("C");
display.drawLine(55, 0, 55, 68, WHITE);
display.setCursor(65, 15);
display.setTextSize(5);
//Timer
if (seconds > 3) {
String actual = String(seconds);
if (actual.length() < 2)
actual = "0" + actual;
display.print(actual);
} else if (lastTimer > 3) {
String last = String(lastTimer);
if (last.length() < 2)
last = "0" + last;
display.print(last);
} else {
display.print("00");
}
//Mode
display.setTextSize(1);
display.setCursor(120, 2);
display.print(lastMaraData[0].substring(0, 1));
display.display();
}
void loop() {
getMaraData();
int pumpState = lastMaraData[6].toInt();
if (pumpState == 1) {
if (millis() - lastMillis >= 1000) {
lastMillis = millis();
++seconds;
if (seconds > 99)
seconds = 0;
}
} else {
if (seconds != 0)
lastTimer = seconds;
seconds = 0;
}
updateView();
}
Das ist nur ein Stückle. Gib mal den link wo das ursprünglich beim github liegt.
Danke, download ist jedoch nur als raw file möglich.
Nein, das geht auch als zip.
Wenn Du auf den grünen Button "CODE" Klickst, download .zip
Brauchts aber noch Adafruit GFX dazu
ja hab ich. Sketch-Bibliothek einbinden- zip- hinzufügen da ist dann Ende. Files sind ausgeraut.
Das Kompiliert sauber
[code]
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>
//Defines
#define SCREEN_WIDTH 128 //Width in px
#define SCREEN_HEIGHT 64 // Height in px
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // or 0x3D Check datasheet or Oled Display
#define BUFFER_SIZE 32
//Pins
int d5 = 5; //orange PIN 4 Mara TX to Arduino RX D5
int d6 = 6; //black PIN 3 Mara RX to Arduino TX D6
//Internals
long lastMillis;
int seconds = 0;
int lastTimer = 0;
long serialTimeout = 0;
char buffer[BUFFER_SIZE];
int index = 0;
//Mara Data
String maraData[7];
String* lastMaraData;
//Instances
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
SoftwareSerial mySerial(d5, d6);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
display.clearDisplay();
display.display();
Serial.begin(9600);
mySerial.begin(9600);
memset(buffer, 0, BUFFER_SIZE);
mySerial.write(0x11);
}
void getMaraData() {
/*
Example Data: C1.06,116,124,093,0840,1,0\n every ~400-500ms
Length: 26
[Pos] [Data] [Describtion]
0) C Coffee Mode (C) or SteamMode (V)
- 1.06 Software Version
1) 116 current steam temperature (Celsisus)
2) 124 target steam temperature (Celsisus)
3) 093 current hx temperature (Celsisus)
4) 0840 countdown for 'boost-mode'
5) 1 heating element on or off
6) 0 pump on or off
*/
while (mySerial.available()) {
serialTimeout = millis();
char rcv = mySerial.read();
if (rcv != '\n')
buffer[index++] = rcv;
else {
index = 0;
Serial.println(buffer);
char* ptr = strtok(buffer, ",");
int idx = 0;
while (ptr != NULL) {
maraData[idx++] = String(ptr);
ptr = strtok(NULL, ",");
}
lastMaraData = maraData;
}
}
if (millis() - serialTimeout > 6000) {
serialTimeout = millis();
mySerial.write(0x11);
}
}
void updateView() {
display.clearDisplay();
display.setTextColor(WHITE);
//HX
display.setCursor(2, 2);
display.setTextSize(2);
display.print(lastMaraData[3].toInt());
display.setTextSize(1);
display.print((char)247);
display.setTextSize(1);
display.print("C");
//Pump
display.setCursor(2, 30);
display.print("H");
if (lastMaraData[5].toInt() == 0)
display.drawCircle(17, 33, 6, WHITE);
else
display.fillCircle(17, 33, 5, WHITE);
display.setCursor(30, 30);
//Heat
display.print("P");
if (lastMaraData[6].toInt() == 0)
display.drawRect(40, 28, 10, 10, WHITE);
else
display.fillRect(40, 28, 10, 10, WHITE);
//Steam
display.setCursor(2, 50);
display.setTextSize(2);
display.print(lastMaraData[1].toInt());
display.setTextSize(1);
display.print((char)247);
display.setTextSize(1);
display.print("C");
display.drawLine(55, 0, 55, 68, WHITE);
display.setCursor(65, 15);
display.setTextSize(5);
//Timer
if (seconds > 3) {
String actual = String(seconds);
if (actual.length() < 2)
actual = "0" + actual;
display.print(actual);
} else if (lastTimer > 3) {
String last = String(lastTimer);
if (last.length() < 2)
last = "0" + last;
display.print(last);
} else {
display.print("00");
}
//Mode
display.setTextSize(1);
display.setCursor(120, 2);
display.print(lastMaraData[0].substring(0, 1));
display.display();
}
void loop() {
getMaraData();
int pumpState = lastMaraData[6].toInt();
if (pumpState == 1) {
if (millis() - lastMillis >= 1000) {
lastMillis = millis();
++seconds;
if (seconds > 99)
seconds = 0;
}
} else {
if (seconds != 0)
lastTimer = seconds;
seconds = 0;
}
updateView();
}
[/code]
Kompiliert für Uno :
Der Sketch verwendet 18880 Bytes (58%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 742 Bytes (36%) des dynamischen Speichers, 1306 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
bei mir nicht...
Wo klemmts?
Wurde die Adafruit GFX eingebunden? ohne der funktioniert die SSD1306 nicht.
Im Normalfall:
Mit dem Browser das zip downloaden.
Das liegt dann im downloadordner.
Dann in der IDE das hinzufügen via zip auswählen und auf der rechten Seite von dem dann sich öffnenden Fenster den downloadordner auswählen.
Auf der rechten Seite sind dann alle .zip files zu sehen. Da das richtige auswählen.
Oder über die online-methode:
SKETCH - BIBLIOTHEK EINBINDEN - Bibliotheksverwalter
Nen Moment warten...
Und dann oben rechts SSD1306 eingeben und nen Moment warten...
Bei mir ist es die zweite - und schon installiert.
(Ich bin dann mal weg für heut)
Die GFX muss mit rein
Die Adafruit GFX findest du ach so wie @my_xy_projekt gezeigt hat
selbst da bekomme ich die Fehlermeldung
Du must schon beide Bibliotheken installieren.
danach mein Sketch kopieren und testen.
Die IDE vorher lehren
Danach einfügen
danke dir, gfx ist drin.