2 komparatory + mala logika - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: 2 komparatory + mala logika (/watek-2-komparatory-mala-logika) |
2 komparatory + mala logika - wowo - 11-07-2023 Witam wszystkich. Ucze sie dalej -a ile zakumam to potem to utrwalam. Sytuacja mnie wzmusila zeby znow poprosic o szybka akcje naszych specjalistow. Zrobilem uklad elektryczny do odzysku ostatnich dechow solara nawet po zachodzie slonca. A na arduino chcialem zrbobic taki malutki kontroler tego : wykorzystujacy wejscia analogowe . Wiem ze dla wiekszosci forumowiczow to zadanie na jedno posiedzenie A o co chodzi: jedno wejscie analogowe mierzy napiecie dolne wiec5 volt .i daje jedynke na wyjsciu cyfrowym kiedy jest ponizej pieciu volt drugie wejscie analogowe mierzy napiecie gorne 13V i daje jedynke kiedy napiecie jest wyzsze niz 13V - na drugim wyjsciu cyfrowym. i do tego troszke logiki : kiedy pierwsze "jedynka" - to wyjscie 3 daje 0. Kiedy drugie jedynka , to czeka az dostanie pierwsze "jedynka"a w tym casie wyjscie 3 daje "jeden". A kiedy osiagnie pierwszy znow "jedynke" to sekwencja sie powtarza Mysle ze to jest zrozumiale Zycze milego wtorku RE: 2 komparatory + mala logika - MadMrQ - 11-07-2023 Na początek przestroga żebyś przypadkiem tych 13V bezpośrednio pod analoga nie podpiął Pomiar napięcia na wejściu analogowym masz w zakresie 0 - 5V i jeżeli chcesz mierzyć wartości większe od 5V to coś dodatkowo musi się w tym obwodzie znaleźć. 1) wejście analogowe jako max. ma 5V i mikrokontroler taką wartość widzi jako 1023. Czyli teoretycznie jak napiszesz: Kod: if (analogRead(INPUT_PIN_1) < 1023) { Dla uniknięcia takiego zjawiska możesz dać dzielnik napięcia i z 5V zrobić 4V i to wrzucać na wejście analogowe. Stracisz troszkę rozdzielczości pomiaru. 2) jeżeli chodzi o 13V - tutaj zmniejszenie tego napięcia do tolerowanych przez Arduino wartości jest koniecznością. W zależności od krotności zmniejszenia napięcia (np. z 13V robisz 13/3 czyli 4,33V) odpowiednio dobierasz wartość w ifie z analogRead: Kod: if (analogRead(INPUT_PIN_2) < X) { // gdzie X to obliczona wartość - dla 4,33V będzie 4,33/5 * 1023 czyli ok 887) Jeżeli zaś chodzi o wysterowanie trzeciego wyjścia: Kod: if (digitalRead(OUTPUT_PIN_1)) { // gdy wyjście 1 w stanie HIGH RE: 2 komparatory + mala logika - wowo - 11-07-2023 "Na początek przestroga żebyś przypadkiem tych 13V bezpośrednio pod analoga nie podpiął Smile Pomiar napięcia na wejściu analogowym masz w zakresie 0 - 5V i jeżeli chcesz mierzyć wartości większe od 5V to coś dodatkowo musi się w tym obwodzie znaleźć. 1) wejście analogowe jako max. ma 5V i mikrokontroler taką wartość widzi jako 1023. Czyli teoretycznie jak napiszesz: Kod: if (analogRead(INPUT_PIN_1) < 1023) { digitalWrite(OUTPUT_PIN_1, HIGH);" } Dziekuje za porade zrobie dzielnik napiecia na opornikach. Te wejscia sa chyba bardzo wysoko omowe. RE: 2 komparatory + mala logika - wowo - 13-07-2023 Witam z rana Laczylem to w rozne strony , niestety bezskutecznie a tu czsu malo Compiler wywala ciagle jakies bledy ktorych jeszcze nie kumam jak sie nalezy. I juz nie wiem co dalej... Poukladalem to tak: choc nie wiem czy to wogole dobrze Kod: void setup() { lad compilatora: Compilation error: 'INPUT_PIN_1' was not declared in this scope RE: 2 komparatory + mala logika - kaczakat - 14-07-2023 Przed sekcją setup powinieneś zdefiniować, zadeklarować co to jest INPUT_PIN_1, X, itd. Piny uC są domyślnie wejściami , więc w setup nic tu więcej robić nie trzeba, można odczytywać funkcjami Arduino stan pinów cyfrowych i analogowych, ale do funkcji dititalWrite trzeba dodać informcję, że ten pin OUTPUT jest OUTPUT. W Arduino IDE masz przykłady, miganie led, odczyty analoga, przyciski, otwórz te programy, zrób swoje wersje, pomigaj, pomodyfikuj, obyj się z tematem. RE: 2 komparatory + mala logika - wowo - 16-07-2023 Witam Ciezko mi dojsc do tego co teraz zrobic, dlatego ze wogole nie mam pojecia o co chodzi z tymi nawiasami , zawiasami, klamrami itd. itp. Moze by Pomogl ktos ulzyc w tym cierpieniu a to- co wyprodukowalem : void setup() { pinMode(4, INPUT) ; pinMode(16, OUTPUT) ; pinMode(17, OUTPUT) ; pinMode(18, OUTPUT) ; } void loop() { if (analogRead(4) < 791) { digitalWrite(16, HIGH) ; } else if (analogRead(4) > 810) { digitalWrite(17, HIGH) ; } if (digitalRead(16)) { digitalWrite(18, LOW); } else if (digitalRead(17)) { digitalWrite(18, HIGH); } else { digitalWrite(18, HIGH); // tu musisz wybrać jaki stan ma mieć wyjście 3 gdyby dwa pozostałe były LOW } } Prosze mi powiedziec co dokladnie oznacza pin? [attachment=1363] np. input : 26, 4, czy 10 ? i np. output : 27 czy 16 ? RE: 2 komparatory + mala logika - kaczakat - 17-07-2023 Jasne, ulgą w cierpieniu jest kurs Arduino, online, darmowy. https://forbot.pl/blog/kurs-arduino-podstawy-programowania-spis-tresci-kursu-id5290 Albo możesz chodzić po forach i prosić o indywidualny kurs i wyjaśnienia, które już czekają w linku powyżej. PIN nic nie znaczy, wszystko zależy od kontekstu. Zazwyczaj pin to drucik wystający z płytki. W ESP jest to bardziej pomieszane, dlatego na początek lepiej użyć UNO/NANO. W przypadku załączonego obrazku odwołanie do pinu 26 będzie robić coś na pinie GIOP26, albo nie będzie nic robić. Niektóre piny są wyłączone z użycia, jak np. 6-11. Kolumny najbliżej płytki ESP32 ułożone ładnie po kolei to piny fizyczne płytki i nie mają żadnego znaczenia w programie, jest tu też błąd, bo 2x jest pin 20 i nie ma 21. RE: 2 komparatory + mala logika - wowo - 17-07-2023 Metodą prób i błędów , doszlem do tego - Sam Mam kilka kursow z neta ktore mi pomogly. Wszystko działa a zrobiłem to tak: #define out_1 16 #define out_2 17 #define out_3 18 #define in_1 4 void setup() { pinMode(in_1, INPUT) ; pinMode(out_1, OUTPUT) ; pinMode(out_2, OUTPUT) ; pinMode(out_3, OUTPUT) ; } void loop() { if (analogRead(in_1) < 409) {digitalWrite(out_3, LOW); } if (analogRead(in_1) > 500) { digitalWrite(out_3, HIGH) ; } } zmniejszylem zakres napiec poniewaz teraz jest noc i sie condensatory bardzo dlugo laduja. Ten uklad ma tez bloototha , ale zeby ogladac napiecie na smartfonie to wysza szkola jazdy pewnie jest , i jeszcze do tego trzeba apke miec ktora to wyswietli . No nic , noc jest wiec pomarzyc mozna. Dziekuje wszystkim za pomoc RE: 2 komparatory + mala logika - kaczakat - 17-07-2023 Jak masz telefon z Androidem to jest aplikacja typu terminal, ja mam np. tą https://play.google.com/store/apps/details?id=de.kai_morich.serial_bluetooth_terminal&hl=pl&gl=US Od strony ESP kod ma mniej linijek niż doświadczony stolarz palców: https://randomnerdtutorials.com/esp32-bluetooth-classic-arduino-ide/ RE: 2 komparatory + mala logika - wowo - 17-07-2023 A tak wyglada juz 100 % dzialajaca kontrola ladowania , i dopisany ten kod do bloototh. Kompilator to wszystko kompiluje bez bledu ale telefon jak narazie esp nie widzi. Kod: #define out_1 16 #define out_2 17 #define out_3 18 #define in_1 4 #include "BluetoothSerial.h" #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif BluetoothSerial SerialBT; void setup() { Serial.begin(115200); SerialBT.begin("ESP32test"); //Bluetooth device name Serial.println("The device started, now you can pair it with bluetooth!"); pinMode(in_1, INPUT) ; pinMode(out_1, OUTPUT) ; pinMode(out_2, OUTPUT) ; pinMode(out_3, OUTPUT) ; } void loop() { if (Serial.available()) { SerialBT.write(Serial.read()); } if (SerialBT.available()) { Serial.write(SerialBT.read()); } delay(20); if (analogRead(in_1) < 3160) {digitalWrite(out_3, LOW); } if (analogRead(in_1) > 3614) { digitalWrite(out_3, HIGH) ; } } To jest dokladnie ten esp co mam: [attachment=1364] |