Skocz do zawartości

Kontrola napięcia zasilania sieciowego


Gienekb

Pomocna odpowiedź

Chcę kontrolować napięcie sieciowe (pośrednio kontrolując +5V z zasilacza) za pomocą arduino Nano. Nie jestem jednak "mocarzem" w arduino i szukam rozwiązania.

Mam "kawałek" sketcha do odczytu poziomu pinu cyfrowego:

void setup() {
 Serial.begin(9600);
 pinMode(5, INPUT_PULLUP);
}

void loop() {
 byte value = digitalRead(5);
 Serial.print(F("Wejscie cyfrowe 5 ma wartosc: "));
 if (value == LOW) {
   Serial.println(F("LOW"));
 }

 else {
   Serial.println(F("HIGH"));
 }

 delay(500);
}

Program wykonuje się poprawnie, ale wysyła informacje co 500ms.

Mnie interesuje tylko jednorazowa zmiana stanu LOW/HIGH i odwrotnie. Może bardziej szczegółowo: oczekuję komunikatu (jednorazowego) tylko po zmianie poziomu pinu.

Proszę o wyrozumiałość i podpowiedź.

Link do komentarza
Share on other sites

Dopiero się uczę, ale myślę, że do tego nadadzą się przerwania. Można kontrolować pin i wywołać funkcję(w tym przypadku informującą o stanie na danym pinie) podczas zmiany z HIGH na LOW i odwrotnie(reakcja CHANGE)

Wszystko wyjaśnione jest w kursie Arduino II #4 na blogu .

Link do komentarza
Share on other sites

Dzięki za odzew. Pomysł może dobry, ale u mnie pojawiają się nowe problemy. Arduino Nano ma dwa dostępne przerwania D2 i D3, a na tych pinach mam zaimplementowane połączenie z modemem. Jak powiększyć ilość przerwań , to "już wyższa szkoła jazdy", a jak zaznaczyłem - "mocarzem nie jestem"

Link do komentarza
Share on other sites

W takim razie możesz dodać jakąś flagę. Przykladowa zmienną isHigh, która przyjmie wartość 1, gdy zarejestrowane wcześniej był stan wysoki i 0 gdy niski. W pętli wrzucasz po prostu instrukcję:

if(digitalRead(5) == LOW && isHigh == 1)
{
Serial.println("low");
isHigh = 0;
}
if(digitalRead(5) == HIGH && isHigh == 0)
{
Serial.prinln("high");
isHigh = 1;
}

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Dzięki za sugestie.

Zastosowałem się do podpowiedzi, wstawiłem kod do void loop(), ale "zaraza milczy" 😃

W konsoli nie widzę żadnych reakcji po zmianie poziomu na pinie 5. Chyba z ta flagą isHigh coś źle robię (deklaruję).

Link do komentarza
Share on other sites

Ja zadelkarowalem po prostu int isHigh = 1;

W setupie dodalem jeszcze digitalWrite(5, LOW) bo zauwazylem ze na tym pinie u mnie wystepowalo napiecie ok 4,5V bez tej deklaracji.

Dodalem jeszcze minimalne opoznienie w pętli głównej, bo podczas zwierania/rozwierania przewodu podlaczonego do 5. Pinu zaklocenia powodowaly wyswietlanie kilkakrotne informacji na przemian. Mase baterii 4,5V podlaczylem do GND Arduino i za pomocą zworki połączonej z pinem 5 dotykalem + baterii. Uzyskałem zamierzony efekt.

Niemniej jednak prosiłbym kogoś bardziej doświadczonego o opinie na temat takiego testu. Czy łączenie baterii w ten sposób do płytki jest bezpieczne?

Link do komentarza
Share on other sites

Dzięki za kolejne podpowiedzi.

Robiłem testy i nie do końca problem rozwiązany.

Ze względu na konstrukcję urządzenia pin D5 jest "podciągnięty" do + zasilania (pinMode(5, INPUT_PULLUP)😉, dlatego zmieniłem int isHigh = 0;. Zadeklarowałem digitalWrite(5, HIGH);

Po kompilacji i uruchomieniu programu, gdy na D5 jest LOW, to nic się nie dzieje. Gdy ustawię D5 HIGH i uruchomię program, to jest powiadomienie. Gdy teraz zmienię stan pinu na LOW to też jest powiadomienie. Nie bardzo wiem dlaczego tak się dzieje.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.