Arduino Polska Forum

Pełna wersja: Zliczanie impulsów dodanie 2 funkcji
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam serdecznie. 
Potrzebuję niewielkiej pomocy dla kogoś komu programowanie arduino nie jest obce.
Mianowicie zbudowałem sobie układ wg. schematu załączonego poniżej
[Obrazek: 7466047600_1517939618_thumb.jpg] 
Jest to licznik obrotu tarczy w liczniku energii elektrycznej.
Po pierwszych udanych próbach przydało by się przetestować działanie w praktyce.
Ale po kolei
Czujnik jest podłączony do arduino uno pod wejście Analogowe A1 przez rezystor 47kOhm.
Po przyłożeniu do licznika mam w zasadzie dwie wartości
-jak jest srebrna tarcza to pokazuje wartość 3173-3273
-jak jest czarna tarcza to pokazuje 3373, stałem tak przez 10min i za każdym razem się powtarzały te wartości.
Czy mógłbym poprosić o dodanie do istniejącego kodu (skleciłem kilka znalezionych w sieci który o dziwo działa) trzech funnkcji:
-zliczanie obrotów od 0-120  -tyle obrotów na kilowatogodzinę
-ustawienie z palca ilości kilowatogodzin które są aktualnie na liczniku -6 cyfr
-po odliczeniu 120 impulsów  dodanie do kilowatogodzin +1 (kilowatogodzina)
i to już w ramach luzu jak się da- za pomocą przycisku włączanie podświetlenia lcd na 15s - z racji tego iż na czas testów całość będzie uruchomiona z powerbanku.

Czy ja nie wymagam za wiele? Angel
mój kod do obsługi lcd i2c oraz wyświetlania danych z wejścia analogowego A1- jeżeli są tam jakieś głupoty 
to od razu się przyznaję bez bicia, że sam się dziwię że działaSmile)
Kod:
// include the library code:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

int cny70 = A1;

void setup()
{
// set up the LCD's number of columns and rows:
lcd.init();                      // initialize the lcd
lcd.clear();
lcd.backlight();
lcd.setCursor(3,0);

pinMode(cny70, INPUT);
}

void loop()
{
lcd.setCursor(0,0); // Sets the cursor to col 0 and row 0
lcd.print("Odczyt: "); // Prints Sensor Val: to LCD
lcd.print(analogRead(cny70)); // Prints value on cny70 to LCD
}
Pozdrawiam serdecznie
Użyj do tego wewnętrznego timera ,możesz użyć przerwania int .
Dodatkowo pamiętaj ze jeżeli zliczasz pole czarne masz jedna krawędź ,ale jak zaczynasz zliczać jasna cześć to krawędzie masz 2 i wartość musisz podzielić przez 2 .
Aby to zobrazować (białe czarne białe ) przekład na język binarny gdy zliczasz.
-Czarne 010
-Białe 101