|
|
|
![]() |
![]() |
|
In diesem Beispiel soll ein 4WD Car mit einem Joystick Shield gesteuert werden. Beim Joystick
Shield handelt es sich um das Nokia 5110. Die Installation des Shields ist einfach. Es wird einfach
auf das Arduino Board aufgesteckt. Mit Hilfe eines Schiebeschalters unten links kann man zwischen
einer 3,3V oder einer 5V Spannung variieren. Bei einer Spannung von 5V erhält man für die
Lage des Joystick die Zahlenwerte 0-1024(bzw. 1023). Stellt man 3,3 V ein, so bewegen sich die
Zahlenwerte zwischen 0-692. Dies gilt sowohl für die X- als auch für die Y-Achse. Um zu überprüfen, ob alle Buttons und der Joystick richtig eingerichtet wurden, gibt es den folgenden Sketch, der die entsprechenden Werte der unterschiedlichen Buttons im Seriellen Monitor anzeigt. |
|
||||||||||||||||||||
|
// Joystick Shield Beispiel Programm int const UP_BTN =2; int const DOWN_BTN =4; int const LEFT_BTN =5; int const RIGHT_BTN =3; int const E_BTN =6; int const F_BTN =7; int const JOYSTICK_BTN =8; int const JOYSTICK_AXIS_X =A0; int const JOYSTICK_AXIS_Y =A1; int buttons[] = {UP_BTN,DOWN_BTN,LEFT_BTN,RIGHT_BTN, E_BTN,F_BTN,JOYSTICK_BTN}; void setup(){ // Set all button pins as inputs with internal pullup resistors enabled. for (int i;i<7; i++) pinMode(buttons[i],INPUT_PULLUP); Serial.begin(9600); } |
void loop(){ // Check each button input and print the status to the Serial Monitor Window Serial.print(”Up= ”);Serial.println(digitalRead(UP_BTN); Serial.print(”Down= ”);Serial.println(digitalRead(DOWN_BTN); Serial.print(”Left= ”);Serial.println(digitalRead(LEFT_BTN); Serial.print(”Right= ”);Serial.println(digitalRead(RIGHT_BTN); Serial.print(”E= ”);Serial.println(digitalRead(E_BTN); Serial.print(”F= ”);Serial.println(digitalRead(F_BTN); Serial.print(”JOYSTICK BTN= ”);Serial.println(digitalRead(JOYSTICK_BTN); // Print the full X/Y joystick values (0 – 1023) Serial.print(”X= ”);Serial.println(analogRead(JOYSTICK_AXIS_X)); Serial.print(”Y= ”);Serial.println(analogRead(JOYSTICK_AXIS_Y)); Serial.print(” ”); delay(1000); } |
![]() |
|
|
||||||||||||||||||||||||||||||||||||||
|
1. Ansteuerung der Motoren mit Hilfe des Motor-Shields L298N Die Ansteuerung der Motoren geschieht ohne PMW, d.h. die Geschwindigkeit der Motoren kann nicht verändert werden. Die Verkabelung zwischen Arduino und dem Motor-Shield L298N ist der Tabelle zu entnehmen. |
|
Sketch für die Überprüfung int motor1pin1 = 3; int motor1pin2 = 4; int motor2pin1 = 5; int motor2pin2 = 6; void setup(){ pinMode(motor1pin1,OUTPUT); pinMode(motor1pin2,OUTPUT); pinMode(motor2pin1,OUTPUT); pinMode(motor2pin2,OUTPUT); } void loop(){ digitalWrite(motor1pin1,HIGH); digitalWrite(motor1pin2,LOW); digitalWrite(motor2pin1,HIGH); digitalWrite(motor2pin2,LOW); delay(1000); digitalWrite(motor1pin1,LOW); digitalWrite(motor1pin2,HIGH); digitalWrite(motor2pin1,LOWIGH); digitalWrite(motor2pin2,HIGH); delay(1000); } |
![]() Der Sketch überprüft, ob das Motor-Shield L298N richtig angeschlossen ist. Außerdem sieht man gleichzeitig, ob die Motoren auch anspringen. |
| 2. Als nächstes wird überprüft, ob die Verbindung über die nRF24L01-Module funktioniert. Dazu benötigt man sowohl einen Sketch für den Sender als auch für den Empfänger. | |
|
Sketch für den Sender // mRF24L01 – Sender #include #include "nRF24L01.h" #include "RF24.h" #define PIN_CE 9 #define PIN_CSN 10 RF24 radio(PIN_CE, PIN_CSN) // definiert ein Objekt um nRF24L01 zu kontrollieren byte adresses[][6]= {"007","001"}; int data[3] = {0,512,512}; void setup() { Serial.begin(9600); // Initialisieren radio radio.begin(); // Initialisieren von nRF24L01 radio.setRetries(0,15); // Festlegen der Wiederholungszeit radio.setPALevel(RF24_PA_HIGH); // Power festgelegt radio.openWritingPipe(adresses[1]); // Öffnen des Übertragungskanal radio.openReadingPipe[1,adresses[0]); radio.stopListening(); delay(1000);} void loop() { for (int=0, i< 255;i++){ Serial.print("Senden: "); Serial.println(i); data[0] = i; // schreibt die aktuellen integer-Zahlen ins Übertragungs-Array radio.write(data, sizeof(data),0); // senden des Array delay(1000); // 1 Sekunde warten } |
Sketch für den Empfänger d // mRF24L01 – Empfänger (Receiver) #include #include "nRF24L01.h" #include "RF24.h" #define PIN_CE 7 #define PIN_CSN 8 RF24 radio(PIN_CE, PIN_CSN) byte adresses[][6]= {"007","001"}; #define SIZE 5 int data[SIZE]; void setup() { Serial.begin(9600); delay(2000); Serial.println("init.rf"); radio.begin(); // Initialisieren von nRF24L01 radio.setRetries(0,15); // Festlegen der Wiederholungszeit radio.setPALevel(RF24_PA_HIGH); // Power festgelegt radio.openWritingPipe(adresses[1]); // Öffnen des Übertragungskanal radio.openReadingPipe[1,adresses[0]); radio.stopListening(); delay(1000);} void loop() { // Daten-Empfang receiveData();} void receiveData() { if (radio.available()) { // wenn Daten empfangen werden // Lesen der Daten while (radio.available()){ Serial.print("Empfangen = "); Serial.println(data[0]);} } else{Serial.print(„Kein Empfang "); // Nur um zu testen ob irgendetwas passiert } } |
| 3. Zum Schluss benötigt man einen Sketch für das Joystick Shield und einen für das Auto. | |
|
#include #include #include #define CE_PIN 9 #define CSN_PIN 10 int up_button = 2; // Boton Amarillo - A int down_button = 4; // Boton Amarillo - C int left_button = 5; // Boton Azul - D int right_button = 3; // Boton Azul - B int start_button = 6; // Boton F int select_button = 7; // Boton E int analog_button = 8; // int x_axis = A0; int y_axis = A1; int buttons[]={up_button, down_button,left_button, right_button, start_button, select_button, analog_button}; const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN,CSN_PIN); char msg[20] = ""; void setup(){ for(int i; i <7 ; i++) { pinMode(buttons[i],INPUT); digitalWrite(buttons[i],HIGH); } Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); } void loop(){ if(digitalRead(up_button)==LOW) { char msg[]="up"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("UP Button Pressed"); } if(digitalRead(down_button)==LOW) { char msg[]="down"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Down Button Pressed"); } if(digitalRead(left_button)==LOW) { char msg[]="left"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Left Button Pressed"); } if(digitalRead(right_button)==LOW) { char msg[]="right"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Rigth Button Pressed"); } if(digitalRead(start_button)==LOW) { char msg[]="start"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Start Button Pressed"); } if(digitalRead(select_button)==LOW) { char msg[]="select"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Select Button Pressed"); } if(digitalRead(analog_button)==LOW) { char msg[]="analgobut"; radio.write(&msg,sizeof(msg)); delay(300); Serial.println("Analog Button Pressed"); } Serial.print("\n X ="),Serial.print(analogRead(x_axis)),Serial.print(" \n Y = "), Serial.print(analogRead(y_axis)); Serial.print(" "); delay(500); } |
#include #include #include #include #define CE_PIN 9 #define CSN_PIN 10 const int RightMotorF= 3; const int RightMotorB= 4; const int LeftMotorF= 5; const int LeftMotorB= 6; char data[20]=""; RF24 radio(CE_PIN,CSN_PIN); const uint64_t pipe = 0xE8E8F0F0E1LL; void setup() { pinMode(RightMotorF,OUTPUT); pinMode(RightMotorB,OUTPUT); pinMode(LeftMotorF,OUTPUT); pinMode(LeftMotorB,OUTPUT); Serial.begin(9600); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop(){ String msg=""; if ( radio.available() ) { radio.read( data,sizeof(data) ); Serial.println(data); msg=data; if(msg=="up") { digitalWrite(RightMotorB,LOW); digitalWrite(LeftMotorB,LOW); digitalWrite(RightMotorF,HIGH); digitalWrite(LeftMotorF,HIGH); Serial.println("Motor forward"); } else if(msg=="down") { digitalWrite(RightMotorB,HIGH); digitalWrite(LeftMotorB,HIGH); digitalWrite(RightMotorF,LOW); digitalWrite(LeftMotorF,LOW); Serial.println("Motor Back"); } else if(msg=="left") { digitalWrite(RightMotorB,LOW); digitalWrite(LeftMotorB,HIGH); digitalWrite(RightMotorF,HIGH); digitalWrite(LeftMotorF,LOW); Serial.println("Left"); delay(300); digitalWrite(RightMotorB,LOW); digitalWrite(LeftMotorB,LOW); digitalWrite(RightMotorF,LOW); digitalWrite(LeftMotorF,LOW); } { digitalWrite(RightMotorB,HIGH); digitalWrite(LeftMotorB,LOW); digitalWrite(RightMotorF,LOW); digitalWrite(LeftMotorF,HIGH); Serial.println("right"); delay(300); digitalWrite(RightMotorB,LOW); digitalWrite(LeftMotorB,LOW); digitalWrite(RightMotorF,LOW); digitalWrite(LeftMotorF,LOW); } else if(msg=="analgobut") digitalWrite(LeftMotorB,LOW); digitalWrite(RightMotorF,LOW); digitalWrite(LeftMotorF,LOW); Serial.println("STOP it"); } } } |