zioloiso Napisano Kwiecień 10, 2018 Udostępnij Napisano Kwiecień 10, 2018 Zastanawiam się dlaczego po dodaniu biblioteki do serva, kompilator nie kompiluje kodu, bo chce serwo wykorzystać jako kierownice. #define od_ch1 3 //numer pinuodbiornika #define od_ch2 6 // drugi kanal #define PWM 10 // wyjscie z jaka predkoscia jedzie #define A_d 4 // kierunki obrotow #define B_d 8 #include <Servo.h> // biblioteka serwa Servo serwomechanizm; // obiet dzieki ktoremu mozemy sie odwolac do serwa int ch1 = 0; // zmienne z odbiornika int ch2 = 0; // zmienne z odbiornika int szybkosc = 0; // zmienna do pwm szybkosci void setup() { Serial.begin(9600); serwomechanizm.attach(9); // serwomechanizm podlaczony do pinu X serwomechanizm.write(100); // pozycja zero serwa pinMode(od_ch1,INPUT); pinMode(od_ch2,INPUT); pinMode(PWM, OUTPUT); //Sygnał PWM silnika pinMode(A_d, OUTPUT); //Sygnały sterujące kierunkiem obrotów silnika nr 1 pinMode(B_d, OUTPUT); //timer cli(); TCCR1A = 0; TCCR1B = 0; TCNT1 = 0; OCR1A = 3200; // probkowanie co okolo 200 ms TCCR1B |= (1 << WGM12); TCCR1B |= (1 << CS12) | (1 << CS10); TIMSK1 |= (1 << OCIE1A); sei(); }//setup ISR(TIMER1_COMPA_vect){ driver( &szybkosc, ch2 ); pilot( &ch1, &ch2 ); } void pilot( int *ch1, int * ch2 ) { *ch1 = pulseIn(od_ch1, HIGH); *ch2 = pulseIn(od_ch2, HIGH); } void driver( int * szybkosc, int ch2 ) { *szybkosc = map(ch2, 1000, 2000, -255, 255); if( *szybkosc >= -50 && *szybkosc <= 50 ){ digitalWrite(A_d,LOW); digitalWrite(B_d,LOW); } if( *szybkosc >= 50 ) { digitalWrite(A_d,HIGH); digitalWrite(B_d,LOW); } if( *szybkosc < 0 ) { *szybkosc = abs( *szybkosc ); if( *szybkosc >= 50 ){ digitalWrite(A_d,LOW); digitalWrite(B_d,HIGH); } } } void kierowanie( int * ch2 ) { } void loop() { } __________ Komentarz dodany przez: Treker Cytuj Link do komentarza Share on other sites More sharing options...
Zero Kwiecień 10, 2018 Udostępnij Kwiecień 10, 2018 A czemu nie wkleisz tego co kompilator wyrzucił w konsoli? W tym przypadku może to być bardziej pomocne od kodu programu (może przydać się też info o tym skąd jest biblioteka - tak tylko głośno myślę). --- dodane ciągle się uczę, że trzeba się domyślić kod przekleić i ... libraries\Servo\avr\Servo.cpp.o (symbol from plugin): In function `ServoCount': (.text+0x0): multiple definition of `__vector_11' sketch\DigitalReadSerial.ino.cpp.o (symbol from plugin)🙁.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Błąd kompilacji dla płytki Arduino/Genuino Uno --- Google mówi coś o konflikcie z timerem. https://forum.arduino.cc/index.php?topic=443192.0 Sorry chciałem dobrze a wyszło, że "nie wiem, ale się wypowiem" 🤯 1 Cytuj Link do komentarza Share on other sites More sharing options...
zioloiso Kwiecień 10, 2018 Autor tematu Udostępnij Kwiecień 10, 2018 Czyli co wywalić timer i święto. W sumie nic nie przeszkadza jak program będzie się np co 100-250 ms wykonywał. Cytuj Link do komentarza Share on other sites More sharing options...
Zero Kwiecień 10, 2018 Udostępnij Kwiecień 10, 2018 Jeżeli zakomentujesz te fragmenty z timerem, które dodałeś to program się skompiluje. Ale czy będzie działał tak jak zamierzałeś? Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
zioloiso Kwiecień 10, 2018 Autor tematu Udostępnij Kwiecień 10, 2018 W tym projekcie obejdzie się bez timera, ale w następnym by się przydał, bo będę chciał zrobić, aby model sam jeździł, bez sterowania na czujniku ultra dźwiękowym. Zastanawiam się jak to przeskoczyć. Cytuj Link do komentarza Share on other sites More sharing options...
Lukaszm Kwiecień 10, 2018 Udostępnij Kwiecień 10, 2018 https://arduino-info.wikispaces.com/Timers-Arduino Timer0: 8bit timer. In the Arduino world timer0 is been used for the software Sketch timer functions, like __delay()__, __millis()__ and __micros()__. If you change timer0 registers, this may influence the Arduino timer function. So you should know what you are doing. Timer1: 16bit timer. In the Arduino world the __Servo library__ uses timer1 on Arduino Uno (timer5 on Arduino Mega). Timer2: 8bit timer like timer0. In the Arduino world the __tone()__ function uses timer2. Timer3, Timer4, Timer5: 16bit Timers Timer 3,4,5 are only available on Arduino Mega boards. Musisz wykorzystać wolny timer (czyli np. numer 2 jeśli masz płytkę z 328p). 1 Cytuj Link do komentarza Share on other sites More sharing options...
zioloiso Kwiecień 12, 2018 Autor tematu Udostępnij Kwiecień 12, 2018 Ok, a jak zrobić, aby mikro serwo po każdym włączeniu ustawiało się w tym samy miejscu? Bo mam tak, że nie jest zawsze tak samo, nie będę przecież tego pozycjonował za każdym razem. Cytuj Link do komentarza Share on other sites More sharing options...
Lukaszm Kwiecień 12, 2018 Udostępnij Kwiecień 12, 2018 Ok, a jak zrobić, aby mikro serwo po każdym włączeniu ustawiało się w tym samy miejscu? To dziwna sprawa, powinno ustawiać się dla danej długości impulsu sterującego zawsze w tej samej pozycji - oczywiście z poprawką na dokładność pozycjonowania + zakładam, że nie ma na ramieniu serwa jakiegoś dużego obciążenia. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!