Skocz do zawartości

Arduino Uno problem z programem


Pomocna odpowiedź

2 godziny temu, digitalread napisał:

#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?

Ten Twój kod najpierw bardzo szybko zapala LED, czyta potencjometr i wysyła coś na serwo, a potem przez 2550 ms nie robi nic oprócz powolnego gaszenia diody LED... Tak miało być? Co właściwie chcesz osiągnąć? Jak dioda się zapala, to chcesz sterować serwem, a jak gaśnie to nie chcesz sterować serwem? Jeśli tak, to wystarczy dodać jakiś delay na końcu funkcji loop'a. Jeśli chcesz sterować serwem i równocześnie gasić/zapalać LED, to spróbuj może takiej koncepcji:

bool flaga = false;

void loop(void) {
	if (!flaga) {
		//zapalaj LED
		if (wypelnienie < 255) {
			analogWrite(LED, wypelnienie);
			wypelnienie += zmiana;
		} else {
			wypelnienie = 255; // na wypadek gdybys przeskoczyl 255
			flaga = true;
		}
	} else {
		//gas LED
		if (wypelnienie > 0) {
			analogWrite(LED, wypelnienie);
			wypelnienie -= zmiana;
		} else {
			wypelnienie = 0; // na wypadek gdybys przeskoczyl 0
			flaga = false;
		}
	}
	
	// tutaj rob costam z serwem i potencjometrem

	delay(50);
}

 

18 minut temu, Nawyk napisał:

Ten Twój kod najpierw bardzo szybko zapala LED, czyta potencjometr i wysyła coś na serwo, a potem przez 2550 ms nie robi nic oprócz powolnego gaszenia diody LED... Tak miało być? Co właściwie chcesz osiągnąć? Jak dioda się zapala, to chcesz sterować serwem, a jak gaśnie to nie chcesz sterować serwem? Jeśli tak, to wystarczy dodać jakiś delay na końcu funkcji loop'a. Jeśli chcesz sterować serwem i równocześnie gasić/zapalać LED, to spróbuj może takiej koncepcji:


bool flaga = false;

void loop(void) {
	if (!flaga) {
		//zapalaj LED
		if (wypelnienie < 255) {
			analogWrite(LED, wypelnienie);
			wypelnienie += zmiana;
		} else {
			wypelnienie = 255; // na wypadek gdybys przeskoczyl 255
			flaga = true;
		}
	} else {
		//gas LED
		if (wypelnienie > 0) {
			analogWrite(LED, wypelnienie);
			wypelnienie -= zmiana;
		} else {
			wypelnienie = 0; // na wypadek gdybys przeskoczyl 0
			flaga = false;
		}
	}
	
	// tutaj rob costam z serwem i potencjometrem

	delay(50);
}

 

Chce aby diody sie zapalały i gasły i żeby serwo się obracało. Chodzi o to że mam serwo 360stopni i potencjometrem ustawić mogę prędkość obrotu serwa. Chce zrobić taką ozdobę że diody beda powoli sie zapalać i przygasac, a serwo bedzie powoli obracać diodami. 

Dziękuję za kod sprawdzę go jak się uda to jeszcze dzisiaj.

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