Skocz do zawartości

pitu2514

Użytkownicy
  • Zawartość

    4
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O pitu2514

  • Ranga
    1/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Słuchajcie, mam kolejny problem. Muszę dane o "odbiciach" pracowników przesłać na serwer. Znalazłem darmowy serwer firebase od googla, zakupiłem moduł ESP8266-01S(ma mi służyć za kartę sieciową). Problem w tym że na necie są praktycznie same poradniki na lepsze moduły ESP8266, które używa się już bez ArduinoUNO. Zależy mi żeby ESP8266-01S był po prostu modułem do mojego arduino. Moduł podłączyłem, działa, odpowiada(sprawdziłem to wgrywając do płytki czysty projekt, komunikowałem się z ESP8266-01S za pomocą portu szeregowego komendami AT). Czy moje myślenie jest dobre? Proszę o pomoc w poprawnym skonfigurowaniu modułu ESP8266-01S z poziomu programu a nie portu szeregowego(logowanie do AP oraz do firebase) oraz wskazówki w jaki sposób przesyłać dane oraz je odbierać z serwera.
  2. Używam RTC tylko do wyświetlenia bieżącego czasu i niestety tego nie wykorzystam do zliczania czasu pracy pracownika. Co jeżeli pracownik przyjdzie do pracy o 22:00 a wyjdzie o 6:00? No chyba że są na to jakieś sposoby ale ja na nie nie wpadłem. A teraz wszystko działa, sekundy poprawnie są zliczane. Wiem że to jedno wielkie spaghetti, ale no każdy się kiedyś w końcu nauczy, chyba nie ma takiego który od razu pisze wszystko pięknie i przejrzyście Miałeś rację to rozwiązało mój problem, wielkie dzięki.
  3. #include <SPI.h> #include <MFRC522.h> #include <Wire.h> // standardowa biblioteka Arduino #include <LiquidCrystal_I2C.h> // dolaczenie pobranej biblioteki I2C dla LCD LiquidCrystal_I2C lcd(0x27, 20, 4); #define RST_PIN 9 // Pin 9 do resetowania RC522 #define SS_PIN 10 // Pin 10 dla SS (SDA) RC522 #define ID #define DS3231_I2C_ADDRESS 0x68 //#define DS3231time byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; int odczyt1=0; int odczyt2=0; int m; int h; unsigned long czasStart1 = 0; unsigned long czasStop1; unsigned long czas1 = 0; unsigned long czasStart2; unsigned long czasStop2; unsigned long czas2 = 0; MFRC522 mfrc522(SS_PIN, RST_PIN); // Konwersja liczby dziesiÄ™tnej do postaci binarnej byte decToBcd(byte val){ return( (val/10*16) + (val%10) ); } // Konwersja liczby binarnej do postaci dziesiÄ™tnej byte bcdToDec(byte val){ return( (val/16*10) + (val%16) ); } void setup() { Serial.begin(9600); //inicjujemy komunikacjÄ™ szeregowÄ… SPI.begin(); //inicjacja magistrali SPI mfrc522.PCD_Init(); // inicjacja RC522 pinMode(8, OUTPUT); Wire.begin(); Serial.begin(9600); //setDS3231time(00,45,8,3,03,12,19); lcd.begin(); lcd.backlight(); // zaĹ‚Ä…czenie podĹ›wietlenia delay(500); } void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // ustawienie czasu i daty w DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // okreĹ›la, ĹĽe nastÄ™pna wartość ma trafić do rejestru sekund Wire.write(decToBcd(second)); // ustawienie sekund Wire.write(decToBcd(minute)); // ustawienie minuty Wire.write(decToBcd(hour)); // ustawienie godziny Wire.write(decToBcd(dayOfWeek)); // ustawienie dnia tygodnia (1=niedziela, 7=sobota) Wire.write(decToBcd(dayOfMonth)); // ustawienie dnia (1-31) Wire.write(decToBcd(month)); // ustawienie miesiÄ…ca Wire.write(decToBcd(year)); // ustawienie roku (0-99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // ustawia rejestr DS3231 na 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // ĹĽÄ…da 7 bajtĂłw danych od moduĹ‚u DS3231 poczÄ…wszy od rejestru 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void displayTime(){ // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // Przekazanie danych do wyĹ›wietlenie w serial monitorze i do LCD if (hour<10) { lcd.setCursor(0,0); lcd.print("0"); lcd.print(hour, DEC); } else { lcd.setCursor(0,0); lcd.print(hour, DEC); } lcd.print(":"); if (minute<10) { lcd.setCursor(3,0); lcd.print("0"); lcd.print(minute, DEC); } else { lcd.setCursor(3,0); lcd.print(minute, DEC); } // DzieĹ„ if (dayOfMonth<10){ lcd.setCursor(6,0); lcd.print("0"); lcd.print(dayOfMonth, DEC); } else { lcd.setCursor(6,0); lcd.print(dayOfMonth, DEC); } lcd.print("."); // MiesiÄ…c if (month<10){ lcd.setCursor(9,0); lcd.print("0"); lcd.print(month, DEC); } else { lcd.setCursor(9,0); lcd.print(month, DEC); } lcd.print("."); //Rok lcd.print("20"); if (year<10){ lcd.setCursor(14,0); lcd.print("0"); lcd.print(year, DEC); } else { lcd.setCursor(14,0); lcd.print(year, DEC); } // Serial.print(" "); lcd.setCursor(0,1); switch(dayOfWeek){ case 1: //Serial.println("Niedziela"); lcd.print("Niedziela"); break; case 2: // Serial.println("Poniedzialek"); lcd.print("Poniedzialek"); break; case 3: //Serial.println("Wtorek"); lcd.print("Wtorek"); break; case 4: // Serial.println("Ĺšroda"); lcd.print("Sroda"); break; case 5: // Serial.println("Czwartek"); lcd.print("Czwartek"); break; case 6: // Serial.println("PiÄ…tek"); lcd.print("Piatek"); break; case 7: //Serial.println("Sobota"); lcd.print("Sobota"); break; } } void loop() { // Sprawdzamy, czy sÄ… nowe karty if ( mfrc522.PICC_IsNewCardPresent()) { //odczyt karty if ( mfrc522.PICC_ReadCardSerial()){ tone(8, 2000, 100); if (mfrc522.uid.uidByte[0] == 0x09 && mfrc522.uid.uidByte[1] == 0x87 && mfrc522.uid.uidByte[2] == 0xF3 && mfrc522.uid.uidByte[3] == 0x97&& odczyt1 == 0){ lcd.setCursor(0,2); lcd.print("Wejscie "); Serial.print("Wejscie "); odczyt1++; unsigned long czasStart1 = millis(); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.setCursor(0,3); Serial.println("Jan Nowak "); lcd.print("Jan Nowak "); delay(1000); lcd.clear(); } else if (mfrc522.uid.uidByte[0] == 0x09 && mfrc522.uid.uidByte[1] == 0x87 && mfrc522.uid.uidByte[2] == 0xF3 && mfrc522.uid.uidByte[3] == 0x97&& odczyt1 == 1){ lcd.setCursor(0,2); //liczenie czasu metoda1 odczyt1=odczyt1-1; unsigned long czasStop1 = millis(); unsigned long Czas1 = czasStop1 - czasStart1; unsigned long Czas_w_s1 = Czas1 / 1000; unsigned long posrednie = (Czas_w_s1/3600)*60; unsigned long Czas_w_h1 = Czas_w_s1/3600; unsigned long Czas_w_m1 = (posrednie%60); lcd.print("Wyjscie"); Serial.print("Wyjscie "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.print(" Time "); Serial.print("Jan Nowak "); Serial.print("Czas pracy "); if (Czas_w_h1 < 10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_h1, DEC); Serial.print(Czas_w_h1, DEC); } else { lcd.print(Czas_w_h1, DEC); Serial.print(Czas_w_h1, DEC); } lcd.print(":"); Serial.print(":"); if (Czas_w_m1<10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_m1, DEC); Serial.print(Czas_w_m1, DEC); Serial.println(" "); } else { lcd.print(Czas_w_m1, DEC); Serial.print(Czas_w_m1, DEC); Serial.println(" "); } lcd.setCursor(0,3); lcd.print("Jan Nowak "); delay(3000); lcd.clear(); } else if (mfrc522.uid.uidByte[0] == 0xA6 && mfrc522.uid.uidByte[1] == 0xDC && mfrc522.uid.uidByte[2] == 0xE8 && mfrc522.uid.uidByte[3] == 0xF8&& odczyt2 == 0){ unsigned long czasStart2 = millis(); int test=9999999999; lcd.setCursor(0,2); lcd.print("Wejscie "); Serial.print("Wejscie "); odczyt2++; Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.setCursor(0,3); Serial.println("Adam Kowalski "); lcd.print("Adam Kowalski "); delay(1000); lcd.clear(); } else if (mfrc522.uid.uidByte[0] == 0xA6 && mfrc522.uid.uidByte[1] == 0xDC && mfrc522.uid.uidByte[2] == 0xE8 && mfrc522.uid.uidByte[3] == 0xF8&& odczyt2 == 1){ lcd.setCursor(0,2); //liczenie czasu metoda 2 -testy, cuda na kiju odczyt2=0; czasStop2 = millis(); Serial.println(test); Serial.println(czasStart2); Serial.println(czasStop2); czas2 = czasStop2 - czasStart2; Serial.println(czas2); unsigned long Czas_w_s2 = czas2 / 1000; Serial.println(Czas_w_s2); unsigned long posrednie = (Czas_w_s2/3600)*60; Serial.println(posrednie); unsigned long Czas_w_h2 = Czas_w_s2/3600; Serial.println(Czas_w_h2); unsigned long Czas_w_m2 = (posrednie%60); Serial.println(Czas_w_m2); czasStart2=0; czasStop2=0; lcd.print("Wyjscie"); Serial.print("Wyjscie "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.print(" Time "); Serial.print("Adam Kowalski "); Serial.print("Czas pracy "); if (Czas_w_h2 < 10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_h2, DEC); Serial.print(Czas_w_h2, DEC); } else { lcd.print(Czas_w_h2, DEC); Serial.print(Czas_w_h2, DEC); } lcd.print(":"); Serial.print(":"); if (Czas_w_m2<10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_m2, DEC); Serial.print(Czas_w_m2, DEC); Serial.println(" "); } else { lcd.print(Czas_w_m2, DEC); Serial.print(Czas_w_m2, DEC); Serial.println(" "); } lcd.setCursor(0,3); lcd.print("Adam Kowalski "); delay(3000); lcd.clear(); } } } displayTime(); // wyĹ›wietlanie czasu rzeczywistego delay(1000); // odĹ›wieĹĽ co sekundÄ™ mfrc522.PICC_HaltA(); } To jest mój cały kod. Zmienne definiowałem już gdzie się da(próby i testy) nawet i wewnątrz funkcji "loop()". Męczyłem się z tym dość sporo czasu więc fajnie by było gdyby cały ten kod nie poszedł do kosza. Chodzi mi o to gdzie popełniłem błąd oraz czy kod zbudowany w ten sposób ma prawo działać i zliczać ten przepracowany czas. Jeżeli tak to co i gdzie należy poprawić/dodać/dopisać. Wszystko inne mi działa tylko zliczanie tego czasu to kicha więc wkleiłem tylko fragment kodu odnośnie zliczania czasu. Z tego co wywnioskowałem to zmienna czasStart1 i zmienna czasStart2 nie jest widoczna w następnym else if... nie wiem jak to ogarnąć żeby była publiczna.
  4. Cześć, mam problem ze swoim małym projektem - Rejestrator Czasu Pracy. Jestem początkującym w programowaniu oraz w zabawach z Arduino. Przechodząc do głównego problemu zaprezentuje wam kawałek kodu w którym utknąłem. void loop() { // Sprawdzamy, czy są nowe karty if ( mfrc522.PICC_IsNewCardPresent()) { //odczyt karty if ( mfrc522.PICC_ReadCardSerial()){ unsigned long czasStart1 = 0; unsigned long czasStop1 = 0; unsigned long czas1 = 0; unsigned long czasStart2 = 0; unsigned long czasStop2 = 0; unsigned long czas2 = 0; tone(8, 2000, 100); if (mfrc522.uid.uidByte[0] == 0x09 && mfrc522.uid.uidByte[1] == 0x87 && mfrc522.uid.uidByte[2] == 0xF3 && mfrc522.uid.uidByte[3] == 0x97&& odczyt1 == 0){ lcd.setCursor(0,2); lcd.print("Wejscie "); Serial.print("Wejscie "); odczyt1++; unsigned long czasStart1 = millis(); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.setCursor(0,3); Serial.println("Jan Nowak "); lcd.print("Jan Nowak "); delay(1000); lcd.clear(); } else if (mfrc522.uid.uidByte[0] == 0x09 && mfrc522.uid.uidByte[1] == 0x87 && mfrc522.uid.uidByte[2] == 0xF3 && mfrc522.uid.uidByte[3] == 0x97&& odczyt1 == 1){ lcd.setCursor(0,2); odczyt1=odczyt1-1; unsigned long czasStop1 = millis(); unsigned long Czas1 = czasStop1 - czasStart1; unsigned long Czas_w_s1 = Czas1 / 1000; unsigned long posrednie = (Czas_w_s1/3600)*60; unsigned long Czas_w_h1 = Czas_w_s1/3600; unsigned long Czas_w_m1 = (posrednie%60); lcd.print("Wyjscie"); Serial.print("Wyjscie "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" "); if (hour<10) { Serial.print("0"); Serial.print(hour, DEC); } else { Serial.print(hour, DEC); } Serial.print(":"); if (minute<10) { Serial.print("0"); Serial.print(minute, DEC); } else { Serial.print(minute, DEC); } Serial.print(" "); lcd.print(" Time "); Serial.print("Jan Nowak "); Serial.print("Czas pracy "); if (Czas_w_h1 < 10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_h1, DEC); Serial.print(Czas_w_h1, DEC); } else { lcd.print(Czas_w_h1, DEC); Serial.print(Czas_w_h1, DEC); } lcd.print(":"); Serial.print(":"); if (Czas_w_m1<10) { lcd.print("0"); Serial.print("0"); lcd.print(Czas_w_m1, DEC); Serial.print(Czas_w_m1, DEC); Serial.println(" "); } else { lcd.print(Czas_w_m1, DEC); Serial.print(Czas_w_m1, DEC); Serial.println(" "); } lcd.setCursor(0,3); lcd.print("Jan Nowak "); delay(3000); lcd.clear(); } To jest prosty projekt do szkoły. Mam dwóch pracowników, którzy po przyjściu do pracy "odbijają się" czytnikiem. Na wyświetlaczu jest cały czas wyświetlona data, godzina oraz dzień tygodnia. Jeżeli odbiją się pierwszy raz to wyświetla się "Wejście" do pracy oraz imię i nazwisko pracownika. Jeżeli odbiją się drugi raz to zmienia się "Wejście" na "Wyjście" wyświetla się imię, nazwisko, oraz przepracowany czas!!!! No i tu są schody. Podczas pierwszego odbicia sczytuję unsigned long czasStart1 = millis(); podczas drugiego odbicia sczytuję unsigned long czasStop1 = millis(); oraz chcę od czasStop1-czasStart1 aby wyliczyć czas pracy pracownika. To wszystko jest robione w jednej funkcji void loop() { .... } ale nie przekazuje mi zmiennej czasStart1. Pomocy, jak to mogę rozwiązać inaczej?
×
×
  • Utwórz nowe...