Hallo wie kann ich am geschicktesten 4 Taster abfragen
nur taster1 ist gedrückt tu etwas
nur taster 2 --"---
u.s.w.
klar 4 x if währ möglich ist aber nicht schön
kann ich bei case select auch mit digitalread arbeiten ??
Hallo wie kann ich am geschicktesten 4 Taster abfragen
nur taster1 ist gedrückt tu etwas
nur taster 2 --"---
u.s.w.
klar 4 x if währ möglich ist aber nicht schön
kann ich bei case select auch mit digitalread arbeiten ??
Da digitalRead nur 2 Werte kennt(LOW/HIGH), wie willst Du da 4 Zustände unterscheiden oder hast Du etwas anderes gemeint?
Gruß Tommy
Wenn du mit den 4 Tastern tatsächlich 15 + 1 Zustände einstellen willst und also mit einer Zahl 0 .. 15 etwas anfangen kannst:
const byte pins[4] = {3, 4, 5, 6};
byte zustand = 0;
for (byte i = 0; i < 4 ; i++) {
zustand = (zustand << 1) | digitalRead(pins[i]);
}
Serial.print(zustand, BIN);
Serial.print( " = " );
Serial.println(zustand, HEX);
Hi
Man sollte auch den Port selber auslesen können (sofern die 4 Pins an einem Port hängen), die nicht genutzten Bits ausmaskieren und mit den erhaltenen Zahlen das switch-case füttern.
MfG
nein
die Taster sollen 4 unterschiedlichen "Geschwindigkeiten setzen :
Taster 1 z.b. 1000
Taster 2 2000
u.s.w.
das ganze soll ein Vorschub für eine Fässtisch werden , der braucht eine Vorschub abhängig von Frässerduchmesser und Schnittgeschwindigkeit, wobei etwas zu langsam nicht schlimm ist kosten nur Zeit zu schnell und der Frässer ist kaputt
Hi
Da wäre mein Weg die IFs - mit der langsamsten Geschwindigkeit angefangen und in den ELSE-Zweigen auf die jeweils höheren Geschwindigkeiten testen.
So ist egal, wie viele der Schalter (oder wirklich Taster?) AN sind, Du bekommst halt die kleinste der angewählten Geschwindigkeiten.
Bei Tastern könnte man Diese in einer FOR-Schleife durchrattern, die Taster in eine Array gepackt, und 'bei Fund' die Soll-Geschwindigkeit setzen - Welche dann hinter der Schleife umgesetzt wird (PWM o.Ä.).
Rein Interesse halber ... wie dick, lang, schnell, welches Material fräst Du?
Selber geht zwar auch Stahl auf der kleinen China-CNC (10tel Zustellung ... vll. ...), aber weder die Sauerei noch die Zeit brauche ich Da - dafür hätte ich noch 'ne Paulimot (müsste aber nachschauen Welche, schon lange Nichts mehr mit gemacht).
MfG
... und wenn zwei Taster gleichzeitig gedrückt sind?
... und wie wird ausgeschaltet?
Wenn "der höchste gilt", geht es z.B. in so einer Schleife:
const byte pins[5] = {2, 3, 4, 5, 6}; // incl. Aus-Taster
const int speeds[]={0, 1000, 2000, 2500, 2900};
int altSpeed=0;
...
void loop() {
int speed = -1; // Voreinstellung: nichts ändern, wenn kein Taster gedrückt ist
for (byte i = 0; i < 5 ; i++)
if (digitalRead(pins[i]) speed=speeds[i];
if (speed >= 0 && speed != altSpeed) {
Serial.println(speed);
machWasDraus(speed); // z.B. Fräse ansteuern ...
altSpeed = speed;
}
delay(5); // Entprellen
}
ich habe eine Optimun BF20 L Vario
nein kein CNC nur der Vorschub in X-Richtung , Alu und Stahl max 2mm pro Duchrgang alles andere ist ohne gute Kühlung nicht drin ( gelernter Industriemeister Betriebstechnik)
hier mal mein Code bis jetzt wer lust hat darf mich gerne verbessern ![]()
#include <AccelStepper.h>
#define LINKS_PIN A0
#define RECHTS_PIN A1
#define MAN_PIN A3
#define STOPL_PIN A4
#define STOPR_PIN 2
#define RPM1_PIN 3
#define RPM2_PIN 4
#define RPM3_PIN 5
#define RPM4_PIN 6
#define STEP_PIN 9
#define DIRECTION_PIN 8
#define ENA_PIN 7
#define LED1 10
#define LED2 11
#define LED3 12
#define LED4 13
// Define a stepper and the pins it will use
AccelStepper Motor(AccelStepper::DRIVER, 9, 8);
void setup()
{
digitalWrite(ENA_PIN, HIGH); // Entstufe abgeschaltet
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
Motor.setMaxSpeed(10000);
Motor.setAcceleration(1000);
// Set up the button inputs, with pullups
pinMode(LINKS_PIN, INPUT_PULLUP);
pinMode(RECHTS_PIN, INPUT_PULLUP);
pinMode(MAN_PIN, INPUT_PULLUP);
pinMode(RPM1_PIN, INPUT_PULLUP);
pinMode(RPM2_PIN, INPUT_PULLUP);
pinMode(RPM3_PIN, INPUT_PULLUP);
pinMode(RPM4_PIN, INPUT_PULLUP);
pinMode(STOPL_PIN, INPUT_PULLUP);
pinMode(STOPR_PIN, INPUT_PULLUP);
}
void loop()
{
static float current_speed = 0.0; // Holds current motor speed in steps/second
static char sign = 0; // Holds -1, 1 or 0 to turn the motor on/off and control direction
if (digitalRead(MAN_PIN)==0){
digitalWrite(ENA_PIN, LOW);
if (digitalRead(RPM1_PIN)==0 && digitalRead(RPM2_PIN)==1 && digitalRead(RPM3_PIN)==1 && digitalRead(RPM4_PIN)==1){ // Vorschub 1,8 M/min
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
current_speed = 16000;
}
if (digitalRead(RPM1_PIN)==1 && digitalRead(RPM2_PIN)==0 && digitalRead(RPM3_PIN)==0 && digitalRead(RPM4_PIN)==0){ // Vorschub 3,6 M/min
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
current_speed = 32000;
}
if (digitalRead(RPM1_PIN)==0 && digitalRead(RPM2_PIN)==0 && digitalRead(RPM3_PIN)==1 && digitalRead(RPM4_PIN)==0){ // Vorschub 5,4 M/min
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, LOW);
current_speed = 48000;
}
if (digitalRead(RPM1_PIN)==0 && digitalRead(RPM2_PIN)==0 && digitalRead(RPM3_PIN)==0 && digitalRead(RPM4_PIN)==1){ // Vorschub 7,2 M/min
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, HIGH);
current_speed = 64000;
}
//If a switch is pushed down (low), set the sign value appropriately
if (digitalRead(LINKS_PIN) == 0 && digitalRead(STOPL_PIN)==0) { // STOPL normaly closed
sign = 1;
}
else if (digitalRead(RECHTS_PIN) == 0&& digitalRead(STOPR_PIN)==0) { // STOPR normaly closed
sign = -1;
}
else sign = 0;
current_speed = current_speed*sign;
Motor.setSpeed(current_speed);
Motor.run();
}
else digitalWrite(ENA_PIN, HIGH);
}