Skocz do zawartości

Arduino Uno problem z programem


Pomocna odpowiedź

Witam,

Mam taki problem iż chciałbym połączyć 2 programy w jeden.

Oto cały kod: 

Pierwszy program:


 

#include <Servo.h>



Servo moje_serwo;  // stworz obiekt moje_serwo do kontroli serwa



int potencjometr = A0;  // pin analogowy do odczytu potencjometra

int wartorsc;    // zmienna przechowujaca odczyt z potencjometru



void setup() {

  moje_serwo.attach(11); // serwo podlaczone jest do pinu 11

}



void loop() {

  wartorsc = analogRead(potencjometr);            // odczytaj wartosc z potencjometru (wartosc z przedzialu 0-1023)

  wartorsc = map(wartorsc, 0, 1023, 0, 180);     // zeskaluj odczyt do miary katowej (od 0 do 180) lub czasu trwania stanu wysokiego (od 700 do 2300)

  moje_serwo.write(wartorsc);                  // ustaw pozycje serwa z zeskalowanego odczytu: moje_serwo.write(wartosc) dla kata, moje_serwo.writeMicroseconds(wartosc) dla czasu stanu wysokiego

  delay(15);                          

}

Drugi program:

#define LED 9

int wypelnienie = 0;
int zmiana = 5;

void setup() 
{
pinMode(LED,OUTPUT);
}

void loop() 
{
analogWrite(LED,wypelnienie);
 if(wypelnienie<255)
 {
   wypelnienie+= zmiana;
 }
 if( wypelnienie==255)
   {
     while(wypelnienie!=0)
         {
          wypelnienie-=zmiana;
         analogWrite(LED,wypelnienie);
         delay(50);
         } 
   }
delay(50);

}

Chce zbudować program w którym bede potencjometrem sterował serwomechanizmem, a diody LED będą sobie powoli się zapalać i gasić. 

Kombinowałem połączyć te dwa powyższe programy w jeden, ale nie do końca mi to wyszło serwo wariowało, a diody nawet się nie zapaliły. 

Proszę o pomoc lub jakąkolwiek podpowiedź jak napisać taki program.

Edytowano przez digitalread
Link to post
Share on other sites
#include <Servo.h>

Servo myservo;

int val;

void setup ()
{

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);
  myservo.attach(9);
 
}
void loop()
{
  val = analogRead(1);
  val = map(val, 0, 1023, 0, 180);
  myservo.write(val);
  delay(15);

{

digitalWrite(2,HIGH);
  delay(500);
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(500);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);
  delay(500);
  digitalWrite(4,LOW);
}

}

spróbuj tego ale pamiętaj zawsze zweryfikuj program przed wgraniem na płytkę !!!

Link to post
Share on other sites
6 minut temu, kayhoo napisał:

ale pamiętaj zawsze zweryfikuj program przed wgraniem

Albo przed wklejeniem go jako rozwiązanie na forum. To nie zadziała, nawet się nie skompiluje.

Przy okazji, możecie te swoje wklejki oznaczać jako "kod", żeby się podświetlało.

Link to post
Share on other sites
#include <Servo.h> //biblioteka serwa
#define LED 9      // definicja diody led jako 9 wyjscie
Servo moje_serwo;  // stworz obiekt moje_serwo do kontroli serwa

int wypelnienie = 0; // zmienne do sterowania wypełnieniem sygnału PWM diod LED
int zmiana = 5;

int potencjometr = A0;  // pin analogowy do odczytu potencjometra
int wartorsc;    // zmienna przechowujaca odczyt z potencjometru


void setup() 
{
moje_serwo.attach(3); // serwo podlaczone jest do pinu 3
pinMode(LED,OUTPUT); //wyjscie diody LED
}

void loop() {

analogWrite(LED,wypelnienie);
 if(wypelnienie<255) //jesli dioda nie swieci na 100% wypelnienia
 {
   wypelnienie+= zmiana; //zwieksz wypelnienie do 100% co 5
 }
 if( wypelnienie==255) //jesli wypelnienie jest rowne 100%
   {
     while(wypelnienie!=0)
         {
          wypelnienie-=zmiana; //zmniejsz wypelnienie do zera i spowrotem
         analogWrite(LED,wypelnienie);
         delay(50);
         } 
   }
 wartorsc = analogRead(potencjometr);            // odczytaj wartosc z potencjometru (wartosc z przedzialu 0-1023)
 wartorsc = map(wartorsc, 0, 1023, 0, 180);     // zeskaluj odczyt do miary katowej (od 0 do 180) lub czasu trwania stanu wysokiego (od 700 do 2300)
 moje_serwo.write(wartorsc);                  // ustaw pozycje serwa z zeskalowanego odczytu


}




 

Stworzyłem takie coś, ale serwo głupieje nie reaguje na obrót gałką potencjometru, a diody nawet się nie zapalają.... Pomoże ktoś poprawić kod?

Link to post
Share on other sites

No rozumiem, że steruje szerokością sygnału PWM przy diodach i serwie. A serwo wychyla się w lewo lub prawo w zależności od położenia potencjometru. 

Kod na sterowanie serwa wziąłem z przykładów, a kod z diodami sam napisałem...

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.