• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie Arduino za pomocą aparatury RC
#11
Podejrzewam, że to co stworzyłem może kłuć w oczy. Nie miałem wcześniej styczności z Arduino i programowaniem, a oświetlenie do lądowania miało być jedynie bonusem, więc jeśli kod poniżej jest kompletnie bez sensu, to nie chcę fatygować o pomoc. Tak czy inaczej bardzo dziękuję za konkretne porady Robson.

Kod:
#define pin 11
unsigned long czas;
#define tryb_pierwszy;
#define tryb_drugi;

void setup() {
  pinMode(11, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  czas = pulseIn(11, HIGH);
  if(czas<1500) tryb_pierwszy();{
  //REGULAR
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  delay(200); 
  digitalWrite(6, LOW);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(1400);}
  else tryb_drugi();{
  //PODWOZIE
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  //REGULAR
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  delay(200); 
  digitalWrite(6, LOW);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(1400);}
}


Kod błędu:
Kod:
Arduino:1.8.9 (Windows Store 1.8.21.0) (Windows 10), Płytka:"Arduino Uno"

C:\Users\\Desktop\sketch_jul18a\sketch_jul18a.ino: In function 'void loop()':

sketch_jul18a:14:31: error: expected primary-expression before ')' token

   if(czas<1500) tryb_pierwszy();

                               ^

sketch_jul18a:25:3: error: 'else' without a previous 'if'

   else tryb_drugi();

   ^~~~

sketch_jul18a:25:19: error: expected primary-expression before ')' token

   else tryb_drugi();

                   ^

exit status 1
expected primary-expression before ')' token

Ten raport powinien zawierać więcej informacji jeśli w
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"
 
Odpowiedź
#12
Zapewnie ci o to chodziło ?

Kod:
#define PIN 11


void setup() {
  pinMode(PIN, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  uint32_t czas = pulseIn(PIN, HIGH);
  if(czas<1500){
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(1400);
} else {
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  //REGULAR
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(1400);
}
}


Ale zrób to na millsie.... Uwzględnij braku sygnału to wtedy by zgasło oświetlenie...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#13
Zacząłem czytać o millisie i przekształcę kod. Dzięki za radę.

Rzeczywiście teraz działa, jednak po tym jak raz włączę światła lądowania, to nie mogę ich już wyłączyć. Czy problemem jest to, że arduino nie czyta sygnału na pinie z odbiornika przy każdym odtworzeniu pętli? Czy chodzi właśnie o jakiś kod uwzględniający brak sygnału?

Jeśli druga opcja, to czy nie łatwiej zrobić to na zasadzie:
sygnał jest = pali się
brak sygnału = wyłączone?

Czy w takim przypadku wystarczy w if użyć
if(11, LOW){
pętla bez świateł lądowania } {
else {
pętla ze światłami }

W tym momencie tak wygląda kod:
Kod:
#define PIN 11
unsigned long czas;
//unsigned long nosignal;

void setup() {
  pinMode(PIN, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  uint32_t czas = pulseIn(PIN, HIGH);
  //nosignal = pulseIn(PIN, LOW);
  if(czas<1500){
  //REGULAR
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  delay(200); 
  digitalWrite(6, LOW);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(1400);
} else {
  //PODWOZIE
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  //REGULAR
  digitalWrite(3, HIGH);
  digitalWrite(6, HIGH);
  delay(200); 
  digitalWrite(6, LOW);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(6, LOW);
  delay(1400);
  }
}
 
Odpowiedź
#14
Własnie chodzi o to że nie uwzględniłeś tego i brak sygnału powodował sekwencje w if.



if(11, LOW) - nie wypali....

Musiał byś stworzyć drzewko

if( czas >20){
if{czas <1500){
miganie
}else{
miganie
}else{
wyłączenie
}
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#15
Witam.
Proszę o pomoc jestem na etapie walki z wiatrakami, po prostu szukam kierunku ale nie wychodzi.
Chciałbym napisac program który bedzie miał możliwość sterowania oswietleniem w modelu RC dwa kanały dwa wyjscia oraz dwa kanały typu On /OFF o ile z elektroniką idzie mi całkiem niezle to napisanie chyba mnie przerasta.
Jak jest ktoś chętny to poproszę o pomoc. Potrafię sie zrewanżować.
 
Odpowiedź
#16
Kurs Arduino znajdziesz tu, jak nie chce Ci się bawić w naukę programowania to jest też dział zleceń na naszym forum. W Google znajdziesz wiele gotowych projektów, być może jest wśród nich dokładnie taki jak potrzebujesz, ściągnij Arduino, zrób szkic, skopiuj kod, skompiluj, jeśli brakuje bibliotek znajdź je, dograj, skompiluj, jak się uda to pozostaje znaleźć dokładnie te same elementy projektu i odtworzyć go u siebie. Jak radzisz sobie z elektroniką to kompilacja i wgranie programu jest trywialna, problemy się zaczynają jak chcesz zmienić choć jedną linijkę kodu.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości