• Herzlich willkommen!

    Das Team von »Doctor Brick« heißt Euch herzlich willkommen und wünscht Euch viel Spaß hier!
    »Doctor Brick« ist eine anerkannte Community (RLOC) für erwachsene LEGO Enthusiasten, auch AFOLs (= Adult Fans Of LEGO) genannt.
    Wir können uns hier über alle Belange des LEGO Hobbys austauschen wie z.B. Set- und Teilefragen, Vorstellung und Rezensionen von Legobauten.
    Bitte beachtet die Nutzungsbedingungen und den Verhaltensleitfaden.

Powered Up – mal ganz ohne Smartphone

Coleturner

Neumitglied
Registriert
29 Dez. 2020
Beiträge
7
Hallo,
Ich bin neu hier im Forum.
Hab mit dem esp32 devkit c eine bluetooth Fernbedienung für control+ zusammen gezimmert ohne Smartphone oder sonstige Apps. Dafür musste ein ps2 analog Stick sterben, brauchte die 2 axis sticks.
Die sticks steckte ich an den esp32 dran, eine LED und einen taster zur Kontrolle und zum ausschalten des control plus hub. Funktioniert klasse mit dem lego 42100. Die legoino library von Cornelius Munz ist perfekt für eine bluetooth Fernbedienung. Erst hab ich es mit m5 atom matrix versucht aber der hatte zu wenig Eingänge für die joysticks. Leider bin ich nicht so ein Programmierer oder Designer eher ein Wurstler.
Vielleicht sind hier top Programme die meinen programm kauderwelsch verbessern können und mit der Allgemeinheit teilen können.
 

Coleturner

Neumitglied
Registriert
29 Dez. 2020
Beiträge
7
Hier der Aufbau
 

Anhänge

  • 16092718008121189631621503057524.jpg
    16092718008121189631621503057524.jpg
    1,2 MB · Aufrufe: 42

GBCPeter

Herr der Bälle
Teammitglied
Registriert
21 Apr. 2012
Beiträge
3.405
Ort
Wuppertal
Hallo Coleturner
Erstmal herzlich willkommen hier bei uns im Forum.
Zweckmäßig wäre es vielleicht den Code dazu hier zu veröffentlichen. Nur dann können wir versuchen dein Programm aufzuhübschen.

mfg GBCPeter
p.s. eine Vorstellung deinerseits hier wäre schön :).
 

Coleturner

Neumitglied
Registriert
29 Dez. 2020
Beiträge
7
Code:
/**
   control Lego 42100 hub1 und hub2

   (c) Copyright 2020 - Cornelius Munz
   Released under MIT License

*/

#include "Lpf2Hub.h"
const int potPina = 34;
const int potPinb = 35;
const int potPinc = 33;
//const int potPin = 14; 
const int potPine = 32;
const int potPinf = 25;
const int potPing = 26;
const int potPinh = 24;

int tasterstatus = 0;
int taster = 16;
int led = 5;
int ledb = 17;

int mota = 0;
int motb = 0;
int motc = 0;
int mote = 0;
int motf = 0;
int motg = 0;
int moth = 0;

// variable for storing the potentiometer value
int potValuea = 0;
int potValueb = 0;
int potValuec = 0;
//int potValued = 0;
int potValuee = 0;
int potValuef = 0;
int potValueg = 0;
int potValueh = 0;

// create a hub instance
Lpf2Hub myhub1;
byte porta = (byte)ControlPlusHubPort::A;
byte portb = (byte)ControlPlusHubPort::B;
byte portc = (byte)ControlPlusHubPort::D;
Lpf2Hub myhub2;
byte porte = (byte)ControlPlusHubPort::A;
byte portf = (byte)ControlPlusHubPort::B;
byte portg = (byte)ControlPlusHubPort::C;
byte porth = (byte)ControlPlusHubPort::D;

void setup() {
  pinMode(taster, INPUT);
  pinMode(led, OUTPUT);
  pinMode(ledb, OUTPUT);
  Serial.begin(115200);

}


// main loop
void loop() {

  if (!myhub1.isConnected() && !myhub1.isConnecting())
  {
    myhub1.init();
  }

  // connect flow. Search for BLE services and try to connect if the uuid of the hub is found
  if (myhub1.isConnecting()) {
    myhub1.connectHub();
    if (myhub1.isConnected()) {
      Serial.println("Connected to HUB");
      digitalWrite(led, HIGH);
      }

    else {
      Serial.println("Failed to connect to HUB");

    }
  }

  // controll port A,B,D and shut it down
  if (myhub1.isConnected()) {
    potValuea = analogRead(potPina);
    potValueb = analogRead(potPinb);
    potValuec = analogRead(potPinc);
   
   
    mota = map(potValuea, 0, 4095, -100, 100);
    if((mota > -30)&&(mota < 30)) {mota = 0;} 
    motb = map(potValueb, 0, 4095, 100, -100);
    if((motb > -30)&&(motb < 30)) {motb = 0;}
    motc = map(potValuec, 0, 4095, 100, -100);
    if((motc > -30)&&(motc < 30)) {motc = 0;}
   
        char hubName[] = "myControlPlusHub2";
    myhub1.setHubName(hubName); 
       
    myhub1.setBasicMotorSpeed(porta, mota);
    myhub1.setBasicMotorSpeed(portb, motb);
    myhub1.setBasicMotorSpeed(portc, motc);
   
    Serial.println(potValuea);
    Serial.println(mota);
    Serial.println(potValueb);
    Serial.println(motb);
    Serial.println(potValuec);
    Serial.println(motc);
    delay(100);
   } else {
    Serial.println("ControlPlus hub is disconnected");
    digitalWrite(led, LOW);
  }
  tasterstatus = digitalRead(taster);
  if (tasterstatus == HIGH) {
    myhub1.shutDownHub();
  }


if (!myhub2.isConnected() && !myhub2.isConnecting())
  {
    myhub2.init();
  }

  // connect flow. Search for BLE services and try to connect if the uuid of the hub is found
  if (myhub2.isConnecting()) {
    myhub2.connectHub();
    if (myhub2.isConnected()) {
      Serial.println("Connected to HUB");
      digitalWrite(ledb, HIGH);
      }

    else {
      Serial.println("Failed to connect to HUB");

    }
  }

  // controll port A,B,D and shut it down
  if (myhub2.isConnected()) {
       
    potValuee = analogRead(potPine);
    potValuef = analogRead(potPinf);
    potValueg = analogRead(potPing);
    potValueh = analogRead(potPinh);
    mote = map(potValuee, 0, 4095, -100, 100);
    if((mote > -30)&&(mote < 30)) {mote = 0;}
    motf = map(potValuef, 0, 4095, -100, 100);
    if((motf > -30)&&(motf < 30)) {motf = 0;}
    motg = map(potValueg, 0, 4095, -100, 100);
    if((motg > -30)&&(motg < 30)) {motg = 0;}
    moth = map(potValueh, 0, 4095, -100, 100);
    if((moth > -30)&&(moth < 30)) {moth = 0;}
   
   
    char hubName[] = "myControlPlusHub";
    myhub2.setHubName(hubName);

    myhub2.setBasicMotorSpeed(porte, mote);
   // myhub2.setBasicMotorSpeed(portf, motf);
    //myhub2.setBasicMotorSpeed(portg, motg);
   // myhub2.setBasicMotorSpeed(porth, moth);
     
     
    delay(100);
   } else {
    Serial.println("ControlPlus hub is disconnected");
    digitalWrite(ledb, LOW);
  }
  tasterstatus = digitalRead(taster);
  if (tasterstatus == HIGH) {
    myhub2.shutDownHub();
  }
} // End of loop
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Hallo,
Vielleicht sind hier top Programme die meinen programm kauderwelsch verbessern können und mit der Allgemeinheit teilen können.

1. Hallo und herzlich willkommen
2. Designer / Produktmanager/ Entwickler sind nur andere Beschreibungen für Wurstler :clap:, keine Bange .
3. Ich halte es für Code konkrete code reviews immer besser man verlegt die Diskussion in ein Github repository.

Ansonsten musst du dich nicht fragen, ob deine Lösung für uns potential hat.
Wenn deine Lösungen für dich passen hast du das Ziel ja schon zu 100 % erreicht.

Wir freuen uns aber wenn du uns teilhaben läßt :biggrin:.

