Guten Tag,
dies ist meine Erste Frage im Forum, bitte verzeiht es mir, falls ich Formatierungsfehler oder Ähnliches mache.
Ich habe ein Programm in dem ich u.a. ein 0,91" OLED Display (128*32px) zur Ausgabe einiger Daten ansteuern möchte (mit einem Arduino RP2040 Connect).
Ich benutze den Arduino IOT Web Editor, da ich das Dashboard und die Onlinefuktion brauche.
Dann komm komme ich immer zu folgendem Problem:
/mnt/create-efs/webide/42/86/hier ist ein Pfad/libraries_v2/Adafruit SSD1306/Adafruit_SSD1306.cpp:42:10: fatal error: pgmspace.h: No such file or directory
#include <pgmspace.h>
Ich habe mich schon Stundenlang durchs Forum geschlagen, und etliche YT-Tutorials gesehen aber es will einfach nicht.
Ich probiere hier mal mein Code einzubinden
/*
Sketch generated by the Arduino IoT Cloud Thing "Untitled"
https://create.arduino.cc/cloud/things/CLOUDID
Arduino IoT Cloud Variables description
The following variables are automatically generated and updated when changes are made to the Thing
int rpm;
Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/
#include <Arduino.h> // Bibliothek für Arduino Funktionen
//-------Display-------
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <gfxfont.h>
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_WIDTH 128 // OLED display Breite, in pixels
#define SCREEN_HEIGHT 64 // OLED display Höhe, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//------ESC--------
#include <Servo.h> //Hinzufügen der Servobibliothek. ESC aus elektrischer Sicht in gleicher Weise wie ein Servo angesteuert wird.
Servo ESC; // Der ESC-Controllerwird als Objekt mit dem Namen "ESC" festgelegt.
#include "thingProperties.h"
byte Pin_RPM = 2; //Interrupt Pin
volatile unsigned long RPM_T2, RPM_Count; // Volatile Variablen für die Drehzahlberechnung
unsigned long RPM, RPM_T1; // Variablen für die Drehzahlberechnung
unsigned long oldMillis, actMillis, letzteMillis; // Variablen für die Zykluserstellung
const long cycle = 50; // Konstante Zykluszeit
int intervall = 10000, Test=0;
void setup() {
//-----Arduino IOT Vorgegeben Anfang------------------------------
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
//-----Arduino IOT Vorgegeben Ende-----------------------------
//-----ESC-----
ESC.attach(8, 1000, 2000); // ESC an Pin 8, und kann zwischen 1000 und 2000 senden; muss so für ESC
//ESC.write(180);
pinMode(Pin_RPM, INPUT); //------Drehzahlpin
RPM_T1 = 0; // Variablen initialisieren
RPM_T2 = 0;
RPM_Count = 0;
attachInterrupt(digitalPinToInterrupt(Pin_RPM), Drehzahl, FALLING); //Pin der durch einen Hallsensor interruptet wird
//---------Display
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C address = 0x3C
delay(1000);
display.clearDisplay(); //aus Beispiel wie man Oled ansteuert
display.setTextSize(1); //aus Beispiel wie man Oled ansteuert
display.setTextColor(WHITE); //aus Beispiel wie man Oled ansteuert
display.setCursor(0, 0); //aus Beispiel wie man Oled ansteuert
display.print("Test"); //aus Beispiel wie man Oled ansteuert
display.display();
}
void loop() {
ArduinoCloud.update();
// Your code here
//actMillis = millis(); // Aktuelle Systemzeit für Zyklus zuweisen
//oldMillis = actMillis; // Neue Zeit für den Zyklus zuweisen (Systemzeit schreitet voran)
Drehzahl_Auswertung();
// display.setFont(System5x7); // Auswahl der Schriftart
// display.clear(); //Löschen der aktuellen Displayanzeige
// display.println("Viel"); //Text in der ersten Zeile. "Println" sorgt dabei für einen Zeilensprung.
// display.print("Erfolg!!!"); // Text in der zweiten Zeile. Da es keine dritte Zeile gibt, wird hier kein Zeilenumsprung benötigt.
//delay (2000);
}
/*void setup1() {
}
void loop1() {
}*/
void ESCStart() { //mein Code für mein eigentliches Projekt
while ((millis() - letzteMillis) < (intervall));
{
ESC.write(180); // Der endgültige Wert für den ESC wird an den ESC gesendet. Der ESC nimmt das Signal an dieser Stelle auf und steuert den Motor entsprechend der gesendeten Werte an.
}
letzteMillis = millis();
ESC.write(0);
while ((millis() - letzteMillis) < (intervall));
{
ESC.write(0);
}
while ((millis() - letzteMillis) < intervall - 8000);
{
}
}
void Drehzahl () { //mein Code für mein eigentliches Projekt
RPM_Count++; // Zähler inkrementieren
RPM_T2 = millis(); // Neue Zeit zuweisen (für Berechnung Drehzahl)
}
void Drehzahl_Auswertung() { //mein Code für mein eigentliches Projekt
if (RPM_T2 > RPM_T1) { // Bedingung: Wenn Zeit vergangen ist Drehzahl berechnen
rpm = (unsigned)(long)(60000 * RPM_Count / (RPM_T2 - RPM_T1)); // Drehzahl berechnen (Anzahl Impulse geteilt durch vergangene Zeit, Multiplikator: (60 s/min * 1000 s/ms)/ 6 Impulse/rpm)
RPM_T1 = RPM_T2; // Neue Zeit gleich alte Zeit (Systemzeit schreitet voran)
RPM_Count = 0; // Zähler zurücksetzen
}
else {
// RPM = 0;
}
}
/*
Since Rpm is READ_WRITE variable, onRpmChange() is
executed every time a new value is received from IoT Cloud.
*/
void onRpmChange() {
// Add your code here to act upon Rpm change
}
Ich bedanke mich schonmal im voraus, wenn ihr mehr Infos braucht bitte bescheid sagen