Start/stop met veiligheidsschakelaar, met while

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 14
Geregistreerd: 03 Jul 2020, 23:45

Start/stop met veiligheidsschakelaar, met while

Berichtdoor Oudholland » 14 Dec 2022, 20:00

Ik ga een machine (freesspindel in een freestafel voor houtbewerking) aansturen ivm de hoogteverstelling.
De beweging zelf doe ik met stappenmotoren; de standaard omhoog/omlaag (icm microswitch/eindschakelaars voor de beide uitersten) heb ik al werkend.

Nu wil ik er ook een functie inbouwen, dat de freesspindel automatisch naar de hoogste (of laagste) stand gaat.
Daarvoor heb ik een veiligheidsschakelaar (gewoon een 3e terugverende drukknop) in gedachten, die ik tegelijk met de knop "omhoog" moet indrukken. Dan gaat de motor van de hoogteverstelling draaien. Als ik beiden vervolgens loslaat, blijft die motor draaien totdat de eindschakelaar wordt ingedrukt (als het hoogste punt bereikt is); dan stopt de beweging.

Dat heb ik voor elkaar in onderstaande code (waarbij ik voor nu de motorbeweging even heb vervangen door het wel/niet branden van een led):

Code: Alles selecteren
int buttonUp = 6;      // knop Omhoog
int microswitch_up = 7;   // Eindschakelaar, wordt ingedrukt als hoogste punt is bereikt
int SafetyButton = 8;   // veiligheidsknop
int LED = 13;            // LED (= in uiteindelijke situatie draaiende hoogteverstelling)

void setup() {

pinMode (buttonUp, INPUT);
pinMode (microswitch_up, INPUT);
pinMode (SafetyButton, INPUT);
pinMode (LED, OUTPUT);

  Serial.begin(9600);                 
  Serial.println("Klaar voor de start...");
}

void loop() {
   
if (digitalRead(buttonUp) == HIGH && digitalRead(SafetyButton) == HIGH && digitalRead(microswitch_up) == LOW)
    //  Als knop omhoog + safetybutton beiden worden ingedrukt, en de eindschakelaar niet is ingedrukt
    //  Dus als de machine nog niet op z'n hoogste stand staat
{
    Serial.println("Start");
       
 while (digitalRead(microswitch_up) == LOW)
    //  Zolang de eindschakelaar nog steeds niet is ingedrukt
    {
     
      //  GA OMHOOG NAAR HOOGSTE POSITIE
    digitalWrite(LED,HIGH);     //  uiteindelijk vervangen door besturing hoogteverstelling
    }
   
// als microswitch is ingedrukt, dus machine in hoogste positie staat
   digitalWrite(LED,LOW);     // stop

         Serial.println("Positie bereikt");
}
}


Nu wil ik daar een extra veiligheid inbouwen, dat deze beweging ook onderbroken kan worden door (nogmaals) op de veiligheidsschakelaar te drukken.
Die moet dus losgelaten zijn; als die opnieuw HIGH wordt, stopt de beweging (in deze code, gaat de LED uit).

Ik zou verwachten dat ik deze ergens in de while-lus moet plaatsen, ik krijg dat alleen niet zo snel voor elkaar. Want als ik 'm daar nu in plaats, is die natuurlijk nog HIGH omdat ik die ook moet indrukken om de beweging te starten.
Ik had ook al iets geprobeerd met een safetyButtonLaststate icm een if-statement in de while-lus, maar dat kreeg ik ook niet voor elkaar.

Zouden jullie mij op weg willen helpen om dit voor elkaar te krijgen?
Alvast bedankt!

Rob

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Start/stop met veiligheidsschakelaar, met while

Berichtdoor shooter » 18 Dec 2022, 17:43

ja dat kan bijvoorbeeld door even te wachten (delay(100) want de software is erg snel natuurlijk en je kunt een vlag gebruiken dus als schakelaar aan is zet je een vlaggetje (knop is aan) en die zet je pas uit als de boven schakelaar aan is.
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 15 gasten