Liczba postów: 19
Liczba wątków: 3
Dołączył: Apr 2020
Reputacja:
0
Plan jest taki aby przez drabinkę rezystorową z podpiętymi przyciskami sterować wyjściami analogowymi kilkoma po kolei. W kwestii wyjaśnienia: drabinka rezystorową zmapowana zamiast potencjometru i zależności od wciśniętego przycisku program zadaje odpowiednie wypełnienie na kolejne wyjścia pwm.
Ktoś ma jakiś pomysł?
Nie mam pomysłu jak zmusić program do oczekiwania na wciśnięcie przycisku. Jedyne co przychodzi mi do głowy to delay po poleceniu wciśnij przycisk na LCD i konieczność trzymania go do momentu zakończenia "delay" oraz następny delay aby nie przetrzymać i nie zaprogramować kolejnego wyjścia niechcący.
Chyba że zatrzymać pustą pętlą i zastosować przerwanie przez wciśnięcie przycisku.
Liczba postów: 356
Liczba wątków: 5
Dołączył: Aug 2019
Reputacja:
28
06-05-2020, 09:24
(Ten post był ostatnio modyfikowany: 06-05-2020, 09:28 przez Agregacik.)
Hm, nie za bardzo wyobrażam sobie co chcesz zrobić. Może jakiś schemacik blokowy chociaż, aby można było do czegoś się odnieść, zapytać.
Liczba postów: 898
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
44
Przecież to prosto jak budowa cepa.. Chcę odczytywać ADC I podzielić zakresy. Każdy zakres to inne wypełnienie PWM nawet nie trzeba funkcji mapowania... Odpowiednie flagi i bez przerwań może się odbyć...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 19
Liczba wątków: 3
Dołączył: Apr 2020
Reputacja:
0
Jarewa muszę zaznaczyć że jestem zielony i dlatego zadaje takie kuriozalne pytania. Chcę 1 klawiaturę wykorzystać do wysterowania wyjść w kolejnych kilku transoptorach podłączanych do wyjść adc w uC i wiedząc że program leci w kółko pragnę go zmusić do zapytania mnie jaka wartość chce mieć na 1 wyjściu i zaczekania aż wcisnę przycisk. To samo na następnych kilku wyjściach. Nie chcę robić sobie gry na czas czy zdążę zanim przeskoczy na następne wyjscie. Nie mogę znaleźć przykładu takiego kodu nawet na zapalenie diody dlatego pytam o pomysł.
Liczba postów: 356
Liczba wątków: 5
Dołączył: Aug 2019
Reputacja:
28
06-05-2020, 14:14
(Ten post był ostatnio modyfikowany: 06-05-2020, 14:17 przez Agregacik.)
Czyli "naduszasz" jakiś przycisk i program wchodzi w tryb ustawiania. Dalej "naduszsz" przycisk i program ustawia na pierwszym wyjściu PWM wartość odpowiadającą temu przyciskowi. Program następnie przechodzi do ustawienia kolejnego PWMa. Po drodze można jeszcze dać przycisk OK.
Najlepiej zrobić to tak.:
Naciskasz przycisk programowanie, wybierasz który PWM chcesz ustawić (przyciski od 1 do n) naciskasz OK. Teraz program pyta się jaką wartość chcesz "zapodać", naciskasz przycisk program pyta się czy taką chcesz jak się nie pomyliłeś to wciskasz OK jak paluszek nie trafił w odpowiedni klawisz to poprawiasz "zapodanie" naciskając inny przycisk. Jak już masz odpowiednią wartość naciskasz OK.
Do tego potrzebny jeszcze wyświetlacz abyś wiedział co się dzieje i gdzie jesteś w labiryncie programowania.
To wszystko da się zrobić bez delay, przerwań i nie trzeba się spieszyć, aby zdążyć. Program poczeka na Ciebie i całe wieki, chyba że dasz jakieś wytyczne po jakim czasie ma wyjść z trybu programowania, po ostatnim naciśnięciu klawiatury, oczywiście bez zapisywania ustawień.
Zapodaj jakiś schemacik to pomyślę jak będę miał czas i coś podpowiem. Jaka klawiatura, z iloma przyciskami.
Liczba postów: 2,401
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
242
Ja jeszcze tylko dopiszę, że jak wchodzisz w jakieś menu (a do tego sprowadza się wybór i zmiana opcji) to wcale nie oznacza, że program ma stać w części programu menu i czekać na jakiś przycisk. Program ma po kolei realizować zadania w loop i dochodząc do funkcji "menu" ma wyświetlić aktualną pozycję/opcję na podstawie zapisanych w pamięci zmiennych i to tylko wtedy gdy ekran wygląda inaczej niż przy poprzednich odwiedzinach w tym miejscu. Kiedyś robiłem przegląd bibliotek do menu i robiłem taki test, w loop migający led co 100ms, jeśli po wejście w menu led zamierał, to takie menu jest nic nie warte. A takie też znalazłem. Dla kilku zmiennych nie jest potrzebne rozbudowane menu, wystarczy tablica.
Z kolei każde naciśnięcie przycisku powinno być rozpatrywane w kontekście jaka jest wartość zmiennej kursor, może być menu nieaktywne czy też kursor ustawiony na określonej pozycji menu, łatwo to powiązać i zmieniać właśnie tę zmienną.
Całość mogłaby się odbywać bez ekranu, to tylko wizualne odzwierciedlenie stanu menu.
Liczba postów: 19
Liczba wątków: 3
Dołączył: Apr 2020
Reputacja:
0
07-05-2020, 00:26
(Ten post był ostatnio modyfikowany: 07-05-2020, 00:29 przez Jacek468.)
Panowie sprawa widzę wymaga wyjaśnień. Chcę wysterować komputer sterujący kopalnianą maszyną transportową z silnikiem spalinowym. Silnik jest sprzęgnięty z pompą hydrauliczną, która daje medium na siłowniki hamulca, docisku kół, magistralę główną itd. Przetworników cisnienia jest 5. Chcę zasymulować komputerowi maszyny że silnik pracuje. Aby to zrobić muszę wysterować sygnały z przetworników cisnienia. Mając do dyspozycji 6 wyjść pwm chcę poprzez transoptory zasymulować komputerowi odczyty na odpowiednie wejścia. W poprzednim temacie prosiłem o pomoc w wysterowaniu transoptora, który w zależności od ustawienia potencjometru przepuści na 12V maksymalnie 6mA. Temat opanowany ale... Nie mogę wysterować transoptora bez mapowania sygnału z potencjometru. Kiedy przypisuję analogWrite(analogRead(A5)) transoptor działa poprawnie do połowy obrotu potencjometru tzn otwiera tranzystor od 0 do 100% ale kręcąc dalej zaczyna od nowa do ok 1/3 zakresu. Potencjometr 500ohm. Czy ma to związek z wartością potencjometru? Przy mapowaniu jestem w stanie to opanować. Myslałem o połączeniu kilku przycisków równolegle z 5V do adc przez rezystory różnych wartosci i w zależności od tego który wcisnę nadawać odpowiedni sygnał analogowy. Ale to moje nieszczęsne mapowanie... Jednak skoro program może na ten sygnał poczekać to widzę że dobrym i dokładniejszym sposobem jest zostać przy potencjometrze. No więc tak: odpalenie programu, pytanie o wartość na 1 przetworniku, ustawienie wartości potencjometrem, potwierdzenie wartości, przejście do następnego przetwornika (tzn pwm). Oprócz tego mam jeszcze na tym złomie czujniki temperatury i czujniki prędkości obrotowej silnika i prędkości jazdy ale na razie chcę opanowac przetworniki ciśnienia. Po jednym kroku naprzód bo nie chciałbym to dostać gotowca, z którego nic nie zrozumiem tylko czegoś się nauczyć. Dysponuje Arduino Uno, wyświetlaczem 2x16 ale bez przystawki do I2c więc muszę w deklaracji zmienić wyjścia i uwolnić te z pwmami. Mam też klawiaturę membranowa ale boję się za dużo wprowadzać dla siebie komplikacji.
To moje dotychczasowe wypociny:
#include <LiquidCrystal.h> //Dołączenie bilbioteki
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza
#define pwmPin 9
float odczytanaWartosc;
void setup() {
pinMode(13, OUTPUT);
pinMode(pwmPin, OUTPUT);
Serial.begin(9600);//Uruchomienie komunikacji przez USART
lcd.clear();
}
void loop()
{
digitalWrite(13, LOW);
odczytanaWartosc = analogRead(A5);//Odczytujemy wartość napięcia
odczytanaWartosc= map(odczytanaWartosc, 0, 1024, 0, 255);
analogWrite(pwmPin, odczytanaWartosc);
float serial = (odczytanaWartosc)*8.3/255;
Serial.println(serial);
lcd.begin(16, 2); //Deklaracja typu
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("Prad czujnika"); //Wyświetlenie tekstu
lcd.setCursor(0, 1); //Ustawienie kursora
lcd.print(serial);
delay(300);
if (odczytanaWartosc >=100){
digitalWrite(13, HIGH);
}
}
Zdaje sobie sprawę że kilka linijek jest tam niepotrzebnych ale to pierwsza testowa wersja na której próbowałem zrozumiec to i owo. Ten dziwny mnożnik 8.3/255 pozwala na LCD wskazać wartość prądu w obwodzie 12V transoptora. Wiem że długa droga przede mną...
Pozdrawiam
Liczba postów: 356
Liczba wątków: 5
Dołączył: Aug 2019
Reputacja:
28
Hm dlaczego dziwisz się, że bez mapowania nie działa poprawnie. Przecież wartość odczytywana analogRead(A5) zmienia się od 0 do 1024 a wartości jakie można podstawiać do analogWrite to 0 do 255. Wartość potencjometru 500om wydaje się trochę mała w sensie, że niepotrzebnie płynie stosunkowo duży niepotrzebny prąd, 5V / 500om = 10mA . Wystarczyłby potencjometr 5kom.
Do wyświetlacza proponuję dokupić "przejściówkę" na I2C są gotowe tylko wlutować i działa. Jest to wygodniejsze rozwiązanie i pinów potrzebnych do innych zastosowań zostaje.
Do pomiaru obrotów zostaw sobie piny, które obsługują przerwania zewnętrzne, w UNO piny 2 i 3.
Teraz dodam, że PWMy wykorzystują timery wewnętrzne, które może trzeba będzie wykorzystać do pomiaru obrotów jak już do tego dojdziesz. Nie wiem czy nie lepiej od razu przejść na Arduino Mega ma więcej timerów. W tej kwestii niech wypowiedzą się jednak mądrzejsi. Może można to jakoś obejść albo pomiary obrotów zrobić inaczej.
Liczba postów: 19
Liczba wątków: 3
Dołączył: Apr 2020
Reputacja:
0
W moim przypadku nie potrzebuje pomiaru obrotów a tylko impulsator o odpowiedniej częstotliwości. Muszę tylko sprawdzić parametry oryginalnego czujnika i rozmyślam nad układem na Ne555 tylko potrzebuje obejrzeć sprzęgło na pompie i zgadnąć ile impulsów przypada na obrót wału. Maszyna ma wyświetlacz pokazujący wyniki pomiarów.