Guten Tag alle zusammen,
ich hätte eine Frage an die Community. Leider komme ich nicht weiter.
Ich habe einen Code für ein Wemos D1 mini ESP32 geschrieben, um eine Modelleisenbahn zu steuern. Zuvor hatte ich einen ESP8266 verwendet, jedoch auf ESP 32 umgestellt da hier über die Arduino IoT Cloud over the air updates möglich sind.
Nun habe ich das Problem, das wenn ich den Schieberegler zur Steuerung der Geschwindigkeit betätige kein PWM Signal am PIN 17 anliegt.
Ein PWM Signal in der Loop Funktion funktioniert einwandfrei.
Anbei der Code den ich geschrieben habe.
Es wäre super nett, wenn mir jemand auf die Sprünge helfen könnte.
#include "thingProperties.h"
#include "Arduino.h"
const int pwmFreq = 15000;
const int pwmChannel = 1;
const int res = 8; // 2^8 = 256
const int en1 = 22; // forward
const int en2 = 21; // backwards
const int enA = 17; // speed
const int statusLed = 18; // connected to Arduino IoT cloud
const int led1 = 16; // driving light
unsigned long previousMillis = 0;
int speedOld = 0;
int speed = 0;
int dutyCycle = 0;
void setup() {
Serial.begin(9600);
delay(1500);
ledcSetup(pwmChannel, pwmFreq, res);
ledcAttachPin(17, pwmChannel);
//ledcSetup(2, pwmFreq, res);
//ledcAttachPin(19, 2);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
pinMode(en1, OUTPUT);
pinMode(en2, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(statusLed, OUTPUT);
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
digitalWrite(enA, 0);
Serial.println("Starting up!");
forward = false;
backwards = false;
sliderValue = false;
light = false;
}
void loop() {
ArduinoCloud.update();
ledcWrite(pwmChannel,dutyCycle);
// Your code here
}
void onBackwardsChange() {
if (backwards) {
digitalWrite(en1, LOW);
digitalWrite(en2, HIGH);
Serial.println("Rückwärts");
}
else {
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
Serial.println("STOP");
}
if (backwards && forward) {
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
Serial.println("EMERGENCY STOP");
}
}
void onForwardChange() {
if (forward) {
digitalWrite(en1, HIGH);
digitalWrite(en2, LOW);
Serial.println("Vorwärts");
}
else {
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
Serial.println("STOP");
}
if (backwards && forward) {
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
Serial.println("EMERGENCY STOP");
}
}
void onLightChange() {
digitalWrite(led1, light ? HIGH : LOW);
Serial.println(light ? "LIGHT ON" : "LIGHT OFF");
}
void onSliderValueChange() {
speed = map(sliderValue, 0, 100, 0, 255);
if (speed != speedOld) {
if (speed > speedOld) {
// Wenn der aktuelle Wert höher als der "Urzustand" ist, erhöhe die Geschwindigkeit
for (int dutyCycle = speedOld; dutyCycle <= speed; dutyCycle++) {
ledcWrite(pwmChannel, dutyCycle);
Serial.println(dutyCycle, '\n');
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 100) {
previousMillis = currentMillis;
}
}
}
else if (speed < speedOld) {
// Wenn der aktuelle Wert niedriger als der "Urzustand" ist, verringere die Geschwindigkeit
for (int dutyCycle = speedOld; dutyCycle >= speed; dutyCycle--) {
ledcWrite(pwmChannel, dutyCycle);
Serial.println(dutyCycle, '\n');
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 100) {
previousMillis = currentMillis;
}
}
}
speedOld = speed;
}
}
void onStatusChange() {
if (!ArduinoCloud.connected()) {
status = false;
digitalWrite(statusLed, LOW);
Serial.println("Not connected to Arduino IoT Cloud");
digitalWrite(en1, LOW);
digitalWrite(en2, LOW);
Serial.println("EMERGENCY STOP");
}
else {
status = true;
digitalWrite(statusLed, HIGH);
Serial.println("Connected to Cloud");
}
}