Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kontrola napięcia zasilania sieciowego

Autor Wiadomość
Gienekb 



Posty: 4
Wysłany: 13-09-2017, 22:43   Kontrola napięcia zasilania sieciowego

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:
Kod programu: Zaznacz cały

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ź.

Warto przeczytać » Kurs Arduino, poziom II - #1 - wstęp, spis treści


Postaw piwo autorowi tego posta
 
 
G0R0 



Posty: 3
Programuję w:
C
Wysłany: 13-09-2017, 23:16   

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 .

Postaw piwo autorowi tego posta
 
 
Gienekb 



Posty: 4
Wysłany: 14-09-2017, 08:53   

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"

Postaw piwo autorowi tego posta
 
 
G0R0 



Posty: 3
Programuję w:
C
Wysłany: 14-09-2017, 09:26   

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ę:
Kod programu: Zaznacz cały
if(digitalRead(5) == LOW && isHigh == 1)
{
 Serial.println("low");
 isHigh = 0;
}
if(digitalRead(5) == HIGH && isHigh == 0)
{
 Serial.prinln("high");
 isHigh = 1;
}

 

Ostatnio popularny » Elastyczny układ elektroniczny z drukarki 3D


Ostatnio zmieniony przez G0R0 14-09-2017, 09:28, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Gienekb 



Posty: 4
Wysłany: 14-09-2017, 11:13   

Dzięki za sugestie.
Zastosowałem się do podpowiedzi, wstawiłem kod do void loop(), ale "zaraza milczy" :-D

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

Postaw piwo autorowi tego posta
 
 
G0R0 



Posty: 3
Programuję w:
C
Wysłany: 14-09-2017, 12:01   

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?

Postaw piwo autorowi tego posta
 
 
Gienekb 



Posty: 4
Wysłany: 14-09-2017, 19:49   

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.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Arduino, problem z o... Przysyłanie/Odbieran... Arduino - dziwne zac... Arduino i programowa...
lub przeszukaj forum po wybranych tagach: kontrola, napiecia, sieciowego, zasilania


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki