Dawser00131 Napisano Sierpień 1, 2019 Udostępnij Napisano Sierpień 1, 2019 Witam , od jakiegoś czasu próbuje napisać kod do maszyny który będzie sterować silnikiem . Kod którego używam //------------------------------- librarys ---------------------------------- #include <LiquidCrystal.h> #include <Servo.h> //------------------------------- lcd ---------------------------------- LiquidCrystal lcd(12, 11, 2, 3, 4, 5); //------------------------------- stepper ---------------------------------- #define stepPin 7 #define dirPin 8 //------------------------------- servo ---------------------------------- Servo snippers; #define servo 10 #define openAngle 180 #define closedAngle 0 //------------------------------- input ---------------------------------- #define leftButton 14 #define rightButton 9 #define upButton 15 #define downButton 6 //------------------------------- user settings ---------------------------------- unsigned int wireLength = 0; unsigned int wireQuantity = 0; //------------------------------- system settings ---------------------------------- int state = 0; int incrementSpeed = 1; int previousWireLength = 0; int previousWireQuantity = 0; float mmPerStep = 0.18096; void setup() { Serial.begin(9600); lcd.begin(16, 2); //LCD columns and rows pinMode(upButton, INPUT_PULLUP); pinMode(downButton, INPUT_PULLUP); pinMode(leftButton, INPUT_PULLUP); pinMode(rightButton, INPUT_PULLUP); pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); snippers.attach(servo); snippers.write(openAngle); delay(1000); } void loop() { if (!digitalRead(rightButton)){ if(state == 5){ state = 0; } else{ state += 1; } delay(200); lcd.clear(); } if (!digitalRead(leftButton) && state > 0 && state < 4){ state -=1; delay(200); lcd.clear(); } switch (state){ case 0: homeScreen(); break; case 1: chooseWireLength(); break; case 2: chooseWireQuantity(); break; case 3: confirm(); break; case 4: currentlyCutting(); break; case 5: finishedCutting(); break; } } void homeScreen(){ lcd.setCursor(0, 0); lcd.print("WIRE CUTTER"); lcd.setCursor(11, 1); lcd.print("NEXT>"); delay(100); } void chooseWireLength(){ wireLength = changeValue(wireLength); //clear LCD if required if(previousWireLength != wireLength){ lcd.clear(); previousWireLength = wireLength; } //Display information on LCD lcd.setCursor(0, 0); lcd.print("LENGTH:" + (String)wireLength + "mm"); displayNavigation(); } void chooseWireQuantity(){ wireQuantity = changeValue(wireQuantity); //clear LCD if required if(previousWireQuantity != wireQuantity){ lcd.clear(); previousWireQuantity = wireQuantity; } //Display information on LCD lcd.setCursor(0, 0); lcd.print("QUANTITY:" + (String)wireQuantity); displayNavigation(); } void confirm(){ lcd.setCursor(0, 0); lcd.print((String)wireLength + "mm x " + (String)wireQuantity + "pcs"); lcd.setCursor(0, 1); lcd.print("<BACK"); lcd.setCursor(10, 1); lcd.print("START>"); delay(100); } void currentlyCutting(){ lcd.setCursor(0, 0); lcd.print((String)0 + "/" + (String)wireQuantity); lcd.setCursor(0, 1); lcd.print("???s"); int stepsToTake = (int)wireLength/mmPerStep; for(int i = 0; i < wireQuantity; i++){ unsigned long timeForOneCycle = millis(); digitalWrite(dirPin,HIGH); for(int x = 0; x < stepsToTake; x++) { digitalWrite(stepPin,HIGH); delayMicroseconds(500); digitalWrite(stepPin,LOW); delayMicroseconds(500); } lcd.setCursor(0, 0); lcd.print((String)(i+1) + "/" + (String)wireQuantity); snippers.write(closedAngle); delay(600); snippers.write(openAngle); delay(600); lcd.setCursor(0, 1); unsigned long timeRemaining = ((millis() - timeForOneCycle)*(wireQuantity - (i+1)))/1000; lcd.print((String)timeRemaining + "s "); } wireLength = 0; wireQuantity = 0; state = 5; } void finishedCutting(){ lcd.clear(); lcd.setCursor(0, 0); lcd.print("CUTTING COMPLETE"); lcd.setCursor(11, 1); lcd.print("NEXT>"); delay(100); } int changeValue(int currentValue){ if (!digitalRead(upButton)) { delay(100); currentValue += incrementSpeed; } if (!digitalRead(downButton)) { if(currentValue - incrementSpeed >= 0){ delay(100); currentValue -= incrementSpeed; } else{ currentValue = 0; } } if (!digitalRead(downButton) && !digitalRead(upButton)){ incrementSpeed = 1; } return currentValue; } void displayNavigation(){ lcd.setCursor(0, 1); lcd.print("<BACK"); lcd.setCursor(11, 1); lcd.print("NEXT>"); delay(100); } Chodzi o to że zamiast servomechanizmu będzie silnik 12v od wycieraczki. Mam też krancowke u gory ktora sie rozłącza gdy silnik jest w stanie spoczynku . I moje pytanie brzmi jak napisać kod który będzie podawał 5v na przekaznik silnika , a silnik zrobi obrót i wroci do stanu spoczynku i rozłaczyly krańcowke , i potem następnie cięcie powtórzyć tak samo . Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Sierpień 1, 2019 Udostępnij Sierpień 1, 2019 @Dawser00131 witam na forum 🙂 Jakiego rodzaju pomocy oczekujesz? Masz konkretne pytanie, liczysz na gotowy program lub masz jakieś inne oczekiwania? Ciężko wywnioskować jakiej pomocy dokładnie szukasz. Link do komentarza Share on other sites More sharing options...
Dawser00131 Sierpień 1, 2019 Autor tematu Udostępnij Sierpień 1, 2019 (edytowany) Jeśli by komuś chciało napisać sie gotowy lub pomóc w napisaniu 🙂 Edytowano Sierpień 1, 2019 przez Dawser00131 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Sierpień 1, 2019 Udostępnij Sierpień 1, 2019 Ja niestety w takim razie nie będę w stanie pomóc, ale może znajdzie się ktoś chętny 🙂 Bardzo proszę, aby w tym temacie nie wygenerowała się "przepychanka słowna". Autor napisał na co liczy, jeśli ktoś ma czas i ochotę to może dostarczyć odpowiedni program lub jego fragmenty 🙂 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »