Hey Danke schonmal das ihr das hier lest. Zu erst als Information. Ich benutzte die Arduino IDE deshalb sieht der Code leicht anders aus. Als weitere Informationen. Ich benutzte einen AtMega328p mit 16MHz. Mein Problem ist das Ich in der Schule mit meinen Freunden ein R/C Auto entickel. Wir haben es nun geschafft einen Motor per FErnbedienung zu steuern. Dafür verwenden wir die Bibliothek VirtualWire. Nun möchten wir auch natürlich unser Fahrzeug lenken. Dies ist aber unser Kern Problem. Zunächst wollten wir einfach noch die ServoBilbiothek benutzen diese schneidet sich aber mit der anderen Bibliothek. Also haben wir nun unser eigenes Servo Programmm geschrieben per Interrupts um den Servo zu steuern dieses funktioniert auch alleine wieder. Doch wenn wir nun wieder die Bibliothek hinzufügen wird nichts mehr gesendet. In dem Quelltext soll wieder der Motor per Funk angesteuert werden und der Servo soll einfach die Position einnehmen die wir ihm vorher sagen. Ich hoffe ihr könnt uns weiter helfen. Ich danke euch jetzt schon mal für eure Beiträge. Hier unser Code.
1 | #include <VirtualWire.h> |
2 | |
3 | const int receive_pin = 11; |
4 | String Ergebnis ; |
5 | long int Ergebnis2; |
6 | volatile int ServoPos; |
7 | volatile int timeCount; |
8 | |
9 | ISR( TIMER2_COMPA_vect) // Interruptbehandlungsroutine |
10 | {
|
11 | timeCount++; |
12 | if( timeCount == 2000 ){ |
13 | timeCount = 0; |
14 | PORTB |= ( 1 << PORTB5 ); |
15 | }
|
16 | |
17 | else if( timeCount == 150){ |
18 | PORTB &= ~( 1 << PORTB5 ); |
19 | }
|
20 | }
|
21 | |
22 | void setup() { |
23 | Serial.begin(9600); |
24 | Serial.println("setup"); |
25 | vw_set_rx_pin(receive_pin); |
26 | vw_setup(2000); |
27 | vw_rx_start(); |
28 | pinMode(4,OUTPUT); |
29 | pinMode(5,OUTPUT); |
30 | pinMode(2,OUTPUT); |
31 | pinMode(13,OUTPUT); |
32 | |
33 | digitalWrite(4,LOW); |
34 | digitalWrite(5,HIGH); |
35 | analogWrite(2,0); |
36 | |
37 | //Servo
|
38 | |
39 | TCCR2A |= (1<<WGM21); // CTC-Mode |
40 | TCCR2A &= ~(1<<WGM20); |
41 | TCCR2B &= ~(1<<WGM22); // CTC-Mode |
42 | TCCR2B |= (1 << CS20); |
43 | TCCR2B &= ~(1 << CS22); |
44 | TCCR2B &= ~(1<< CS21); |
45 | TIMSK2 |= (1<<OCIE2A); // Timer-Compare Interrupt an |
46 | OCR2A = 159; // Neutralposition ((2500-2312)*0.008ms)=1,5ms) |
47 | |
48 | sei(); // Interrupts global an |
49 | timeCount = 0; |
50 | }
|
51 | |
52 | void loop() { |
53 | int i; |
54 | uint8_t buf[VW_MAX_MESSAGE_LEN]; |
55 | uint8_t buflen = VW_MAX_MESSAGE_LEN; |
56 | vw_get_message(buf,&buflen); |
57 | Ergebnis=String(buf[0]-48)+String(buf[1]-48)+String(buf[2]-48)+String(buf[3]-48); |
58 | Ergebnis2 = Ergebnis.toInt(); |
59 | Serial.println(Ergebnis2); |
60 | Ergebnis2 = map(Ergebnis2,0,1024,100,200); |
61 | Serial.println(Ergebnis2); |
62 | analogWrite(2,Ergebnis2); |
63 | |
64 | |
65 | |
66 | vw_wait_rx(); |
67 | |
68 | }
|
MFG Jan-Peter Meyer