Skocz do zawartości

PAWEL1

Użytkownicy
  • Zawartość

    4
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O PAWEL1

  • Ranga
    1/10
  1. po poprawkach układ działa pojawił się problem ponownego załączenia odliczania czasu impuls start - impuls stop = wynik czas -> ponownie start odmierza od początku co zrobić aby czekał na impuls reset i dopiero wtedy gotowy do kolejnego pomiaru // czas przejazdu robota #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // ustawienie adresu LCD na magistrali I2C 0x27 dla wyświetlacza - 16 znaków w 2 liniach int przycisk_reset = 7; // numer pinu arduino do podłączenia przycisku reset, rezystor do masy 1k int czujnik_start = 8; // numer pinu arduino do podłączenia czujnika laserowego na starcie int czujnik_stop = 9; // numer pinu arduino do podłączenia czujnika laserowego na mecie unsigned long czas_start; // zapisanie czasu początku przejazdu unsigned long czas_stop; // zapisanie czasu końca przejazdu unsigned long timeStart, timeStop, timeElapsed; // czasy w funkcji zmieniajacej czas z milisekund na czas zrozumiały dla człowieka int w = 0; // zmienna pomocnicza ustawiona na 0 void setup() // ustawienia początkowe dla programu { lcd.init(); // inicjalizacja wyświetlacza LCD lcd.backlight(); // wygaszenie wyświetlacza LCD lcd.setCursor(0,0); // ustawienie kursora w pierwszej pozycji w pierwszym wierszu lcd.print("Czas przejazdu:"); // wypisanie komunikatu lcd.setCursor(0,1); // ustawienie kursora w pierwszej pozycji w pierwszym wierszu lcd.print("00:00:000"); // wypisanie komunikatu pinMode(czujnik_start, INPUT); // ustawienie pinów jako wejść pinMode(czujnik_stop, INPUT); // ustawienie pinów jako wejść } void loop() // początek pętli programu { if (digitalRead(czujnik_start) == LOW && w == 0) // sprawdzenie warunku czy czujnik start otrzymał impuls i czy zmienna 'w' równa się 0 { czas_start = millis(); // przypisanie do zmiennej aktualnej wartości wewnętrznego licznika w = 1; // zmienna pomocnicza ustawiona na 1 } if (digitalRead(czujnik_stop) == HIGH && w == 1) // sprawdzenie warunku czy czujnik meta nie otrzymał impulsu i czy zmienna 'w' równa się 1 { lcd.setCursor(0,1); // ustawienie kursora w pierwszej pozycji w drugim wierszu wyswietl_wynik(czas_start, millis()); // uruchomienie funkcji zmieniającej czas z milisekund na czas zrozumiały dla człowieka } else { w = 0; // zmienna pomocnicza ustawiona na 0 } if (digitalRead(przycisk_reset) == HIGH) // sprawdzenie warunku czy przycisk reset otrzymał impuls { lcd.setCursor(0,0); // ustawienie kursora w pierwszej pozycji w pierwszym wierszu lcd.print("Czas przejazdu:"); // wypisanie komunikatu lcd.setCursor(0,1); // ustawienie kursora w pierwszej pozycji w drugim wierszu lcd.print("00:00:000"); // wypisanie komunikatu w = 0; // zmienna pomocnicza ustawiona na 0 } } void wyswietl_wynik(long timeStart, long timeStop) // funkcja zmieniająca czas z milisekund na czas zrozumiały dla człowieka { float h,m,s,ms; unsigned long over; timeElapsed = timeStop-timeStart; // h=int(timeElapsed/3600000); over=timeElapsed%3600000; m=int(over/60000); over=over%60000; s=int(over/1000); ms=(over%1000); // if(h>=0 and h<=9){lcd.print("0");} // lcd.print(h,1); // lcd.print(":"); lcd.setCursor(0,1); if(m>=0 and m<=9){lcd.print("0");} lcd.print(m,0); lcd.print(":"); if(s>=0 and s<=9){lcd.print("0");} lcd.print(s,0); lcd.print(":"); if(ms>=0 and ms<=9){lcd.print("0");} lcd.print(ms,0); } kolejny krok to rozbudowanie o dodatkowy punkt pomiarowy dziękuję Rafałowi za czas spędzony przy programie
  2. wykorzystałem pomoc i jest program, niestety jak zwykle jest błąd sensor Arduino ir proximity sensor interfacing wg strony http://blog.circuits4you.com/2016/04/arduino-ir-proximity-sensor-interfacing.html program działa na module arduino nano 3.0 atmega328p program liczący czas już nie //czas przejazdu #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); //ustawienie adresu lcd na magistrali I2C 0x27 dla wyswietlacza 16 znakow w 2 liniach const int ProxSensor_start; const int ProxSensor_stop; int sygnal_reset = 7; // numer pinu do podania sygnału high dla resetu czasu przejazdu int ProxSensor_start = 8; // numer pinu do podania sygnału high dla start int ProxSensor_stop = 9; // numer pinu do podania sygnału high dla stop unsigned long czas_start; unsigned long czas_meta; //unsigned long czas_przejazdu; unsigned long timeStart, timeStop, timeElapsed; int w=0 void setup() // ustawienia poczatkowe dla programu { lcd.init(); // wyswietlacz lcd.backlight(); lcd.setCursor(0,0); lcd.print("CZAS PRZEJAZDU:"); lcd.setCursor(0,1); // ustawienie kursora w pierwszej pozycji w drugim wierszu lcd.print("00:00:000"); // wypisanie komunikatu pinMode(ProxSensor_start, INPUT); pinMode(ProxSensor_stop, INPUT); } void loop() { if(digitalRead(ProxSensor_start) == HIGH && w = 0) // sygnal start, rozpoczecie liczenia czasu { czas_start = milis(); w=1 } if(digitalRead(ProxSensor_meta) == HIGH && w = 1) // sygnal stop, zakoncz liczenie czasu { lcd.setCursor(0,1); wyswietl_wynik(czas_start, milis()); } else { w = 0 } if(digitalRead(sygnal_reset) == HIGH) { lcd.setCursor(0,0); lcd.print("CZAS PRZEJAZDU:"); lcd.setCursor(0,1); lcd.print(00:00:000); w = 0 } } void wyswietl_wynik(long timeStart, long timeStop) { float h,m,s.ms; unsigned long over; timeElapsed = timeStop-timeStart; // h=int(timeElapsed/3600000); over=timeElapsed%3600000; m=int(over/60000); over=over%60000; s=int(over/1000); ms=(over%1000); // if(h>=0 and h<=9){lcd.print("0");} // lcd.print(h,0); // lcd.print(":"); lcd.setCursor(0,1); if(m>=0 and m<=9){lcd.print("0");} lcd.print(m,0); lcd.print(":"); if(s>=0 and s<=9){lcd.print("0");} lcd.print(s,0); lcd.print(":"); if(ms>=0 and ms<=9){lcd.print("0");} lcd.print(ms,0); }
  3. założenie jest takie, że "robot/pojazd" porusza się w jedną stronę, funkcja delay opóźni ponowny odczyt stanu chciałbym zaprogramować prosty układ, prosty w działaniu
  4. Dzień dobry. chciałbym zbudować układ pomiaru czasu założenia: OBIEKT PRZEKRACZA LINIĘ START-u PO PRZEKROCZENIU PUNKTU POMIARU „META” WYŚWIETLA SIĘ CZAS KTÓRY UPŁYNĄŁ OD STARTU Czujniki: Cyfrowy czujnik odległości 150cm – Waveshare (x2) LUB Moduł detektora przeszkód z czujnikiem IR (x2) WYŚWIETLACZ: JAZDA NACZAS „LINE FOOLOWER’ META : 00:00:000 CZAS WYŚWIETLANY: 00:00:000 (MINUTY : SEKUNDY : TYSIĘCZNE SEKUNDY) POMIAR CZASU_1.pdfPOMIAR CZASU_1.pdf START – JEDNYM Z PRZYCISKÓW NA WYŚWIETLACZU STOP - JEDNYM Z PRZYCISKÓW NA WYŚWIETLACZU RESET POMIARÓW ZA POMOCĄ JEDNYM Z PRZYCISKÓW NA WYŚWIETLACZU) UKŁAD NA „KABLACH” ZASILANIE BATERIA 5V {POWERBANK) CZY UKŁAD MOŻE DZIAŁAĆ NA JEDNYM CZUJNIKU (BRAMCE). TRASA JAKO OKRĄŻENIE I EWENTUALNIE DWA OKRĄŻENIA? dziękuję za wszelką pomoc Paweł I ZAŁĄCZNIK POMIAR CZASU_1.pdf
×