wmpir88 Napisano 27 sierpnia Udostępnij Napisano 27 sierpnia (edytowany) Witam serdecznie. Na początek zaznaczę, że w kwestii arduino nawet nie mogę się nazwać początkującym. Zwracam się o jednorazową pomoc i więcej nie będę zawracał wam głowy. Korzystam ze zgrzewarki opartej na projekcie: https://majsterkowo.pl/zgrzewarka-do-ogniw-z-transformatora-mikrofalowki/ Korzystam też z kodu autora projektu, który powoduje, że trzymanie przycisku powoduje ciągłe wyzwalanie zgrzewania. Chciałbym, żeby kod poczekał na puszczenie przycisku i dopiero zezwolił na kolejną akcję. /* * LCM1602 & Arduino Uno * VCC - > 5 V * GND - GND * SCL -> A5 * SDA -> A4 */ int odczytanaWartosc = 0; int czas = 0; #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.begin(16,2); lcd.clear(); lcd.backlight(); pinMode(8, OUTPUT); // zasilenie- przekaźnik pinMode(7, INPUT_PULLUP); // przycisk pinMode(9, OUTPUT); // buzzer } void loop() { lcd.setCursor(0,0); lcd.print("Czas impulsu:"); lcd.setCursor(0,1); lcd.print(" ms"); odczytanaWartosc = analogRead(A1); // odczyt ustawienia potencjometru lcd.setCursor(0,1); czas = odczytanaWartosc * (100/1023.0) ; lcd.print(czas); delay(200); if (digitalRead(7) == LOW) { digitalWrite(9, HIGH); //buzzer on delay(100); digitalWrite(9, LOW); //buzzer off lcd.setCursor(0,1); lcd.print(" ms"); lcd.setCursor(0,1); lcd.print(czas) ; delay(250); lcd.clear(); digitalWrite(8, HIGH); //zgrzewanie digitalWrite(9, HIGH); //buzzer on delay(czas); //czas trwania zgrzewania digitalWrite(8, LOW); //Wyłączenie zgrzewania digitalWrite(9, LOW); //buzzer off } else { } } Jak już wspomniałem proszę o jednorazową pomoc. Z góry dziękuję. Pozdrawiam Bogdan B. Edytowano 28 sierpnia przez wmpir88 Link do komentarza Share on other sites More sharing options...
farmaceuta 29 sierpnia Udostępnij 29 sierpnia (edytowany) if (digitalRead(7) == LOW && stan == 1) { digitalWrite(9, HIGH); //buzzer on delay(100); digitalWrite(9, LOW); //buzzer off lcd.setCursor(0,1); lcd.print(" ms"); lcd.setCursor(0,1); lcd.print(czas) ; delay(250); lcd.clear(); digitalWrite(8, HIGH); //zgrzewanie digitalWrite(9, HIGH); //buzzer on delay(czas); //czas trwania zgrzewania digitalWrite(8, LOW); //Wyłączenie zgrzewania digitalWrite(9, LOW); //buzzer off stan = 0; } else { stan = 1; } Wklej ten kawałek kodu w odpowiednie miejsce... I do części globalnej tam gdzie masz wszystkie zmienne wklej to co poniżej... bool stan = 1; Edytowano 29 sierpnia przez farmaceuta Link do komentarza Share on other sites More sharing options...
Gość 29 sierpnia Udostępnij 29 sierpnia @farmaceuta Na pewno to co napisałeś jest ok? Nie powinno czasem być np. tak? else if (digitalRead(7) == HIGH) { stan = 1; } Zresztą ja też jestem mocno początkującym, dlatego tylko pytam... Link do komentarza Share on other sites More sharing options...
farmaceuta 29 sierpnia Udostępnij 29 sierpnia 6 minut temu, rafal220 napisał: @farmaceuta Na pewno to co napisałeś jest ok? Nie powinno czasem być np. tak? else if (digitalRead(7) == HIGH) { stan = 1; } Zresztą ja też jestem mocno początkującym, dlatego tylko pytam... Nie musi tak być...else wykona się wtedy jeśli na pinie 7 będzie coś innego niż stan LOW...a jak wiadomo mamy tylko dwa stany LOW/HIGH gdzie HIGH pojawi się tylko wtedy kiedy guzik/pin nie wciśnięty tak że jest ok 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
Gość 29 sierpnia Udostępnij 29 sierpnia @farmaceuta Ale autor chce aby układ wrócił do gotowości dopiero po odpuszczeniu stopki. Jeżeli w if zmienna "stan" przejdzie na "0" to przy następnym biegu programu wykona się else zanim jeszcze puścisz stopkę. Link do komentarza Share on other sites More sharing options...
ethanak 29 sierpnia Udostępnij 29 sierpnia @farmaceuta - kolega @rafal220 ma rację (w końcu to jego działka - automatyka). A w ogóle kłania się Bounce2 - lepiej analizować wciśnięcie/puszczenie przycisku niż stan. Link do komentarza Share on other sites More sharing options...
Gość 29 sierpnia Udostępnij 29 sierpnia 17 minut temu, ethanak napisał: A w ogóle kłania się Bounce2 - lepiej analizować wciśnięcie/puszczenie przycisku niż stan. Masz rację, ale autor w programie załadował takie czasy delay, że można to odpuścić... Zresztą w ogóle ten program jest tak zrobiony, że od zgrzewania ogniw to raczej trzymałbym się z daleka. Co najwyżej jakaś zgrzewarka do grubej blachy, ze sterowaniem grupowym triaka/ tyrystorów. Przecież ten program nawet nie ma regulacji mocy poprzez synchronizację z zerem. xD Zastanawiam się, czy dla autora nie będzie bezpieczniej kupić gotowy moduł made in china za kilka dyszek z konkretnym triakiem 100A który nie daj Boże się nie uszkodzi w czasie zgrzewania większego pakietu akumulatorów... Link do komentarza Share on other sites More sharing options...
farmaceuta 29 sierpnia Udostępnij 29 sierpnia 1 godzinę temu, rafal220 napisał: @farmaceuta Ale autor chce aby układ wrócił do gotowości dopiero po odpuszczeniu stopki. Jeżeli w if zmienna "stan" przejdzie na "0" to przy następnym biegu programu wykona się else zanim jeszcze puścisz stopkę. Zwracam honor... racja! Link do komentarza Share on other sites More sharing options...
wmpir88 29 sierpnia Autor tematu Udostępnij 29 sierpnia (edytowany) Bardzo dziękuję za pomoc. Jesteście wspaniali ! Nie wiem czy dobrze to zrobiłem: /* * LCM1602 & Arduino Uno * VCC - > 5 V * GND - GND * SCL -> A5 * SDA -> A4 */ bool stan = 1; int odczytanaWartosc = 0; int czas = 0; #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.begin(16,2); lcd.clear(); lcd.backlight(); pinMode(8, OUTPUT); // zasilenie- przekaźnik pinMode(7, INPUT_PULLUP); // przycisk pinMode(9, OUTPUT); // buzzer } void loop() { lcd.setCursor(0,0); lcd.print("Czas impulsu:"); lcd.setCursor(0,1); lcd.print(" ms"); odczytanaWartosc = analogRead(A1); // odczyt ustawienia potencjometru lcd.setCursor(0,1); czas = odczytanaWartosc * (100/1023.0) ; lcd.print(czas); delay(200); if (digitalRead(7) == LOW && stan == 1) { digitalWrite(9, HIGH); //buzzer on delay(100); digitalWrite(9, LOW); //buzzer off lcd.setCursor(0,1); lcd.print(" ms"); lcd.setCursor(0,1); lcd.print(czas) ; delay(250); lcd.clear(); digitalWrite(8, HIGH); //zgrzewanie digitalWrite(9, HIGH); //buzzer on delay(czas); //czas trwania zgrzewania digitalWrite(8, LOW); //Wyłączenie zgrzewania digitalWrite(9, LOW); //buzzer off stan = 0; } else { stan = 1; } } Bo po wgraniu wyświetlacz nie wyświetla tekstu i mruga a wciśnięty i trzymany przycisk nadal cały czas wyzwala zgrzewanie 😞 Aktualizacja: Mruganie wyświetlacza spowodowane tym, że symulator kodu na https://wokwi.com nie chciał zadziałać z oryginalnym kawałkiem kodu: LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); Działanie przycisku nie zmieniło się Aktualizacja 2: Dodanie else if (digitalRead(7) == HIGH) { pomogło i teraz sprzęt działa fantastycznie. Jeszcze raz dziękuję ❤️ Viva la https://forbot.pl ! Edytowano 29 sierpnia przez wmpir88 Link do komentarza Share on other sites More sharing options...
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ę »