Arduino Polska Forum

Pełna wersja: 2 komparatory + mala logika
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
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 Smile

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 Smile

Mysle ze to jest zrozumiale Smile

Zycze milego wtorku Smile
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);
}
będziesz miał to, co planujesz. Niestety dokładność będzie mała i to 1023 będziesz musiał zmniejszyć o jakąś wartość i nie będziesz wtedy miał zadziałania wyjścia nr 1 poniżej 5V tylko np. 4,87V.
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)
   digitalWrite(OUTPUT_PIN_2, HIGH);
}

Jeżeli zaś chodzi o wysterowanie trzeciego wyjścia:
Kod:
if (digitalRead(OUTPUT_PIN_1)) {  // gdy wyjście 1 w stanie HIGH
   digitalWrite(OUTPUT_PIN_3, LOW);  // ustaw pin wyjscia 3 w stan LOW
}
else if (digitalRead(OUTPUT_PIN_2)) {  // gdy wyjście 1 nie w stanie HIGH i wyjście 2 w stanie HIGH
   digitalWrite(OUTPUT_PIN_3, HIGH); // ustaw pin wyjścia 3 w stan HIGH
}
else {
   digitalWrite(OUTPUT_PIN_3, LOW)); // tu musisz wybrać jaki stan ma mieć wyjście 3 gdyby dwa pozostałe były LOW
}
Jak coś jest niejasne pisz.
"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 Smile zrobie dzielnik napiecia na opornikach. Te wejscia sa chyba bardzo wysoko omowe.
Witam z rana Smile
Laczylem to w rozne strony , niestety bezskutecznie
a tu czsu malo Sad

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() {
//tu chyba musi cos jeszcze byc .
}

void loop() {

if (analogRead(INPUT_PIN_1) < 1023) { //podzial a/d rozumie
  digitalWrite(OUTPUT_PIN_1, HIGH);
}
if (analogRead(INPUT_PIN_2) < X) { // gdzie X to obliczona wartość - dla 4,33V będzie 4,33/5 * 1023 czyli ok 887)
  digitalWrite(OUTPUT_PIN_2, HIGH)}
}
if (digitalRead(OUTPUT_PIN_1)) {  // gdy wyjście 1 w stanie HIGH
  digitalWrite(OUTPUT_PIN_3, LOW);  // ustaw pin wyjscia 3 w stan LOW
}
else if (digitalRead(OUTPUT_PIN_2)) {  // gdy wyjście 1 nie w stanie HIGH i wyjście 2 w stanie HIGH
  digitalWrite(OUTPUT_PIN_3, HIGH); // ustaw pin wyjścia 3 w stan HIGH
}
else {
  digitalWrite(OUTPUT_PIN_3, LOW)); // tu musisz wybrać jaki stan ma mieć wyjście 3 gdyby dwa pozostałe były LOW
}
}
Kaczakat: Wstawiłem kod programu w znaczniki kod.
lad compilatora:
Compilation error: 'INPUT_PIN_1' was not declared in this scope
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.
Witam Smile



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 Wink

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 ?
Jasne, ulgą w cierpieniu jest kurs Arduino, online, darmowy.
https://forbot.pl/blog/kurs-arduino-pods...rsu-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.
Metodą prób i błędów , doszlem do tego - Sam Smile
Mam kilka kursow z neta ktore mi pomogly.
Wszystko działa Smile
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. Smile

Dziekuje wszystkim za pomoc Smile
Jak masz telefon z Androidem to jest aplikacja typu terminal, ja mam np. tą https://play.google.com/store/apps/detai...l=pl&gl=US
Od strony ESP kod ma mniej linijek niż doświadczony stolarz palców:
https://randomnerdtutorials.com/esp32-bl...duino-ide/
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]
Stron: 1 2 3