Hallo Allerseits
Ich bin neu hier im Forum und möchte mich deshalb mal kurz vorstellen:
Mein Name ist Erwin, ich komme aus der Schweiz, in meiner Freizeit bin gerne mal was am basteln und experimentieren. Programmiertechnisch habe ich bisher einige Projekte in VBA (Excel , Access) umgesetzt, in Python(RaspberryPi) habe ich auch schon ein zwei kleine Projekte umgesetzt.
Mit Arduino habe ich mich jedoch bisher nie beschäftigt. Da dies doch eine neue Programmiersprache für mich ist, habe ich mal versucht ein kleines Programm (LED-Blinker Taster-gesteuert) zu schreiben und das so aufgebaut, wie ich es es für Sinnvoll erachte.
Jetzt wüsste ich gerne von euch Profis, ob es Sinn macht auf Arduino so zu programmieren oder entstehen da früher oder später bei komplexeren Programmen Probleme?
Ich möchte mir nicht von Anfang falsche Methoden angewöhnen.
Vielen Dank schon mal für eure Bemühungen mir den Einstieg in die Arduino-Welt zu erleichtern.
Hier mein erster Code den ich geschrieben habe, läuft auf einen Arduino Uno (China Kopie)
const int led_Pin[] = { 13 }; //Pin Nummern für Led
const int taster_Pin[] = { 2, 8 }; //Pin Nummern für Taster
const int entprellZeitMs = 40; //Wert für Taster-Entprellung
int intervall = 500; //Wert für blinker_stabil
int ledOnMs = 20; //Wert für blinker_instabil
int ledOffMs = 980; //Wert für blinker_instabil
int modus = 1; //Wert wird durch schalter2 gesetzt
bool led_Status[] = { LOW }; //Wert sollte gleiczeitig mit digitalWrite() gesetzt
bool taster_Status[] = { HIGH, HIGH }; //Werte werden gelesen
bool schalter_Status[] = { LOW }; //Wert wird von schalter1 gesetzt
bool taster_Gedrueckt[] = { LOW, LOW }; //Wert für Taster-Entprellung
unsigned long letzteSchaltungMs[] = { 0, 0 }; //Wert für Taster-Entprellung
unsigned long letzerWechselMs = 0; //Wert für blinker_stabil & blinker instabil
unsigned long aktuelleMs = 0; //Wert für blinker_stabil & blinker instabil
void setup() {
// put your setup code here, to run once:
pinMode(led_Pin[0], OUTPUT);
pinMode(taster_Pin[0], INPUT_PULLUP);
pinMode(taster_Pin[1], INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
tasterCheck(0);
tasterCheck(1);
lichtmodi();
//schalter1_aktion();
}
//____________________________
//
//* * * Taster Aktionen * * *
//____________________________
void tasterAktion(int ArrNr) { //Auswahl welche aktion durgeführt werden soll(welcher Taster wurde gedrückt)
switch (ArrNr) {
case 0:
taster1_aktion();
break;
case 1:
taster2_aktion();
break;
// case 2:
// taster3_aktion();
// break;
}
}
void taster1_aktion() {
schalter2(); //Taster als umschalter aktivieren
}
void taster2_aktion() {
modus = 1; //LED wird ausgeschalten
}
// void taster3_aktion() {
// }
// _____________________________
//
// * * * Taster entprellen * * *
// _____________________________
void tasterCheck(long taster_Nr) {
taster_Status[taster_Nr] = digitalRead(taster_Pin[taster_Nr]); //Pin auslesen
if (taster_Status[taster_Nr] == LOW) {
letzteSchaltungMs[0] = millis(); //solange der Taster gedrückt wird, wir diesert Wert angepasst
taster_Gedrueckt[taster_Nr] = HIGH; //solange der Taster gedrückt wird, wir diesert Wert angepasst
}
//Schaltung für Taster wird beim loslassen aktiviert (Taste lange drücken wird nur einfach gewertet)
if (((millis() - letzteSchaltungMs[0]) > entprellZeitMs) && (taster_Gedrueckt[taster_Nr] == HIGH)) {
taster_Gedrueckt[taster_Nr] = LOW; //Variable zurücksetzen
tasterAktion(taster_Nr); //Aktion nach Tastendruck auslösen
}
}
//_____________________________
//
//* * * Software Schalter * * * z.B. zum umwandeln eines Tasters in einen Schalter
//_____________________________
void schalter1() { //einfacher umschalter
if (schalter_Status[0] == LOW) {
schalter_Status[0] = HIGH;
} else {
schalter_Status[0] = LOW;
}
}
void schalter2() { //mehrfach Umschalter (verschiedene Modi)
if (modus < 6) {
modus++;
} else {
modus = 1;
}
}
//____________________________
//
//* * * Schalter Aktionen * * *
//____________________________
void schalter1_aktion() { //es wird zwischen zwei Funktionen umgeschalten
if (schalter_Status[0] == HIGH) {
blinker_stabil(intervall);
} else {
blinker_instabil(ledOnMs, ledOffMs);
}
}
//________________________________________________________________
//
//* * * Gleichmässiger Blinker On und Off Zeiten sind gleich * * *
//________________________________________________________________
void blinker_stabil(long wechsel) { //LED-Blinker on/off Zeiten sind gleich
aktuelleMs = millis();
if ((aktuelleMs - letzerWechselMs) > wechsel) {
letzerWechselMs = aktuelleMs;
if (led_Status[0] == LOW) {
led_Status[0] = HIGH;
} else {
led_Status[0] = LOW;
}
digitalWrite(led_Pin[0], led_Status[0]);
}
}
//______________________________________________________________________
//
//* * * Ungleichmässiger Blinker On und Off Zeiten unterschiedlich * * *
//______________________________________________________________________
void blinker_instabil(long OnMs, long OffMs) {
aktuelleMs = millis();
if (led_Status[0] == HIGH) {
if ((aktuelleMs - letzerWechselMs) > OnMs) {
letzerWechselMs = aktuelleMs;
led_Status[0] = LOW;
}
} else {
if ((aktuelleMs - letzerWechselMs) > OffMs) {
letzerWechselMs = aktuelleMs;
led_Status[0] = HIGH;
}
digitalWrite(led_Pin[0], led_Status[0]);
}
}
//_______________________________________________
//
//* * * Unterschiedliche Lichtmodi schalten * * *
//_______________________________________________
void lichtmodi() {
if (modus == 1) {
lichtmodus1();
}
if (modus == 2) {
lichtmodus2();
}
if (modus == 3) {
lichtmodus3();
}
if (modus == 4) {
lichtmodus4();
}
if (modus == 5) {
lichtmodus5();
}
if (modus == 6) {
lichtmodus6();
}
}
//______________________________________
//
//* * * Unterschiedliche Lichtmodi * * *
//______________________________________
void lichtmodus1() {
digitalWrite(led_Pin[0], LOW);
led_Status[0] = LOW;
}
void lichtmodus2() {
digitalWrite(led_Pin[0], HIGH);
led_Status[0] = HIGH;
}
void lichtmodus3() {
blinker_stabil(intervall);
}
void lichtmodus4() {
blinker_instabil(ledOnMs, ledOffMs);
}
void lichtmodus5() {
blinker_stabil(100);
}
void lichtmodus6() {
blinker_instabil(800, 200);
}
Ich freue mich auf eure Anregungen
Freundliche Grüsse aus der Schweiz Erwin