Added tones and octopint

This commit is contained in:
Tomislav Kopić 2024-11-01 18:45:17 +01:00
parent 8334c5115c
commit ec6af93cfe
4 changed files with 213 additions and 61 deletions

112
src/functions.h Normal file
View File

@ -0,0 +1,112 @@
#include <Wire.h>
#include "config.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
unsigned long middle_long_press_started = 0;
unsigned long right_long_press_started = 0;
bool is_display_off = false;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Initialize display, buttons and buzzer
void initSystems() {
pinMode(PIN_BTN_L, INPUT);
pinMode(PIN_BTN_M, INPUT);
pinMode(PIN_BTN_R, INPUT);
pinMode(PIN_BUZZER, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// Initialize the SSD1306 display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adjust I2C address if needed
for(;;); // Don't proceed, loop forever
}
// Rotate the display 180 degrees
display.setRotation(2);
// Clear the display buffer
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.display();
}
// Connect to WiFi
void connectToWifi() {
Serial.println("Connecting to WiFi...");
display.clearDisplay();
display.setCursor(0, 0);
display.print("Connecting to WiFi...");
display.display();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
int attemptCount = 0;
while (WiFi.status() != WL_CONNECTED && attemptCount < 20) { // Timeout after 20 attempts
delay(500);
Serial.print(".");
display.print(".");
display.display();
attemptCount++;
}
// Check if connected
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to WiFi!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Display connection success and IP address
display.clearDisplay();
display.setCursor(0, 0);
display.print("WiFi Connected!");
display.setCursor(0, 10);
display.print("IP: ");
display.print(WiFi.localIP());
display.display();
} else {
Serial.println("\nFailed to connect to WiFi.");
display.clearDisplay();
display.setCursor(0, 0);
display.print("WiFi Connection");
display.setCursor(0, 10);
display.print("Failed");
display.display();
}
}
void commonButtonHandler() {
unsigned long currentMillis = millis();
bool middleLeftPressed = (digitalRead(PIN_BTN_M) == HIGH) && (digitalRead(PIN_BTN_L) == HIGH);
bool rightPressed = (digitalRead(PIN_BTN_R) == HIGH);
// Handle middle + left button long press for reset
if (middleLeftPressed) {
if ((currentMillis - middle_long_press_started) > 2000) {
ESP.restart(); // Restart if the buttons are pressed for more than 2 seconds
}
} else {
middle_long_press_started = currentMillis; // Reset timer if the buttons are not pressed
}
if (rightPressed) {
if ((currentMillis - right_long_press_started) > 2000) {
if (!is_display_off) {
display.ssd1306_command(SSD1306_DISPLAYOFF); // Turn off display
is_display_off = true;
}
} else if (is_display_off) {
display.ssd1306_command(SSD1306_DISPLAYON); // Turn on display
is_display_off = false;
}
} else {
right_long_press_started = currentMillis;
}
}

View File

@ -1,73 +1,20 @@
#include "config.h"
#include <Arduino.h> #include <Arduino.h>
#include <Wire.h> #include <Wire.h>
#include <Adafruit_GFX.h> #include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> #include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h> #include "functions.h"
#include "config.h" #include "octoprint.h"
// Initialize display with defined dimensions and reset pin
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() { void setup() {
Serial.begin(115200);
Serial.println("Power On");
// Initialize the SSD1306 display initSystems();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adjust I2C address if needed playTune(1);
Serial.println("SSD1306 allocation failed"); connectToWifi();
for(;;); // Don't proceed, loop forever displayOctoPrintVersion(display);
}
// Rotate the display 180 degrees
display.setRotation(2);
// Clear the display buffer
display.clearDisplay();
// Display initial message
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Connecting to WiFi...");
display.display();
// Connect to WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
int attemptCount = 0;
while (WiFi.status() != WL_CONNECTED && attemptCount < 20) { // Timeout after 20 attempts
delay(500);
Serial.print(".");
display.print(".");
display.display();
attemptCount++;
}
// Check if connected
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to WiFi!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// Display connection success and IP address
display.clearDisplay();
display.setCursor(0, 0);
display.print("WiFi Connected!");
display.setCursor(0, 10);
display.print("IP: ");
display.print(WiFi.localIP());
display.display();
} else {
Serial.println("\nFailed to connect to WiFi.");
display.clearDisplay();
display.setCursor(0, 0);
display.print("WiFi Connection");
display.setCursor(0, 10);
display.print("Failed");
display.display();
}
} }
void loop() { void loop() {
// Nothing to do here for now commonButtonHandler();
} }

48
src/octoprint.h Normal file
View File

@ -0,0 +1,48 @@
#include "config.h"
#include <OctoPrintAPI.h>
#include <WiFiClient.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "tunes.h"
void playTune(int tuneNumber);
WiFiClient client;
String printerOperational;
String printerPaused;
String printerPrinting;
String printerReady;
String printerText;
String printerHotend;
String printerTarget;
String payload;
OctoprintApi api(client, (char*)OCTOPRINT_HOST, OCTOPRINT_PORT, OCTOPRINT_API_KEY);
// Function to fetch and display OctoPrint version
void displayOctoPrintVersion(Adafruit_SSD1306& display) {
if (api.getOctoprintVersion()) {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print("OctoPrint Version:");
display.setCursor(0, 10);
display.print(api.octoprintVer.octoprintServer);
display.display(); // Update the display
} else {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.setTextColor(WHITE);
display.print("Failed to get");
display.setCursor(0, 10);
display.print("OctoPrint version.");
display.display();
playTune(3);
}
}

45
src/tunes.h Normal file
View File

@ -0,0 +1,45 @@
#include "config.h"
#include <Arduino.h>
// Define melodies and their durations
int melody1[] = { 440, 523, 659, 587 }; // Happy tune
int noteDuration1[] = { 100, 50, 100, 150 };
int melody2[] = { 587, 659, 740, 659 }; // Tune 2
int noteDuration2[] = { 150, 100, 150, 100 };
int melody3[] = { 440, 392 }; // Sad Tune
int noteDuration3[] = { 200, 150 };
// Function to play a specified tune
void playTune(int tuneIndex) {
int* melody = nullptr; // Use pointer instead of array
int* noteDuration = nullptr; // Use pointer instead of array
int melodySize = 0; // To store the size of the melody
switch(tuneIndex) {
case 1:
melody = melody1;
noteDuration = noteDuration1;
melodySize = sizeof(melody1) / sizeof(melody1[0]);
break;
case 2:
melody = melody2;
noteDuration = noteDuration2;
melodySize = sizeof(melody2) / sizeof(melody2[0]);
break;
case 3:
melody = melody3;
noteDuration = noteDuration3;
melodySize = sizeof(melody3) / sizeof(melody3[0]);
break;
default:
return; // Invalid tune index
}
for (int i = 0; i < melodySize; i++) {
tone(PIN_BUZZER, melody[i], noteDuration[i]);
delay(noteDuration[i] + 20);
noTone(PIN_BUZZER); // Stop the tone
}
}