Skocz do zawartości

Serwomechanizm uniemożliwia sterowaniem sygnałem PWM na innych wyjściach.


Orzeszek

Pomocna odpowiedź

Witam wszystkich

Jestem początkujący z arduino i napotkałem pewien problem. Programuję coś na kształt "testera" serwomechanizmu SG90. Program na tę chwilę jest niewielki, ponieważ utknąłem w miejscu...

Mianowicie, po rozpoczęciu programu, w funkcji "loop" znajduje się przełączanie między funkcjami wybierania ustawiania jasności wyświetlacza 16x2, a funkcją manualnego poruszania serwem przy pomocy wejścia analogowego.

Program działa idealnie dopóki nie przypiszę serwa do danego pinu...

Po funkcji "serwo.attach(PinSerwa)" ustawienie jasności wyświetlacza nie działa. Po przypisaniu serwa do pinu, pin, do którego podpięta jest dioda wyświetlacza "przechodzi" w tryb 0-1, i gdy wypełnienie jasności nie jest maksymalne, to dioda doświetlająca w ogóle nie świeci.

Można dalej przełączać się między funkcjami, można sterować serwem, lecz dioda wyświetlacza świeci się tylko gdy wartość wypełnienie ustawiona jest na 255.

Dodam, że po usunięciu z programu funkcji "serwo.attach" cały program działa dobrze, ustawiona jasność wyświetlacza pozostaje ciągle taka sama aż do kolejnej zmiany. Wyświetlacz wyświetla odpowiednie wychulenie serwa, wszystko jest w porządku, rzecz jasna serwo nie reaguje.

/*    ARDUINO LEONARDO
* Wyswietlacz podlaczony do pinow 2,3,4,5,6,7, podswietlenie wyswietlacza do pinu 9.
* Analog x do pinu A0, analog Y do pinu A1
* przycisk do pinu 12
* Dioda LED do pinu 13.
* Serwo do pinu 11
*/


#include <LiquidCrystal.h>
#include <Servo.h>

#define lcdLed 9
#define LED 13
#define przycisk 12
#define analogX A0
#define analogY A1

LiquidCrystal lcd(2,3,4,5,6,7);
Servo serwo;

int wartoscX = 0;
int wartoscY = 0;
byte jasnosc = 130;
byte pozycja = 90;
bool dioda = false;

void setup(){
 lcd.begin(16,2);
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Witaj");
 analogWrite(lcdLed, jasnosc);
 delay(1000);
 pinMode(przycisk, INPUT_PULLUP);
 pinMode(lcdLed, OUTPUT);
 pinMode(LED, OUTPUT);
 delay(1500);
 lcd.clear();
}

void loop(){
 //Ustawienie jasnosci wyswietlacza
 while(digitalRead(przycisk) == HIGH){
   ustjasnosc();
 }
 while(digitalRead(przycisk) == LOW){lcd.clear();delay(20);}


//Sterowanie manualne serwem
 while(digitalRead(przycisk) == HIGH){
   serwo.attach(11);
   sterujserwo();
 }
 while(digitalRead(przycisk) == LOW){lcd.clear();delay(20);serwo.detach();}
}



void ustjasnosc(){
 lcd.setCursor(0,0);
 lcd.print("Jasnosc");
 if(analogRead(analogX) >=800){
   if(jasnosc < 255){
   jasnosc+=5;
   }
 }
 if(analogRead(analogX) <=200){
   if(jasnosc > 0){
   jasnosc-=5;
   }
 }
 if(jasnosc == 0){
   lcd.setCursor(8,0);
   lcd.print("MIN");
 }
 if(jasnosc > 0 && jasnosc < 10){
   lcd.setCursor(8,0);
   lcd.print("00");
   lcd.print(jasnosc);
 }
 if(jasnosc>=10 && jasnosc<100){
   lcd.setCursor(8,0);
   lcd.print("0");
   lcd.print(jasnosc);
 }
 if(jasnosc>=100 && jasnosc<255){
   lcd.setCursor(8,0);
   lcd.print(jasnosc);
 }
 if(jasnosc==255){
   lcd.setCursor(8,0);
   lcd.print("MAX");
 }
 analogWrite(lcdLed, jasnosc);
 delay(50);
}




void sterujserwo(){
 pozycja = map(analogRead(analogX), 0, 1023, 0, 180);
 lcd.setCursor(0,0);
 lcd.print("Serwo");
 lcd.setCursor(0,1);
 if(pozycja <100){
   lcd.print("0");
 }
 lcd.print(pozycja);
 serwo.write(pozycja);
 delay(20);
}
Link do komentarza
Share on other sites

O Kurczaczki... Wielkie dzięki za pomoc 🙂

Problem rozwiązany, przepiąłem diodę wyświetlacza na pin 11 (taki, na którym używanie biblioteki nie dezaktywuje PWM) i wszystko jest w porządku.

Jeszcze raz wielkie dzięki za pomoc, biorę się za rozbudowę programu 🙂

Link do komentarza
Share on other sites

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.