Skocz do zawartości

Szkic do kolejki PIko - dodanie postoju na stacji


Pomocna odpowiedź

Napisano (edytowany)

Witam napisałem trochę przerobiłem szkic na jazdę kolejki raz w prawo prostuj puziniej w lewo prostuj i tak dalej . Mamproblem bo chciałbym żeby kolejka przystawala na stacji na chwile najeżdżając na kontaktron i pochwali dalej ruszała chciałbym napisać warunek do tego szkicu:

void setup() {
pinMode(8,OUTPUT);

pinMode(7,OUTPUT);

}

Void loop() {

digitalWrite(8,HIGH);

delay(50000);

digitalWrite(8,LOW);

delay(3000);

digitalWrite(7,HIGH);

delay(50000);

digital (7,LOW);

delay (3000);

Bardzo proszę o pomoc 

Edytowano przez krif38

@krif38 witam na forum 🙂 Z czym dokładnie masz problem? Nie wiesz jak zapisać to w programie, czy nie masz zupełnie pomysłu jak to zrealizować? Obecny program (nawet jeśli teraz działa) to nie sprawdzi się raczej przy wersji z kontaktronem. Teraz będziesz musiał zrobić wersję, w której kolejka jedzie tak długo, aż napotka na kontaktron, wtedy się zatrzymuje i rusza z opóźnieniem. Program ze sztywnymi opóźnieniami na deley'ach tutaj się nie sprawdzi.

Witam chciałbym w tym programie postawić warunek jeżeli na pinie 6 pojawi się stan wysoki to program zaczyna się np na 4s

Bardzo proszę o wpisanie mi takiego warunku bo nie mogę sobie poradzić 

Mi ten program odpowiada tylko nie wiem  w jaki sposób wpisać warunek kolejka najeżdża na kontraktom pentla się zatrzymuje na 4s .

(edytowany)

Kombinowałem nad tym parę minut i wpadłem na coś takiego:

#define kontaktron 6 //definiujemy kontaktron i skręty 
#define lewo 7
#define prawo 8
 boolean x = 0; //dodajemy zmienną
void setup (){
  pinMode(lewo,OUTPUT);//ustawiamy skręty jako wyjścia
   pinMode(prawo,OUTPUT);
  pinMode(kontaktron,INPUT_PULLUP);//INPUT - ustawiamy kontaktron jako wejście, PULLUP - dodajemy rezystor podciągający
}
void loop(){
  if(digitalRead(kontaktron) == LOW && x == 0 ){ //jeśli kontaktron jest połączony z masą (poprzez najechanie kolejki) to:
  digitalWrite(prawo,HIGH); //prawo 
  delay(4000); //czekamy 4s 
  digitalWrite(prawo,LOW);//prosto
    x=x+1;//zmieniamy wartość x
}
  if(digitalRead(kontaktron) == LOW && x == 1 ){ //jeśli kontaktron jest połączony z masą (poprzez najechanie kolejki) to:
  digitalWrite(lewo,HIGH); //lewo 
  delay(4000); //czekamy 4s 
  digitalWrite(lewo,LOW);//prosto
    x=x-1;//zmieniamy wartość x
}
}

Kod działa( wypróbowałem na diodach) pod warunkiem że kontaktron nie jest zwarty dłużej niż 4 sekundy. To jest kod do skręcania na przemian w prawo lub lewo po najechaniu kolejki na kontaktron.Jeśli kod jest źle napisany to proszę mnie poprawić. Jeśli nie o to Ci chodziło to opisz dokładniej jak to ma działać.

Edytowano przez jas123
9 godzin temu, Treker napisał:

@krif38 witam na forum 🙂 Z czym dokładnie masz problem? Nie wiesz jak zapisać to w programie, czy nie masz zupełnie pomysłu jak to zrealizować? Obecny program (nawet jeśli teraz działa) to nie sprawdzi się raczej przy wersji z kontaktronem. Teraz będziesz musiał zrobić wersję, w której kolejka jedzie tak długo, aż napotka na kontaktron, wtedy się zatrzymuje i rusza z opóźnieniem. Program ze sztywnymi opóźnieniami na deley'ach tutaj się nie sprawdzi.

 

Dziękuje bardzo wpisałem szkic wystąpił błąd ;kontaktron was not declared in this scope 

image.jpg

(edytowany)

1. wstaw caly kod
:d

2. Ja bym to zrobił tak, żebyś łatwo zrozumiał:

robisz sobie switch case i teraz

case 1: jedziesz sobie do przodu, dopóki nie najedziesz na kontaktron(tu nie stosujemy delaya, w tym case masz włącz jazdę do przodu i ifa z wykryciem kontaktronu- wtedy nadpisujesz case = 2)

case 2: wyłączasz jazdę do przodu - skoro już stoisz, to czekasz sobie chwilkę (na start możesz zrobić z delayem, potem możesz to poprawić), po czasie skaczesz do case=3

case 3: wybierasz nowy kierunek (na podstawie poprzedniego/jakiegoś algorymtu/whatever, skaczesz to case 4

case 4: kręcisz w prawo/lewo, a potem wracasz do case = 1, żeby jechać na wprost i program działa w koło

Edytowano przez BananWszyscy
4 godziny temu, krif38 napisał:

wystąpił błąd ;kontaktron was not declared in this scope 

@krif38 chyba nie napisałeś tej linijki :

#define kontaktron 6

 

Witam  prosił bym jeszcze o odpowiedz na takie pytanie ten program który teraz wysłałem dlaczego działa dobrze na diodach natomiast na przekaźnikach nie przez chwile są dwa włączone co mam zrobić żeby była przerwa tak jak na diodach

image.jpg

Aktualizacja:

Witam czy ktoś by mi nie pomógł napisać przerwę w tym nie innym programie jeżeli na 6 pinie pojawi się stan wysoki to program zatrzyma się na 10 s po tym czasie ruszy dalej znowu na pinie 6 pojawi się stan wysoki program zatrzyma się i tak cały czas Dziękuje za pomoc

image.jpg

5 godzin temu, krif38 napisał:

laczego działa dobrze na diodach natomiast na przekaźnikach nie przez chwile są dwa włączone co mam zrobić żeby była przerwa tak jak na diodach

A jak dokładnie masz podłączone przekaźniki do Arduino? Czy sterujesz nimi przez tranzystor i masz diody wpięte równolegle z cewką? Przykład poprawnego podłączenia przekaźnika do Arduino znajdziesz w tym artykule: Kurs elektroniki – #9 – elementy stykowe, przekaźniki

Kody programów należy umieszczać za pomocą odpowiedniego narzędzia dostępnego w edytorze (przycisk "Wstaw kod"). Programy są wtedy prezentowane w czytelny sposób, a ich składania jest kolorowana. Nie wklejaj proszę zdjęć ekranu komputera, bo to tylko utrudnia wszystkim rozczytanie programu. Z góry dziękuję za zrozumienie i pomoc w utrzymaniu porządku 😉

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