Gruß
 

Ruppie

Mitglied
Registriert
9 März 2020
Beiträge
161
Ort
Duisburg
Warum nicht das ausgeschlachtete Gamepad ?

Bezüglich der Lösungsfindung, was ein passendes Gehäuse ist, schau dir doch mal diese Entwicklungsgeschichte an:
Hat nix mit Bluetooth zu tun, es geht (meiner Meinung nach) mehr darum nachzuvollziehen wie die Entwicklungsschritte waren und warum .
Nur so als kleine Inspiration
Einen guten Jahreswechsel schon einmal und bleib gesund !
 

Coleturner

Neumitglied
Registriert
29 Dez. 2020
Beiträge
7
Danke für die Infos Ruppie.
Hab nochmal den Code überarbeitet da der esp32 bei eingeschalteten bluetooth Sender nicht alle analog Eingänge funktionieren.
Wer es nachbauen und testen will hier nochmal der Code und Schaltplan.
 

Anhänge

  • esp32_Steckplatine.jpg
    esp32_Steckplatine.jpg
    680,1 KB · Aufrufe: 18
  • controlplus.txt
    4,7 KB · Aufrufe: 8

Lok24

Elektronikbahner
Registriert
11 Sep. 2019
Beiträge
1.451
Feine Sache, wenn ich aber die Sache richtig sehe braucht man die Bastelarbeit nur, wenn man 3 Knüppel haben will, sonst geht auch ein normales Gamepad (ohne Umbau), wenn man einen Knüppel umschaltet.

Ach so, Gehäuse: ich würde die Knüppel etc in passende Plates einbauen und das Gehäuse ansonsten auch aus LEGO bauen.
 

RR76

Urgestein
Registriert
8 Apr. 2019
Beiträge
1.151
Mit einem PS3 Gamepad und dem Atom geht das richtig schön. Alles einschalten und spielen.
Ich hab mir die Arme und das Drehen auf die zwei Sticks gelegt, die Schultertasten bedienen die Ketten und Öffnen und Schließen der Schaufel liegt auf zwei Tasten.
 

Coleturner

Neumitglied
Registriert
29 Dez. 2020
Beiträge
7
Das mit dem atom hab ich zuerst mal probiert klapp toll nur die Verzögerung hat mir nicht so gefallen.
Ja mit den 3 sticks und den zwei taster für die Schaufel steuerst den Liebherr Bagger. Wollte die Schaufel auch proportional steuern nur der esp32 hat leider nicht so viele analog Eingänge die man benutzen kann.
Die joysticks gibt's auch kleiner sowie bei dem Nintendo switch. https://www.amazon.de/Linkstyle-Joy...1&keywords=SWITCH-STICK&qid=1609427119&sr=8-3
Ein normales gamepad müsstest du dann die analog sticks Anschlüsse heraus führen.
4d joystick wäre auch ne Idee wie bei den teuren rc Fernsteuerungen.
Mal sehen ob ich das ganze Zeug in der alten infrarot 8879 rein bekomme.:)
 

Pottbrick

Neumitglied
Registriert
25 Sep. 2021
Beiträge
7
Ort
Dortmund
Was ist passiert? Thema beendet? Mit dem ATOM-Taster kann man ja gleich drei Schaltzustände auswerten (kurzer Druck, langer Druck oder Doppeldruck), das erweitert ja die Möglichkeiten. Und man kann auch einen externen Doppeltaster anschließen, LEGO-kompatibel.
 

Gimmick

Stammuser
Registriert
1 Okt. 2018
Beiträge
358
@Pottbrick
Ich denke, die Interessierten haben es mittlerweile nach ihren Bedürfnissen umgesetzt und/oder verwenden Pybricks.
Wenn Du eigene Ergänzungen beitragen möchtest: Nur zu. :D

Langer Druck, kurzer Druck, Doppeldruck sollte eigentlich immer gehen (auch in PyBricks/PU), man muss sich nur entscheiden, ob man auf ButtonUp oder Down reagiert. Bei unterschiedlichen "Klicktypen" sollte man immer auf Up reagieren, weil Down logischer Weise immer zuerst und damit auch vor "langer Druck" kommt.
 
Oben