Skocz do zawartości

Waldy

Użytkownicy
  • Zawartość

    35
  • Rejestracja

  • Ostatnio

Reputacja

11 Dobra

O Waldy

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Witam to znowu ja Teraz trochę coś z innej pułki nie chciałem spamować forum nowym wątkiem,chociaż wydaje się ciekawy czyli coś o bezpieczeństwie a konkretnie software'owa krańcówka. Chciałbym taką opcję mieć bo wiadomo różnie to bywa. Tutaj mam parę pytań: - Czy jest możliwość realizacji takiej krańcówki omijając przerwanie i czy jest to "zgodne ze sztuką" . Mam tu na myśli to że przerwanie realizuje się "nadrzędnie" i czy jest możliwość wywołania przerwania z poziomu programu np. jeżeli pozycja >= 0 to bach przerwanie w którym miga dioda dół i cewka dół jest wyłączona. - Czy jak krańcówka była by zrealizowana jako zwykły warunek if w pętli loop jak by to się miało do momentu w którym zostaje osiągnięta i przekroczona pozycja 0 (podczas np. regulacji pozycji) co zostanie wykonane najpierw; Czy warunek w którym reguluje pozycje i dajmy na to że przejdzie 0 (urywając potencjometr) i potem dopiero program dojdzie do linijki kodu w którym sprawdza pozycje dla krańcówki (zakładając że program wykonuje się linijka po linijce) Pytam dlatego że do ustawiania pozycji góra/dół używam potencjometru a jako czujnik położenia też jest potencjometr(wersja bieda edyszyn :D) i zadana pozycja 0 pokryje się z pozycją 0 na czujniku i ramie się zatrzyma. Ale do drobnej regulacji ustawionej pozycji użyłem impulsatora przerabiając przykład z biblioteki tak aby uzyskać drobną regulację w postaci 4 kroków do góry i 4 na dół i właśnie w tym wypadku może pojawić się ryzyko że zejdzie się poniżej minimalnej pozycji czujnika,zresztą pewnie nie tylko w tym wypadku no ale wypadało by takie zabezpieczenie posiadać. Pozdrawiam i miłej niedzieli życzę
  2. Można by spróbować użyć debouncer.fell() albo debouncer.rose()) - wyzwalanie poprzez zmianę stanu naciskanego przycisku, używając do tego biblioteki Bounce2 .
  3. Hmm,stany to u mnie po prostu odczyty poszczególnych przycisków po debouncingu z wyjątkiem stanu3 i 4 który przypisałem tak bo pasował mi do kolejności debouncerów przycisków góra/dół - no faktycznie może jest to nieczytelne dla drugiej osoby/być może nawet bardzo(poprawię to). Szczerze mówiąc po przeczytaniu mam trochę mętlik w głowie no muszę sobie to na spokojnie przeanalizować.Może napiszę jaki ja miałem zamysł na strukturę(nie wiem czy to dobre słowo) kodu jako laik nie programista: Mam cztery tryby każdy wyzwalany osobnym przyciskiem tak żeby nie było pomyłki co kiedy robimy i żeby nie zrobić czasem czegoś innego(tutaj używam przełącznika obrotowego 4 pozycyjnego) : Pozycja1: ustawienie żądanej wysokości + zapis do pamięci Pozycja2: regulacja w małym stopniu ustawionej wysokości(na wypadek pływania ramienia) Pozycja3: możliwość bezpośredniego dojazdu do zapisanej wysokości, i np. tutaj mamy ((stan6 == LOW) && (debouncer3.fell ()) ) jeżeli wybrano pozycje 3(stan6 == LOW) i jeżeli wykryto naciśnięcie przycisku - jedziemy do danej pozycji. Pozycja4: sterowanie zewnętrzne W zasadzie dlatego taka "zupa stanowa" jest... Odnośnie tego delaya no to też zastanawiałem się nad millis() ale w zasadzie na moment zapisu ustawionej wysokości nie musi przyjmować innych poleceń -> Pozycja1 ustawienie wysokości i zapis(i tyle) może wydawać się to prymitywne ale to dość proste i eliminuje pomyłkę . Być może się mylę, to proszę mnie poprawić i skorygować moje rozumowanie dlaczego jest złe Co do mojego traktorka to prezentuje się tak Silnik z przekładnią i patykiem jako ramię,przekaźniki jako rozdzielacz hydrauliczny i super pająk z przyciskami jako pseudo sterownik.
  4. Ok,to na szybko objaśnienia tak żeby nie trzeba było przeszukiwać całego "kodu" : stan6 - odczytanie stanu przycisku który wybiera tryb bezpośredniego dojazdu do zapamiętanej pozycji w pamięci eeprom( wartosc_dol i wartosc_gora ), debouncer3.feel - zmiana stanu przycisku(przycisk_do_gory) po którym ramię dojeżdża do zapamiętanej pozycji "wartosc_gora" , debouncer4.feel -zmiana stanu przycisku(przycisk_na_dol) po którym ramię dojeżdża do zapamiętanej pozycji "wartosc_dol" , stan3 i stan4 pierwotnie to : bool stan3 = false; bool stan4 = false; I cały kod poniżej : #include <EEPROM.h> #include <Bounce2.h> #define zapis_wysokosci_gora A4 // zapis górnej wysokosci do eeprom #define zapis_wysokosci_dol A5 //zapis dolnej wysokosci do eeprom #define przycisk_do_gory 6 #define przycisk_na_dol 7 #define DZW 11 // dioda zapisu wysokości #define przycisk_regulacji 5 //przycisk umozliwiający regulację zapisanej wysokości #define potencjometr A1 // potencjometr ustawiający pozycję do zapisu #define czujnik A2 // potencjometr -czujnik #define DG 12 // dioda do góry #define DD 13 // dioda na dół #define przycisk 8 // przycisk #define cewkag 10 //cewka rozdzielacza do góry #define cewkad 9 //cewka rozdzielacza na dół #define przycisk_gora_dol 4 // przycisk umożliwiający bezpośredni ruch do zapisanej wartości do góry albo w dół Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); Bounce debouncer3 = Bounce(); Bounce debouncer4 = Bounce(); Bounce debouncer5 = Bounce(); Bounce debouncer6 = Bounce(); Bounce debouncer7 = Bounce(); int wartosc_gora; int wartosc_dol; bool stan3 = false; bool stan4 = false; void setup() { pinMode(zapis_wysokosci_gora,INPUT_PULLUP); pinMode(zapis_wysokosci_dol,INPUT_PULLUP); pinMode(potencjometr,INPUT); pinMode(czujnik,INPUT); pinMode(przycisk,INPUT_PULLUP); pinMode(DG,OUTPUT); pinMode(DD,OUTPUT); pinMode(DZW,OUTPUT); pinMode(cewkag,OUTPUT); pinMode(cewkad,OUTPUT); pinMode(przycisk_do_gory,INPUT_PULLUP); pinMode(przycisk_na_dol,INPUT_PULLUP); pinMode(przycisk_regulacji,INPUT_PULLUP); pinMode(przycisk_gora_dol,INPUT_PULLUP); digitalWrite(cewkag,LOW); //domyślnie cewka wyłączona digitalWrite(cewkad,LOW); digitalWrite(DZW,LOW); wartosc_gora = EEPROM.read(0); //odczyt zapisanej wysokość góra wartosc_dol = EEPROM.read(1); //odczyt zapisanej wysokość dół debouncer1.attach(przycisk); debouncer1.interval(30); debouncer2.attach(zapis_wysokosci_gora); debouncer2.interval(30); debouncer3.attach(przycisk_do_gory); debouncer3.interval(40); debouncer4.attach(przycisk_na_dol); debouncer4.interval(40); debouncer5.attach(przycisk_regulacji); debouncer5.interval(30); debouncer6.attach(przycisk_gora_dol); debouncer6.interval(30); debouncer7.attach(zapis_wysokosci_dol); debouncer7.interval(30); Serial.begin(9600); delay(100); } void loop() { //debouncing przycisków : debouncer1.update(); int stan1 = debouncer1.read(); debouncer2.update(); debouncer3.update(); //int stan3 = debouncer3.read(); debouncer4.update(); //int stan4 = debouncer4.read(); debouncer5.update(); int stan5 = debouncer5.read(); debouncer6.update(); int stan6 = debouncer6.read(); debouncer7.update(); int pozycja = analogRead(czujnik)/4 ; //odczyt pozycji czujnika //pozycja = map(pozycja,0,400,0,1023)/4; //przeskalowanie zakresu czujnika na odpowiedni zakres sterowania int sterowanie = analogRead(potencjometr)/4; //odczyt potencjometru do ustawiania pozycji int hist = 3; //histereza int8_t jazda; //USTAWIANIE WYSOKOŚCI DO ZAPISU if (stan1 == LOW) { //wcisnięty przycisk if (pozycja < sterowanie - hist) jazda = 1; // jazda do góry else if (pozycja > sterowanie + hist) jazda = -1; //jazda w dół else jazda = 0; // stop } else { // przycisk puszczony jazda = 0; // nigdzie nie jedziemy } //ZAPIS USTAWIONEJ WYSOKOŚCI DO PAMIĘCI EEPROM: if((stan1 == LOW) && (debouncer2.fell() )) { //zapis górnej pozycji wartosc_gora = pozycja; EEPROM.update(0,wartosc_gora); digitalWrite(DZW,HIGH); digitalWrite(DG,HIGH); delay(1000); } else digitalWrite(DZW,LOW); digitalWrite(DG,LOW); if((stan1 == LOW) && (debouncer7.fell() )) { //zapis dolnej pozycji wartosc_dol = pozycja; EEPROM.update(1,wartosc_dol); digitalWrite(DZW,HIGH); digitalWrite(DD,HIGH); delay(1000); } else digitalWrite(DZW,LOW); digitalWrite(DD,LOW); //BEZPOŚREDNI DOJAZD DO ZAPISANYCH WYSOKOŚCI ZA POMOCĄ PRZYCISKÓW if ((stan6 == LOW) && (debouncer3.fell ()) ) stan3 = !stan3; //po naciśnięciu dojazd do pozycji górnej if (stan3 == true) if (pozycja < wartosc_gora - hist) jazda = 1; else if (pozycja > wartosc_gora + hist) jazda = -1; else jazda = 0; } else stan3 = ??? if ((stan6 == LOW) && (debouncer4.fell ()) ) stan4 = !stan4; //po naciśnięciu dojazd do pozycji dolej if (stan4 == true) { if (pozycja > wartosc_dol + hist ) jazda = -1; else if(pozycja < wartosc_dol -hist) jazda = 1; else jazda = 0; } else stan4 = ??? //DROBNA REGULACJA USTAWIONEJ WYSOKOŚCI : if (jazda > 0) { digitalWrite(cewkag,HIGH); digitalWrite(DG,HIGH); digitalWrite(cewkad,LOW); digitalWrite(DD,LOW); } else if (jazda < 0) { digitalWrite(cewkag,LOW); digitalWrite(DG,LOW); digitalWrite(cewkad,HIGH); digitalWrite(DD,HIGH); } else { digitalWrite(cewkag,LOW); digitalWrite(DG,LOW); digitalWrite(cewkad,LOW); digitalWrite(DD,LOW); } }
  5. Cześć,chciałbym uzyskać taki efekt taki że po chwilowym naciśnięciu przycisku "do góry" ramię jedzie do zapamiętanej pozycji zdefiniowanej jako wartosc_gora i analogicznie po chwilowym naciśnięciu przycisku na dół ramię zdąża do zapisanej pozycji wartosc_dol. Tak też się dzieje ramię ładnie zdąża do zadanej pozycji po naciśnięciu odpowiedniego przycisku ale tylko raz. ? Dlaczego tak się dzieje ? Może ja źle definiuje warunek po else jak już wykona się dojazd do zapamiętanej pozycji ? Próbowałem za else przypisać do odpowiedniego stanu false, stan przeciwny do wystawionego po wykryciu zbocza,oraz sam stan; - nok. Może ja to źle rozumiem i chcę "na siłę" przywrócić stan pierwotny po zmianie którego następuje dojazd do pozycji góra bądź dół, a może całość trzeba jakoś inaczej napisać ? Poniżej wycinek kodu: if ((stan6 == LOW) && (debouncer3.fell ()) ) stan3 = !stan3; //po naciśnięciu dojazd do pozycji górnej //wybór trybu dojazdu if (stan3 == true) { if (pozycja < wartosc_gora - hist) jazda = 1; else if (pozycja > wartosc_gora + hist) jazda = -1; else jazda = 0; } else stan3 = ??? if ((stan6 == LOW) && (debouncer4.fell ()) ) stan4 = !stan4; //po naciśnięciu dojazd do pozycji dolej if (stan4 == true) { if (pozycja > wartosc_dol + hist ) jazda = -1; else if(pozycja < wartosc_dol -hist) jazda = 1; else jazda = 0; } else stan4 = ??? Pozdrawiam Waldek
  6. Faktycznie Kod jeszcze nie jest ostateczny - puki co jest nasiane 2/3 tego co chciałbym mieć ale to i tak już duży sukces. Proszę: #include <EEPROM.h> #include <Bounce2.h> #define zapis_wysokosci_gora A4 // zapis górnej wysokosci do eeprom #define zapis_wysokosci_dol A5 //zapis dolnej wysokosci do eeprom #define przycisk_do_gory 7 #define przycisk_na_dol 6 #define DZW 11 // dioda zapisu wysokości #define przycisk_regulacji 5 //przycisk umozliwiający regulację zapisanej wysokości #define potencjometr A1 // potencjometr ustawiający pozycję do zapisu #define czujnik A2 // potencjometr -czujnik #define DG 12 // dioda do góry #define DD 13 // dioda na dół #define przycisk 8 // przycisk #define cewkag 10 //cewka rozdzielacza do góry #define cewkad 9 //cewka rozdzielacza na dół #define przycisk_gora_dol 4 // przycisk umożliwiający bezpośredni ruch do zapisanej wartości do góry albo w dół Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); Bounce debouncer3 = Bounce(); Bounce debouncer4 = Bounce(); Bounce debouncer5 = Bounce(); Bounce debouncer6 = Bounce(); Bounce debouncer7 = Bounce(); int wartosc_gora; int wartosc_dol; int ledState = LOW; bool stan3 = false; bool stan4 = false; void setup() { pinMode(zapis_wysokosci_gora,INPUT_PULLUP); pinMode(zapis_wysokosci_dol,INPUT_PULLUP); pinMode(potencjometr,INPUT); pinMode(czujnik,INPUT); pinMode(przycisk,INPUT_PULLUP); pinMode(DG,OUTPUT); pinMode(DD,OUTPUT); pinMode(DZW,OUTPUT); pinMode(cewkag,OUTPUT); pinMode(cewkad,OUTPUT); pinMode(przycisk_do_gory,INPUT_PULLUP); pinMode(przycisk_na_dol,INPUT_PULLUP); pinMode(przycisk_regulacji,INPUT_PULLUP); pinMode(przycisk_gora_dol,INPUT_PULLUP); digitalWrite(cewkag,LOW); //domyślnie cewka wyłączona digitalWrite(cewkad,LOW); digitalWrite(DZW,ledState); wartosc_gora = EEPROM.read(0); //odczyt zapisanej wysokość góra wartosc_dol = EEPROM.read(1); //odczyt zapisanej wysokość dół debouncer1.attach(przycisk); debouncer1.interval(30); debouncer2.attach(zapis_wysokosci_gora); debouncer2.interval(30); debouncer3.attach(przycisk_do_gory); debouncer3.interval(40); debouncer4.attach(przycisk_na_dol); debouncer4.interval(40); debouncer5.attach(przycisk_regulacji); debouncer5.interval(30); debouncer6.attach(przycisk_gora_dol); debouncer6.interval(30); debouncer7.attach(zapis_wysokosci_dol); debouncer7.interval(30); Serial.begin(9600); delay(100); } void loop() { //debouncing przycisków : debouncer1.update(); int stan1 = debouncer1.read(); debouncer2.update(); debouncer3.update(); //int stan3 = debouncer3.read(); debouncer4.update(); //int stan4 = debouncer4.read(); debouncer5.update(); int stan5 = debouncer5.read(); debouncer6.update(); int stan6 = debouncer6.read(); debouncer7.update(); int pozycja = analogRead(czujnik)/4 ; //odczyt pozycji czujnika //pozycja = map(pozycja,0,400,0,1023)/4; //przeskalowanie zakresu czujnika na odpowiedni zakres sterowania int sterowanie = analogRead(potencjometr)/4; //odczyt potencjometru do ustawiania pozycji int hist = 3; //histereza int8_t jazda; //USTAWIANIE WYSOKOŚCI DO ZAPISU if (stan1 == LOW) { //wcisnięty przycisk if (pozycja < sterowanie - hist) jazda = 1; // jazda do góry else if (pozycja > sterowanie + hist) jazda = -1; //jazda w dół else jazda = 0; // stop } else { // przycisk puszczony jazda = 0; // nigdzie nie jedziemy } //ZAPIS USTAWIONEJ WYSOKOŚCI if((stan1 == LOW) && (debouncer2.fell() )) { //zapis górnej pozycji wartosc_gora = pozycja; EEPROM.update(0,wartosc_gora); ledState = !ledState; digitalWrite(DZW,ledState); } else digitalWrite(DZW,LOW); if((stan1 == LOW) && (debouncer7.fell() )) { //zapis dolnej pozycji wartosc_dol = pozycja; EEPROM.update(1,wartosc_dol); ledState = !ledState; digitalWrite(DZW,ledState); } else digitalWrite(DZW,LOW); Serial.println("wysokość dół: "); Serial.println(wartosc_dol); Serial.println("wysokość góra: "); Serial.println(wartosc_gora); Serial.println("pozycja czujnika: " ); Serial.println(pozycja); //BEZPOŚREDNI DOJAZD DO ZAPISANYCH WYSOKOŚCI ZA POMOCĄ PRZYCISKÓW if ((stan6 == LOW) && debouncer3.fell ()) {stan3 = !stan3;} //po naciśnięciu dojazd do pozycji górnej if (stan3 == true) { if (pozycja < wartosc_gora - hist) jazda = 1; else if (pozycja > wartosc_gora + hist) jazda = -1; else jazda = 0; } else stan3 == HIGH; if ((stan4 == LOW) && debouncer4.fell ()) { stan4 = !stan4;} //po naciśnięciu dojazd do pozycji dolej if (stan4 == true) { if (pozycja > wartosc_dol + hist ) jazda = -1; else if(pozycja < wartosc_dol -hist) jazda = 1; else jazda = 0; } else stan4 == HIGH; //DROBNA REGULACJA USTAWIONEJ WYSOKOŚCI : if (jazda > 0) { digitalWrite(cewkag,HIGH); digitalWrite(DG,HIGH); digitalWrite(cewkad,LOW); digitalWrite(DD,LOW); } else if (jazda < 0) { digitalWrite(cewkag,LOW); digitalWrite(DG,LOW); digitalWrite(cewkad,HIGH); digitalWrite(DD,HIGH); } else { digitalWrite(cewkag,LOW); digitalWrite(DG,LOW); digitalWrite(cewkad,LOW); digitalWrite(DD,LOW); } } Zmieniłem wartości H na wartosc_gora i L na wartosc_dol - myślę że tak jest czytelniej, obecnie walczę z przyciskami bezpośredniego dojazdu do zapisanej wysokości trochę nie działają tak jak bym chciał. Na tą chwilę po wciśnięciu przycisku i puszczeniu dojeżdża do zapamiętanej pozycji góra i dół ale tylko raz i później jakby blokował się program(nie mogę już nic wykonać) myślę że źle jest zdefiniowany else... nie wiem czy dobrze myślę ale przy takim założeniu jak mam i wykonaniu dojazdu do zapamiętanej pozycji trzeba zmienić mu stan z powrotem na wysoki ? Hmm taka myśl mnie naszła że chyba lepiej przypisać ten stan do przycisku po którym się on zmienia a nie do stanu bo to jakaś głupota teraz wyszła - przykład jak nie pisać kodu Pozdrawiam.
  7. Zastosowałem się do powyższych sugestii i muszę przyznać że "chodzi jak złoto"
  8. A co masz wybrane w narzędziach może tam jest coś nie tak może rezonator kwarcowy jest źle wybrany ?
  9. Witam,chciałbym mieć możliwość zapisu do pamięci eeprom dwóch pozycji góra i dół(w programie H i L) i mam taką zagawostkę od czego uzależnić wartości H i L żeby później można było je odczytać(jako dwie inne wartości wysokości) i porównać w dalszych etapach. Czy jak np uwarunkuje je od odczytu z czujnika to nie zapisze wartości H i L jako tej samej wysokości ? Problem zaczyna się w //ZAPIS USTAWIONEJ WYSOKOŚCI : #include <EEPROM.h> #include <Bounce2.h> #define przycisk_zapisu_wysokosci 4 // przycisk zapisujący ustawioną wysokość do pamięci eeprom #define przycisk_do_gory 6 #define przycisk_na_dol 7 #define DZW 11 // dioda zapisu wysokości #define przycisk_regulacji 5 //przycisk umozliwiający regulację zapisanej wysokości #define potencjometr A1 // potencjometr ustawiający pozycję do zapisu #define czujnik A2 // potencjometr -czujnik #define DG 12 // dioda do góry #define DD 13 // dioda na dół #define przycisk 8 // przycisk #define cewkag 10 //cewka rozdzielacza do góry #define cewkad 9 //cewka rozdzielacza na dół #define przycisk_gora_dol A4 // przycisk umożliwiający bezpośredni ruch do zapisanej wartości do góry albo w dół Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); Bounce debouncer3 = Bounce(); Bounce debouncer4 = Bounce(); Bounce debouncer5 = Bounce(); Bounce debouncer6 = Bounce(); int H; int L; void setup() { pinMode(przycisk_zapisu_wysokosci,INPUT_PULLUP); pinMode(potencjometr,INPUT); pinMode(czujnik,INPUT); pinMode(przycisk,INPUT_PULLUP); pinMode(DG,OUTPUT); pinMode(DD,OUTPUT); pinMode(DZW,OUTPUT); pinMode(cewkag,OUTPUT); pinMode(cewkad,OUTPUT); pinMode(przycisk_do_gory,INPUT_PULLUP); pinMode(przycisk_na_dol,INPUT_PULLUP); pinMode(przycisk_regulacji,INPUT_PULLUP); pinMode(przycisk_gora_dol,INPUT_PULLUP); digitalWrite(cewkag,LOW); //domyślnie cewka wyłączona digitalWrite(cewkad,LOW); debouncer1.attach(przycisk); debouncer1.interval(30); debouncer2.attach(przycisk_zapisu_wysokosci); debouncer2.interval(30); debouncer3.attach(przycisk_do_gory); debouncer3.interval(40); debouncer4.attach(przycisk_na_dol); debouncer4.interval(40); debouncer5.attach(przycisk_regulacji); debouncer5.interval(30); debouncer6.attach(przycisk_gora_dol); debouncer6.interval(30); Serial.begin(9600); delay(100); } void loop() { //debouncing przycisków : debouncer1.update(); int stan1 = debouncer1.read(); debouncer2.update(); int stan2 = debouncer2.read(); debouncer3.update(); int stan3 = debouncer3.read(); debouncer4.update(); int stan4 = debouncer4.read(); debouncer5.update(); int stan5 = debouncer5.read(); debouncer6.update(); int stan6 = debouncer6.read(); H = EEPROM.read(0); //odczyt zapisanej wysokość góra L = EEPROM.read(1); //odczyt zapisanej wysokość dół int pozycja = analogRead(czujnik)/4 ; //odczyt pozycji czujnika //pozycja = map(pozycja,0,400,0,1023)/4; //przeskalowanie zakresu czujnika na odpowiedni zakres sterowania int sterowanie = analogRead(potencjometr)/4; //odczyt potencjometru do ustawiania pozycji int hist = 3; //histereza int8_t jazda; //USTAWIANIE WYSOKOŚCI DO ZAPISU if (stan1 == LOW) { //wcisnięty przycisk if (pozycja < sterowanie - hist) jazda = 1; // jazda do góry else if (pozycja > sterowanie + hist) jazda = -1; //jazda w dół else jazda = 0; // stop } else { // przycisk puszczony jazda = 0; // nigdzie nie jedziemy } //ZAPIS USTAWIONEJ WYSOKOŚCI if(stan1 == LOW && stan2 == LOW){ // jeżeli stan2 == low zapis ustawionej wysokosci do pamięci digitalWrite(DZW,HIGH); if (pozycja > 127) EEPROM.update(0,H); if (pozycja < 127) EEPROM.update(1,L); } else digitalWrite(DZW,LOW); Serial.println("wysokość dół "); Serial.println(L); Serial.println("wysokość góra "); Serial.println(H); //BEZPOŚREDNI DOJAZD DO ZAPISANYCH WYSOKOŚCI ZA POMOCĄ PRZYCISKÓW if(stan6 == LOW) { if (stan3 == LOW) { //wcisnięty przycisk w górę if (pozycja < H - hist) jazda = 1; else if (pozycja > H + hist) jazda = -1; } if (stan4 == LOW ) { //wcisnięty przycisk w dół if(pozycja > L + hist ) jazda = -1; else if(pozycja < L -hist) jazda = 1; } } if (jazda > 0) { digitalWrite(cewkag,HIGH); digitalWrite(DG,HIGH); digitalWrite(cewkad,LOW); digitalWrite(DD,LOW); } else if (jazda < 0) { digitalWrite(cewkag,LOW); digitalWrite(DG,LOW); digitalWrite(cewkad,HIGH); digitalWrite(DD,HIGH); } else { digitalWrite(cewkag,LOW); digitalWrite(DG,LOW); digitalWrite(cewkad,LOW); digitalWrite(DD,LOW); } } Pozdrawiam Waldek.
  10. Podaj więcej szczegółów Na co wgrywasz,czym co masz wybrane itp. A najprawdopodobniej to sprawdź czy wszystkie kabelki masz podłączone tak jak powinny być jeśli nie używasz podstawki.
  11. Mały update tematu,wrzucam poprawiony kod programu (na płytce stykowej działa). Dodatkowo schemat oraz wstępny projekt płytki.Może komuś też się przyda bądź będzie rozwijał dalej temat według własnych upodobań Całość wykonana jest w EasyEDA Tutaj odnośnik do całości klik Mile widziane sugestie co do schematu bądź wartości elementów,pozdrawiam Waldek. Projekt_EHR_wersja_1.rar schemat.pdf
  12. Wrzuciłem z poprawkami i działa aż miło się patrzy ^^. Tutaj pytanie chcę uzyskać kąt 70 stopni na czujniku - zakres pracy ramienia 0 -70 (orientacyjnie bo i tak pewnie wszystko się zweryfikuje na maszynie). Pomysł jest taki; fizycznie ustawić zadany kąt i odczytać wystawianą wartość ADC, później przeskalować ją do zakresu w jakim pracuje potencjometr zadający pozycje czyli 0 - 1023 tak żeby wykorzystać jego pełen zakres pracy/obrotu z uwagi na wygodę użytkowania. Czy warto by było zrobić na odwrót ? A może przeskalować obydwa potencjometry na "jakiś" wspólny zakres ? Chodzi mi o to żeby uzyskać relatywnie dobrą dokładność jeśli można to tak określić.
  13. Mnie też pomagają Plik w załączniku. Wszystko jest na warstwie Top to też jak będziesz chciał sam robić to musisz wydrukować w lustrzanym odbiciu żeby się zgadzało później no chyba że nie będą Ci przeszkadzać ścieżki razem z komponentami. liso.rar
  14. To można powiedzieć tak Waldy you... i będzie sprawiedliwie Dziękuje za rozwiązanie zagadki -> tutaj musiał zadziałać prawdziwy majster a nie taki rzemieślnik jak ja... Kolejne wyzwanie przeskalowanie potencjometru(czujnika) na kąt 70 stopni,może być ciekawie ^^.
×
×
  • Utwórz nowe...