#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Pin-Definitionen
const int motorPin = 3; // PWM Pin für den Motor
const int potentiometerPin = A0; // Analogeingang für das Potentiometer
const int switchPin = 2; // Schalter S6
const int ledRed = 4; // Statische rote LED
const int ledBlue = 5; // Statische blaue LED
const int ledRGBRed = 6; // Roter Kanal der RGB-LED
const int ledRGBGreen = 7; // Grüner Kanal der RGB-LED
const int ledRGBBlue = 8; // Blauer Kanal der RGB-LED
// I2C Adresse des LCD Displays
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(motorPin, OUTPUT);
pinMode(potentiometerPin, INPUT);
pinMode(switchPin, INPUT_PULLUP);
pinMode(ledRed, OUTPUT);
pinMode(ledBlue, OUTPUT);
pinMode(ledRGBRed, OUTPUT);
pinMode(ledRGBGreen, OUTPUT);
pinMode(ledRGBBlue, OUTPUT);
lcd.init();
lcd.backlight();
displayWelcomeMessage();
}
void loop() {
static bool motorState = false;
static int lastSpeedPercent = -1; // Hält die zuletzt angezeigte Geschwindigkeit
int potValue = analogRead(potentiometerPin);
int motorSpeed = map(potValue, 0, 1023, 0, 255);
int speedPercent = map(motorSpeed, 0, 255, 0, 100);
if (digitalRead(switchPin) == LOW) {
motorState = !motorState;
delay(500); // Entprellen
updateDisplay = true; // Display muss aktualisiert werden
}
if (motorState) {
analogWrite(motorPin, motorSpeed);
digitalWrite(ledRed, HIGH);
digitalWrite(ledBlue, LOW);
updateLEDRGB(motorSpeed);
} else {
analogWrite(motorPin, 0);
digitalWrite(ledRed, LOW);
digitalWrite(ledBlue, HIGH);
speedPercent = 0; // Setzt die Geschwindigkeit auf 0, wenn der Motor aus ist
updateDisplay = true; // Display muss aktualisiert werden
}
// Aktualisiert das Display nur, wenn sich die Daten geändert haben
if (lastSpeedPercent != speedPercent || updateDisplay) {
displayMotorInfo(motorState ? "Ein" : "Aus", speedPercent);
lastSpeedPercent = speedPercent;
updateDisplay = false;
}
}
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Pin-Definitionen
const int motorPin = 3; // PWM Pin für den Motor
const int potentiometerPin = A0; // Analogeingang für das Potentiometer
const int switchPin = 2; // Schalter S6
const int ledRed = 4; // Statische rote LED
const int ledBlue = 5; // Statische blaue LED
const int ledRGBRed = 6; // Roter Kanal der RGB-LED
const int ledRGBGreen = 7; // Grüner Kanal der RGB-LED
const int ledRGBBlue = 8; // Blauer Kanal der RGB-LED
// I2C Adresse des LCD Displays
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(motorPin, OUTPUT);
pinMode(potentiometerPin, INPUT);
pinMode(switchPin, INPUT_PULLUP);
pinMode(ledRed, OUTPUT);
pinMode(ledBlue, OUTPUT);
pinMode(ledRGBRed, OUTPUT);
pinMode(ledRGBGreen, OUTPUT);
pinMode(ledRGBBlue, OUTPUT);
lcd.init();
lcd.backlight();
displayWelcomeMessage();
}
void loop() {
static bool motorState = false;
int potValue = analogRead(potentiometerPin);
int motorSpeed = map(potValue, 0, 1023, 0, 255);
if (digitalRead(switchPin) == LOW) {
motorState = !motorState;
delay(500); // Entprellen
}
if (motorState) {
analogWrite(motorPin, motorSpeed);
digitalWrite(ledRed, HIGH);
digitalWrite(ledBlue, LOW);
updateLEDRGB(motorSpeed);
displayMotorInfo("Ein", motorSpeed);
} else {
analogWrite(motorPin, 0);
digitalWrite(ledRed, LOW);
digitalWrite(ledBlue, HIGH);
displayMotorInfo("Aus", 0);
}
}
void displayWelcomeMessage() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LAP Elektron.JJ");
lcd.setCursor(0, 1);
lcd.print("Ihr Name");
delay(5000);
}
void displayMotorInfo(String status, int speed) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Status: " + status);
lcd.setCursor(0, 1);
lcd.print("Drehzahl: " + String(map(speed, 0, 255, 0, 100)) + "%");
}
void updateLEDRGB(int speed) {
int speedPercent = map(speed, 0, 255, 0, 100);
if (speedPercent <= 50) {
// Grün
digitalWrite(ledRGBRed, LOW);
digitalWrite(ledRGBGreen, HIGH);
digitalWrite(ledRGBBlue, LOW);
} else if (speedPercent <= 70) {
// Blau
digitalWrite(ledRGBRed, LOW);
digitalWrite(ledRGBGreen, LOW);
digitalWrite(ledRGBBlue, HIGH);
} else {
// Rot
digitalWrite(ledRGBRed, HIGH);
digitalWrite(ledRGBGreen, LOW);
digitalWrite(ledRGBBlue, LOW);
}
}