• 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
Pomoc w prostym programiku
#1
Big Grin 
Hejka
Mam problem w prostym programiku.
Ogólnie chodzi w nim o to 2 diody mrugają z różną częstotliwością imitując płomień, w tym nie ma problemu.
Do tego jest servo które wykonuje ruch paru stopni, a dokładniej ruch chwilka stopu ruch i tak w pętli cały czas.
Wszystko spoko tylko ono cały czas działa z pełną prętkością. I pomimo tysięcy prób dalej bez zmian.
Poniżej link do moich wypocin, jakby komuś się udało go poprawić/naqpisać o zmienną prętkość było by SPOKO
https://pastebin.pl/view/54fb785b
[url=https://pastebin.pl/view/54fb785b][/url]
 
Odpowiedź
#2
Timers mierzy odcinki czasu, jeśli co 5s robisz A, a co 10s robisz B, to co 10s robisz A i B.
Chcesz przestawić pozycję co 5s to w Interwale 5s ustawiaj pozycję A, w kolejnym B.
Chcesz ruszać serwem co 5  ala płynny ruch to raczej zamiast dwóch wartości powinieneś w argumencie mieć zmienną, której co te 5s zmieniasz wartość w zakresie jakim ma być ruch.
Efektywnie co 5s powinny być takie kolejne polecenia:
Baba.write(5); Baba.write(10);Baba.write(15); itd. krok 5 stopni, potem w odwrotnej kolejności by serwo wróciło do pozycji startowej.
Taki masz przykład w serwo z krokiem 1 stopien:
Kod:
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Dzięki za zainteresowanie tematem, ale to chyba dla mnie za dużo. Ogólnie miała to być figurka do szopki. Dziś ostatni dzień z tym walczę. 

Próbowałem właśnie to też wykonać na przykładzie sweep ale nie działało z niewiadomych przyczyn. Również były próby zrobić to "manualnie" czyli tak jak napisałeś wyżej co 5 stopni, ale tak jakby nie widziało dalszych komend tylko pierwszą
 
Odpowiedź
#4

Przecież to tylko upraszcza program, zacznij od tego:
Kod:
#include <Timers.h>
#include <Servo.h>

Timer LED1Timer;
Timer LED2Timer;
Timer SERVO1;
Timer SERVO2;
Servo Baba=40;
uint8_t polozenie;

       



void setup() {
  pinMode(5, OUTPUT);
  LED1Timer.begin(30);

  pinMode(6, OUTPUT);
  LED2Timer.begin(70);

  Baba.attach(9);
  SERVO1.begin (SECS(1));
  SERVO2.begin (SECS(10));



}

void loop() {
  if (LED1Timer.available())
  {
    digitalWrite(5, !digitalRead(5));
    LED1Timer.restart();
   
  }

   if (LED2Timer.available())
  {
    digitalWrite(6, !digitalRead(6));
    LED2Timer.restart();
   
  }

  if (SERVO1.available())
  {
if (polozenie>120) polozenie=40;
    Baba.write(polozenie++);

  SERVO1.restart();

}


}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Dzięki wielkie ale się poddaje, robię na 2 nano z delayami..
1 do led 2 do serva.
Pozdrawiam
 
Odpowiedź
#6
Jak nie ogarniasz takich prostych rzeczy, to zainteresuj się RTOS'em.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości