Skocz do zawartości

Stoper/Fotocela arduino


Pomocna odpowiedź

Napisano

Witam mam problem z jednym z moich projektów chciał bym uzyskać stoper który po wciśnięciu przycisku zaczyna odmierzać czas oraz po przecięciu fotokomórki następuje zatrzymuje wyświetla oraz możliwość nowego pomiaru(od zera).

Na razie zamiast fotokomórki jest przycisk oraz roboczo wyświetlam wyniki na serial porcie. 

unsigned long tstart = 0;

int buttons=7;//przycisk start
int buttonsto=2;// przycist stop docelowo fotokomorka 





void setup() {
  pinMode(buttons, INPUT_PULLUP);
  pinMode(buttonsto, INPUT_PULLUP);
  Serial.begin(9600);

}

void loop() {
  while(digitalRead(4)==LOW)
  {
  if (digitalRead(buttons) == LOW)
 {
  tstart=millis();
 }
  if (digitalRead(buttonsto) == LOW)
 {
  Serial.println(millis()-tstart);
 
  
 }
  }
}

Prosił bym o pomoc bo średnio wiem jak się do tego zabrać, obecnie wyświetla czas ale tylko raz po restarcie arduino i go wyświetla 

Działanie stopera to jedna sprawa, ale zastanów się też nad zmianą sposobu w jaki wysyłasz dane do PC. W tej chwili, jeśli dany przycisk jest wciśnięty to będziesz wysyłał przez UART masę danych, w pętli bez żadnego opóźnienia. Komunikacja nie będzie działała poprawnie. Najlepiej byłoby zrobić tak, że zatrzymanie stopera ustawia jakąś flagę (zmienną), która oznacza, że należy wysłać dane do komputera. Arduino powinno wtedy wysłać informacje i zapamiętać, że już to zrobiło, aby nie wysyłać ciągle danych do komputera.

Dane były wyświetlane poglądowo.

obecna wersja kodu wyświetla je na lcd

Teraz rodzi się drugie pytanie jakich modułów radiowych użyć odległość między nimi raczej nie będzie przekraczać jednego kilometra lecz będzie miedzy nimi przewyższenie oraz 

czy murze użyć 2 arduino?

To jest nowa wersja kodu trochę napisana samemu a trochę przekopiowana z internetu.


#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{
  lcd.begin(16, 2);
  lcd.clear();
  
  Serial.begin(9600);
  
  pinMode(7, INPUT);
  digitalWrite(7, HIGH);//8
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);//9
}
double i = 0;
double a = millis();
double c ;

void loop()
{
lcd.clear();
lcd.print("press start");
delay(100);
  
 if(digitalRead(7) == LOW)
 {

    lcd.clear();
 a = millis();
   while(digitalRead(2) == HIGH)
   {
   
     c = millis();
   i = (c - a) / 1000;
   lcd.print(i);
   lcd.setCursor(7,0);
   lcd.print("Sec's");
   lcd.setCursor(0,0);
   Serial.println(c);
   Serial.println(a);
   Serial.println(i);
   Serial.println("......");
   delay(100);
   }
   
   if(digitalRead(2) == LOW)
   {
     while(digitalRead(7) == HIGH)
     {
       lcd.setCursor(0,0);
       lcd.print(i);
       lcd.setCursor(11,0);
       lcd.print("");
       lcd.setCursor(0,0);
       delay(100);
     }
   }
 }
}

 

Bez tytułu.png

Dnia 22.12.2018 o 18:52, Jabuti napisał:

Teraz rodzi się drugie pytanie jakich modułów radiowych użyć odległość między nimi raczej nie będzie przekraczać jednego kilometra lecz będzie miedzy nimi przewyższenie oraz 

Kilometr to bardzo dużo przy takiej komunikacji. Określ konkretnie jakich odległości oczekujesz,  20-100 m czy 900 m, bo to olbrzymia różnica. Raczej bez drugiego Arduino w takim przypadku się nie obejdzie. Opisz może dokładniej co to będzie za urządzenie (od strony praktycznej). Łatwiej będzie wtedy pomóc.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...