From 650781b6fe03d0144540fbaa4edacff94bea8655 Mon Sep 17 00:00:00 2001 From: Lukas Reichwein Date: Sun, 9 Feb 2020 15:29:33 +0100 Subject: [PATCH 1/2] added some Dokumentation and tempoary display Code --- Code/miniRobotRC/JoystickSteuerung.ino | 14 +++- Code/miniRobotRC/_main.ino | 6 +- Code/miniRobotRC/fahrsteuerung_old.ino | 10 +-- Code/miniRobotRC/joystick.ino | 2 +- Latex/images/nRF24L01Pinout.png | Bin 0 -> 35835 bytes Latex/main.tex | 112 ++++++++++++++++--------- Latex/references.bib | 27 ++++-- 7 files changed, 114 insertions(+), 57 deletions(-) create mode 100644 Latex/images/nRF24L01Pinout.png diff --git a/Code/miniRobotRC/JoystickSteuerung.ino b/Code/miniRobotRC/JoystickSteuerung.ino index 6c03c41..049aa33 100644 --- a/Code/miniRobotRC/JoystickSteuerung.ino +++ b/Code/miniRobotRC/JoystickSteuerung.ino @@ -43,12 +43,20 @@ void joystickInit() { } void showValuesOnLCD(){ - lcd.clear(); + //TODO BUILD STRING + //lcd.clear(); + lcd.gotoXY(0,0); + lcd.print(" "); + lcd.gotoXY(0,0); lcd.print("WithLib"); - lcd.gotoXY(0,2); + lcd.gotoXY(0,1); + lcd.print(" "); + lcd.gotoXY(0,1); lcd.print("LeftPWM: "); lcd.print(left -> PWMValue); - lcd.gotoXY(0,4); + lcd.gotoXY(0,2); + lcd.print(" "); + lcd.gotoXY(0,2); lcd.print("RightPWM: "); lcd.print(right -> PWMValue); } diff --git a/Code/miniRobotRC/_main.ino b/Code/miniRobotRC/_main.ino index e851f94..6fa2553 100644 --- a/Code/miniRobotRC/_main.ino +++ b/Code/miniRobotRC/_main.ino @@ -35,11 +35,13 @@ void loop() { tasten.clearButton(buttonStart); while(!tasten.getButtonCycle(buttonStart)){ joystickSteuerung(); //TODO () + + } tasten.clearButton(buttonStart); //Temperatur- und Abstandsmessung - + /* temperature = dallas(4, 0); if(millis() - timer >= 100){ @@ -48,7 +50,7 @@ void loop() { } distance = calculateDistance(); - + */ } void lcdMenu() { diff --git a/Code/miniRobotRC/fahrsteuerung_old.ino b/Code/miniRobotRC/fahrsteuerung_old.ino index 915b3ba..3d9dc04 100644 --- a/Code/miniRobotRC/fahrsteuerung_old.ino +++ b/Code/miniRobotRC/fahrsteuerung_old.ino @@ -3,34 +3,34 @@ void manualDigitalDrive() { // while(!tasten.getButtonCycle(buttonL1)) { clearCommands(); if(!tasten.getAnyPressed()) { - lcd.clear(); + //lcd.clear(); lcd.println("Warte..."); } if(tasten.checkButton(buttonB) || tasten.checkButton(buttonUp)) { pwmA = -215; pwmB = -255; - lcd.clear(); + //lcd.clear(); lcd.println("geradeaus fahren"); goOn =true; } if(tasten.checkButton(buttonC) || tasten.checkButton(buttonDown)) { pwmA = 100; pwmB = 255; - lcd.clear(); + //lcd.clear(); lcd.println("rueckwaerts fahren"); goOn =true; } if(tasten.checkButton(buttonRight)) { pwmA = -100; //rechter Motor pwmB = 100; - lcd.clear(); + //lcd.clear(); lcd.println("rechts lenken"); goOn =true; } if(tasten.checkButton(buttonLeft)) { pwmB = -100; pwmA = 100; - lcd.clear(); + //lcd.clear(); lcd.println("links lenken"); goOn =true; } diff --git a/Code/miniRobotRC/joystick.ino b/Code/miniRobotRC/joystick.ino index 70d8392..be1ead8 100644 --- a/Code/miniRobotRC/joystick.ino +++ b/Code/miniRobotRC/joystick.ino @@ -40,7 +40,7 @@ void motorMapping() { pwmB = map(leftPWM, -255,255,leftMin,leftMax); pwmA = map(rightPWM, -255,255,rightMin,rightMax); if((millis() - temp) > 100) { - lcd.clear(); + //lcd.clear(); lcd.println("Links: "); lcd.println(pwmB); lcd.gotoXY(0,2); diff --git a/Latex/images/nRF24L01Pinout.png b/Latex/images/nRF24L01Pinout.png new file mode 100644 index 0000000000000000000000000000000000000000..44bd99c2c2a53ae02e59403b2c957e4b5f653517 GIT binary patch literal 35835 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 C7PEH% literal 0 HcmV?d00001 diff --git a/Latex/main.tex b/Latex/main.tex index b2ba9c7..dbf07ff 100644 --- a/Latex/main.tex +++ b/Latex/main.tex @@ -1,4 +1,4 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%--------------------------------------------- % Lachaise Assignment % LaTeX Template % Version 1.0 (26/6/2018) @@ -13,25 +13,27 @@ % License: % CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%--------------------------------------------------- %---------------------------------------------------------------------------------------- % PACKAGES AND OTHER DOCUMENT CONFIGURATIONS %---------------------------------------------------------------------------------------- \documentclass{article} +% Include the file specifying the document structure and custom commands +\input{structure.tex} -\input{structure.tex} % Include the file specifying the document structure and custom commands %---------------------------------------------------------------------------------------- % INFORMATION %---------------------------------------------------------------------------------------- -\title{Open Source Roboter Plattform} % Title +% Title +\title{Open Source Roboter Plattform} \author{Lukas Reichwein\\ Yves Ehrlich\\ Nick Gnoevoj} -\date{University of Applied Science Fulda --- \today} % University, school and/or department name(s) and a date +\date{University of Applied Science Fulda --- \today} %---------------------------------------------------------------------------------------- @@ -46,13 +48,13 @@ %---------------------------------------------------------------------------------------- \section{Vorwort} % Unnumbered section - \paragraph{Motivation} - Eine Plattform bieten ist etwas, das momentan sehr stark im Trend liegt, sei es im Software oder im Hardware Bereich. Im Softwarebereich zeigt sich dies meist durch Open-Source Bibliotheken, welche möglichst variabel einsetzbaren Code für jeden frei zugänglich machen. \\ - Ein solches Projekt war auch von einem der Projektmitglieder (Yves Ehrlich) als Privates Projekt geplant und so kam die Überlegung dies innerhalb des Modules Embedded Networking zu wählen.\linebreak - \paragraph{Basis des Projektes} + \paragraph{Motivation: } + Eine Plattform bieten ist etwas, das momentan sehr stark im Trend liegt, sei es im Software oder im Hardware Bereich. Im Softwarebereich zeigt sich dies meist durch Open-Source Bibliotheken, welche möglichst variabel einsetzbaren Code für jeden frei zugänglich machen. + Ein solches Projekt war auch von einem der Projektmitglieder (Yves Ehrlich) als Privates Projekt geplant und so kam die Überlegung dies innerhalb des Modules Embedded Networking zu wählen. + \paragraph{Basis des Projektes: } Als Basis des Projektes dient einer schon bereits von Yves Ehrlich angefertigter Arduino Nano Shield samt Code, \cite{nanoGame} welcher als Fernsteuerung verwendet wird. - \paragraph{Ziel des Projektes} + \paragraph{Ziel des Projektes: } Ziel des Projektes ist ein ferngesteuerte, Open-Source basierende Roboterplattform. \newpage @@ -96,7 +98,7 @@ Bedingt durch den Zeitaufwand des gesamten Projektes und anderer Studienmodule h \section{Mechanik}%Yves Wie bereits unter „Überlegung“ erwähnt, gestaltete sich der Aufbau mit Achsträger, Radlager und Lagerschalen uvm. als zu Zeitintensiv um in der vorgegebenen Zeit bewältig werden zu können. -Zum Entwurf der mechanischen Bauteile wurde das CAD Programm Fusion 360 von Autodesk verwendet. Dabei gab es kaum Schwierigkeiten, da Yves bereits sehr viel Erfahrung mit 3D-CAD Programmen gesammelt hat. Lediglich der Zwang Windows zu benutzen stellt eine ständige Unannehmlichkeit dar. +Zum Entwurf der mechanischen Bauteile wurde das CAD Programm Fusion 360 von Autodesk verwendet. Dabei gab es kaum Schwierigkeiten, da Yves Ehrlich bereits sehr viel Erfahrung mit 3D-CAD Programmen gesammelt hat. Lediglich der Zwang Windows zu benutzen stellt eine ständige Unannehmlichkeit dar. Alle Entwürfe wurden mit einem 3D Drucker gedruckt, einem HCmaker7, ein Klon des bekannten Creality CR-10S. Das Material der Wahl war PLA. Für einen Außeneinsatz ist das Material wegen der geringen Witterungsbeständigkeit kaum geeignet. Insbesondere die geringe Temperaturbeständigkeit (max. 60°C) disqualifizieren das Material für den Einsatz in der Sonne. Da dies aber ohnehin nicht mehr geplant war, ist das Material für unseren Zweck geeignet. @@ -120,7 +122,7 @@ Da die Herstellung der Platine von Hand erfolgen sollte, haben wir die Strukture \section{Verfahren}%Yves -Als Verfahren zum beschichten der Platine diente die Tonertransfermethode. Dabei wird die Schaltung mit einem Laserdrucker auf geeignetes Papier gedruckt, in diesem Fall Photopapier, und dann mit Hitze auf die blanke Platine gedrückt. Für diesen Zweck hat Yves ein Laminiergerät umgebaut, welches den Vorgang erheblich erleichtert. +Als Verfahren zum beschichten der Platine diente die Tonertransfermethode. Dabei wird die Schaltung mit einem Laserdrucker auf geeignetes Papier gedruckt, in diesem Fall Photopapier, und dann mit Hitze auf die blanke Platine gedrückt. Für diesen Zweck hat Yves Ehrlich ein Laminiergerät umgebaut, welches den Vorgang erheblich erleichtert. Da unsere Platine doppelseitig ist, müssen zuvor die zwei Seiten, welche die Schaltung enthalten Deckungsgleich aufeinander ausgerichtet werden und dann an den Rändern verklebt werden, damit man am Ende eine Art Tasche erhält, in welche dann die Platine eingesteckt werden kann. Das ganze läuft dann einige Male durch das Laminiergerät. Nach dem das erfolgt ist, lässt man die Platine etwas abkühlen und ab einer Temperatur von etwa 30-40°C schneidet man die Tasche seitlich auf und zieht vorsichtig das Papier ab. Der Toner bleibt am Kupfer haften und schützt an diesen Stellen, wie ein Fotolack, das Kupfer davor weggeätzt zu werden. Anschließen gibt man die beschichtete Platine in eine Ätzküvette welche mit einer Natriumpersulfat-Lösung gefüllt ist. Nach einiger Zeit kann man beim durchleuchten der Küvette sehen, wie sich das Kupfer immer weiter auflöst, bis am Ende die Schaltung klar und deutlich zu sehen ist. Dann wird die Platine entnommen und gründlich mit Wasser abgespült. @@ -135,9 +137,10 @@ Nach dem verpressen (mangels passender Presse eher mit einem Körner breitschlag \end{figure} %Platine -\begin{figure}[h] - \subfigure[Top-Layer]{\includegraphics[width=8cm]{pcbTop.png}} - \subfigure[Bottom-Layer]{\includegraphics[width=8cm]{pcbBottom.png}} +\begin{figure}[h] + \centering + \subfigure[Top-Layer]{\includegraphics[width=7.5cm]{pcbTop.png}} + \subfigure[Bottom-Layer]{\includegraphics[width=7.5cm]{pcbBottom.png}} \caption{fertig geätzte Platine} \end{figure} @@ -157,9 +160,9 @@ Wegen der Überschaubarkeit der Schaltung haben wir auf einen Schaltplan verzich Auf die Fernsteuerung soll an dieser Stelle nicht näher eingegangen werden, da diese zum Zeitpunkt der Erstellung dieses Projektes bereits „fertig“ war. Es wurden lediglich ein Joystick sowie ein NRF24 ergänzt. -Detaillierte Informationen finden sich im dazugehörigen Repositorium. +Detaillierte Informationen finden sich im dazugehörigen Repositorium\cite{nanoGame}. -Im Rahmen eines Arduino Workshops für Anfänger entwickelte Yves eine Platine, welche als Shield für einen Arduino Nano fungiert. Sie enthält grundlegende Dinge wie Tasten, einen Akku, eine stabile 5V Spannungsversorgung sowie ein monochromes LCD Display mit Hintergrundbeleuchtung, um nur die wichtigsten Sachen zu nennen. +Im Rahmen eines Arduino Workshops für Anfänger entwickelte Yves Ehrlich eine Platine, welche als Shield für einen Arduino Nano fungiert. Sie enthält grundlegende Dinge wie Tasten, einen Akku, eine stabile 5V Spannungsversorgung sowie ein monochromes LCD Display mit Hintergrundbeleuchtung, um nur die wichtigsten Sachen zu nennen. Dank der Buchsenleiste auf der Rückseite, welche neben 3,3V und 5V Spannungsversorgung auch diverse I/Os und Analogeingänge bereitstellt, lässt sich das Shield „nanoGame“ hervorragend erweitern und für viele verschiedene Dinge nutzen, so auch als Fernsteuerung für unseren Roboter. @@ -195,42 +198,69 @@ Da das Array eine feste Größe von 32 Byte hat, lassen sich folglich bis zu 10 \newpage \section{SPI}%Lukas +\subsection{Was ist SPI?} +SPI - Serial Peripheral Interface ist der Standard für ein Synchronen Seriellen Datenbus. Dieser Datenbus kann zwei digitale Schaltungen mittels Master-Slave prinzip verbinden \cite{SPI}. Der Bus ermöglicht die verwendung von Mehreren Slaves, jedoch wird die Anzahl der Slaves durch die Anzahl der CS - ChipSelect Leitungen begrenzt. Die Datenübertragung geschiet über eine Seperate Leitung, auch SD (Serial Data) genannt. +\paragraph{Rolle des Masters} +Der Master gibt das Taktsignal über den SCK (Serial Clock) Ausgang an, desweiteren wählt er einen Slave mit welchem er kommunizieren möchte über den CS (ChipSelect). +\paragraph{Rolle des Slaves} %TODO + +\subsection{Einsatz von SPI innerhalb des Projektes} +\paragraph{Verbindung: } +Um die Verbindung zwischen dem nRF24L01 Chip und dem Arduino herzustellen wurden zunächst alle Verbindungen mit Ausnahme des IRQ Pins getätigt, da dieser lediglich Interrupt Steuerung ermöglicht. Im Folgender Graphik ist das Pinout vom nRF24L01 Chip abgebildet. Dabei sind die Kürzel wie folgt benannt: CE - Chip Enable dieser entspricht dem Chip Select Pin, CSN -Ship Select Not dieser ist die Invertierte version des CE, SCK - Serial Clock, MISO - Master in Slave out, MOSI - Master out Slave in und die beiden Pins für die Stromversorgung VCC und Ground. Die beiden pins MISO und MOSI sind die Datenleitungen und werden an den Gleichnamingen Pins des Arduinos angeschlossen. +\begin{figure}[h] + \includegraphics[width=8cm]{nRF24L01Pinout.png} + \centering + \caption{Pinout des nRF24L01 Chips \cite{nRF24Pinout}} +\end{figure} \newpage \section{Funksteuereung} %Lukas - Wie schon zuvor erwähnt wird für die Basis der Funksteuerung das Arduino Shield verwendet, welches mit einem RF24 Chip erweitert wurde. - \subsection{RF24} %Oder nur als paragraph je nachdem wie viel zusammen kommt. - Die Opensoucre Bibliothek RF24 \cite{RF24_Lib} diente als Codebasis für die Funksteuerung. Da diese Bibliothek bei korrekter Verwendung genau auf die Kommunikation zwischen zwei nRF24L01 Chips abgestimmt ist. + Wie schon zuvor erwähnt wird für die Basis der Funksteuerung das Arduino Shield verwendet, welches mit dem nRF24L01 Chip erweitert wurde. Der Roboter wurde ebenfalls mit dem nRF24L01 ausgestattet. + \subsection{Allgemeine Verwendung von RF24} %Oder nur als paragraph je nachdem wie viel zusammen kommt. + Die Opensoucre Bibliothek RF24 \cite{RF24Lib} diente als Codebasis für die Funksteuerung. Da diese Bibliothek bei korrekter Verwendung genau auf die Kommunikation zwischen zwei nRF24L01 Chips abgestimmt ist. Zur Verwendung der Bibliothek muss sie nur inkludiert und Instanziiert werden dabei werden die Beiden Pins CE und CSN für das Hardware-SPI konfiguriert. \begin{file}[RF24 initialisieren] \begin{lstlisting}[language=C++] - #include - RF24 radio(A2, A3); // CE, CSN +#include +RF24 radio(A2, A3); // CE, CSN +const byte address[6] = "00001"; \end{lstlisting} \end{file} Damit sind bereits Sämtliche Konfigurationen für die Hardware-SPI Kommunikation zwischen Arduino nano und dem nRF24L01 erledigt. - Kommunizieren zwischen zwei dieser Setups wird dann durch die Funktionen read und wirite, jedoch muss vor dem Start einer Kommunikation die Methode begin() aufgerufen werden. + Kommunizieren zwischen zwei dieser Setups wird dann durch die Funktionen read und wirite, + jedoch muss vor dem Start einer Kommunikation die Methoden begin(), + openWritingPipe(address) mit address als Kommunikationsleitung und stopListening() bei Sender bzw startListening() beim Empfänger aufgerufen werden. + Die Methode setPALevel() setzt den Power Amplifiyer Level umso höher dieser Wert umso Stärker das Signal, + wodurch der Stromverbrauch Steigt. + Der Anstieg des Stromverbrauchs kann auch bei einer nicht ganz konstanten Stromversorgung dazu führen das das Modul nicht korrekt funktioniert. \begin{file}[RF24 initialisieren] \begin{lstlisting}[language=C++] - //An der Sender Seite - radio.begin(); - radio.write(&payload, sizeof(payload)); - - //An der Empfaenger Seite - radio.begin(); - if (radio.available()) { - radio.read(&payload, sizeof(payload)); - //Payload weiter verarbeiten. - } +//An der Sender Seite +radio.begin(); +radio.openWritingPipe(address); +radio.setPALevel(RF24_PA_MAX); +radio.stopListening(); +radio.write(&payload, sizeof(payload)); + +//An der Empfaenger Seite +radio.begin(); +radio.openReadingPipe(0, address); +radio.setPALevel(RF24_PA_MAX); +radio.startListening(); +if (radio.available()) { + radio.read(&payload, sizeof(payload)); + //Payload weiter verarbeiten. +} \end{lstlisting} \end{file} - - - - - + \subsection{Verwendung innerhalb dieses Projektes} + \paragraph{Am Anfang des Projektes: } + Zu Begin des Projektes wurde zuerst die Funkkommunikation zwischen zwei Arduino's mittels nRF24L01 getestet, dabei gab es schon die ersten Komplikationen. Da der Chip nicht korrekt mit den Hardware SPI Anschlüssen des Arduino verbunden wurde. Nach dem weiteren Einlesen in die Funktionsweise von SPI konnten die Verbindungen richtig gesetzt und diese Komplikation wieder aufgehoben werden. + \paragraph{Logik hinter der Kommunikation: } + Um den Roboter mit der Fernsteuerung auch Steuern zu können musste erst ermittelt werden welche Daten der Roboter benötigt um zu fahren. %TODO Erklärung der Commandos + \newpage \section{Arduino Libaries} %Lukas @@ -247,7 +277,6 @@ Da das Array eine feste Größe von 32 Byte hat, lassen sich folglich bis zu 10 \newpage \section{Ultraschallsensor} %Nick - \newpage %---------------------------------------------------------------------------------------- % Latex Beispeiele @@ -281,7 +310,7 @@ Da das Array eine feste Größe von 32 Byte hat, lassen sich folglich bis zu 10 \end{minipage} \end{center} -%---------------------------------------------------------------------------------------- +%----------------------------------------------------------------------------------------- % Beispiel für Code Snippets. %---------------------------------------------------------------------------------------- @@ -335,4 +364,7 @@ sys.stdout.write("Hello World!\n") %---------------------------------------------------------------------------------------- + + \end{document} + diff --git a/Latex/references.bib b/Latex/references.bib index b74ef68..4d18d3c 100644 --- a/Latex/references.bib +++ b/Latex/references.bib @@ -21,14 +21,29 @@ @Unpublished{nanoGame, author = {Yves Ehrlich}, - note = {Repository Nano Game}, - title = {https://gitlab.informatik.hs-fulda.de/fdai5253/nanogame}, + note = {https://gitlab.informatik.hs-fulda.de/fdai5253/nanogame}, + title = {{N}ano {G}ame}, } -@Article{RF24_Lib, - author = {OpenSourceSoftware}, - note = {Repository RF24}, - title = {https://github.com/nRF24/RF24}, +@Unpublished{RF24Lib, + author = {OpenSource Software}, + note = {https://github.com/nRF24/RF24}, + title = {{RF}24}, +} + +@Article{SPI, + author = {Martin Schwerdtfeger}, + journal = {https://web.archive.org/web/20190116220910/http://www.mct.de/faq/spi.html}, + title = {{SPI} {S}erial {P}eripheral {I}nterface}, + year = {2000}, + month = jun, +} +@MISC{nRF24Pinout, + author = {{Components101}}, + title = {nRF24L01 Wireless RF Module}, + year = {2018}, + note = {[Online; zugegriffen am 09.02.2020]}, + url = {https://components101.com/sites/default/files/component_pin/nRF24L01-Pinout.png} } @Comment{jabref-meta: databaseType:bibtex;} From 0ccb4216e751c05fa00355a1a597749a7250f8ae Mon Sep 17 00:00:00 2001 From: Lukas Reichwein Date: Sun, 9 Feb 2020 15:52:54 +0100 Subject: [PATCH 2/2] solved some left over merge conflicts --- Code/miniRobotRC/JoystickSteuerung.ino | 6 ++++-- Code/miniRobotRC/_main.ino | 15 -------------- Code/miniRobotRC/fahrsteuerung_old.ino | 28 +------------------------- Code/miniRobotRC/joystick.ino | 11 +--------- 4 files changed, 6 insertions(+), 54 deletions(-) diff --git a/Code/miniRobotRC/JoystickSteuerung.ino b/Code/miniRobotRC/JoystickSteuerung.ino index 8accf3f..36b917b 100644 --- a/Code/miniRobotRC/JoystickSteuerung.ino +++ b/Code/miniRobotRC/JoystickSteuerung.ino @@ -45,7 +45,7 @@ void joystickInit() { void showValuesOnLCD(){ //TODO BUILD STRING //lcd.clear(); - lcd.gotoXY(0,0); + /*lcd.gotoXY(0,0); lcd.print(" "); lcd.gotoXY(0,0); lcd.print("WithLib"); @@ -58,7 +58,9 @@ void joystickInit() { lcd.print(" "); lcd.gotoXY(0,2); lcd.print("RightPWM: "); - lcd.print(right -> PWMValue); + lcd.print(right -> PWMValue);*/ + lcdLines[0] = "Links: " + String(left -> PWMValue, DEC); + lcdLines[1] = "Links: " + String(right -> PWMValue, DEC); } void send(){ diff --git a/Code/miniRobotRC/_main.ino b/Code/miniRobotRC/_main.ino index 45e061f..d81f96c 100644 --- a/Code/miniRobotRC/_main.ino +++ b/Code/miniRobotRC/_main.ino @@ -35,21 +35,6 @@ void loop() { } tasten.clearButton(buttonStart); - -<<<<<<< HEAD - //Temperatur- und Abstandsmessung - /* - temperature = dallas(4, 0); - - if(millis() - timer >= 100){ - measureDistance(); - timer = millis(); - } - - distance = calculateDistance(); - */ -======= ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 } void lcdMenu() { diff --git a/Code/miniRobotRC/fahrsteuerung_old.ino b/Code/miniRobotRC/fahrsteuerung_old.ino index eef130b..a2e5aeb 100644 --- a/Code/miniRobotRC/fahrsteuerung_old.ino +++ b/Code/miniRobotRC/fahrsteuerung_old.ino @@ -6,57 +6,31 @@ void manualDigitalDrive() { // while(!tasten.getButtonCycle(buttonL1)) { clearCommands(); if(!tasten.getAnyPressed()) { -<<<<<<< HEAD - //lcd.clear(); - lcd.println("Warte..."); -======= lcdLines[0] = "Warte..."; - - ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 + } if(tasten.checkButton(buttonB) || tasten.checkButton(buttonUp)) { pwmA = -215; pwmB = -255; -<<<<<<< HEAD - //lcd.clear(); - lcd.println("geradeaus fahren"); -======= lcdLines[0] = "geradeaus fahren"; ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 goOn =true; } if(tasten.checkButton(buttonC) || tasten.checkButton(buttonDown)) { pwmA = 100; pwmB = 255; -<<<<<<< HEAD - //lcd.clear(); - lcd.println("rueckwaerts fahren"); -======= lcdLines[0] = "rueckwaerts fahren"; ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 goOn =true; } if(tasten.checkButton(buttonRight)) { pwmA = -100; //rechter Motor pwmB = 100; -<<<<<<< HEAD - //lcd.clear(); - lcd.println("rechts lenken"); -======= lcdLines[0] = "rechts lenken"; ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 goOn =true; } if(tasten.checkButton(buttonLeft)) { pwmB = -100; pwmA = 100; -<<<<<<< HEAD - //lcd.clear(); - lcd.println("links lenken"); -======= lcdLines[0] = "links lenken"; ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 goOn =true; } if(goOn) { diff --git a/Code/miniRobotRC/joystick.ino b/Code/miniRobotRC/joystick.ino index 1abf753..cc65387 100644 --- a/Code/miniRobotRC/joystick.ino +++ b/Code/miniRobotRC/joystick.ino @@ -20,23 +20,14 @@ void motorMapping() { pwmB = map(leftPWM, -255,255,leftMin,leftMax); pwmA = map(rightPWM, -255,255,rightMin,rightMax); if((millis() - temp) > 100) { -<<<<<<< HEAD - //lcd.clear(); - lcd.println("Links: "); - lcd.println(pwmB); - lcd.gotoXY(0,2); - lcd.println("Rechts: "); - lcd.println(pwmA); -======= // lcd.clear(); // lcd.println("Links: "); lcdLines[0] = "Links: " + String(pwmB, DEC); // lcd.println(pwmB); // lcd.gotoXY(0,2); // lcd.println("Rechts: "); - lcdLines[0] = "Rechts: " + String(pwmA, DEC); + lcdLines[1] = "Rechts: " + String(pwmA, DEC); // lcd.println(pwmA); ->>>>>>> 48327ec5c42c4d70afa8e9c00bbf52ab2db2ca05 } senden();