Liste der Anhänge anzeigen (Anzahl: 1)
ich gebe ja zu, das ganze basiert auf anderen steppern und treibern (siehe anhang), auf einer anderen LIB (CustomStepper) und auf meiner naivität das ganze irgendwie auf die neue situation "anzupassen"...
Zitat:
zu: stepper_VL, stepper_HL, stepper_VR, stepper_HR, stepper_MAX
habe ich keine Werte gefunden, welche verbergen sich dahinter?
diese bezeichnungen beziehen sich auf die vier stepper (V_orne L_inks usw.) und im zusammenhang mit der variablen "idx" sollen diese in der schleife:
Code:
for (idx = stepper_VL; idx < stepper_MAX; idx++)
{
stepper[idx].run();
// delay(1);
}
alle vier gleichzeitig in bewegung gesetzt werden, ohne diese schleife liefen die früher nacheinander an...
Ich versuch jetzt mal das ganze mit direkten anweisungen an die DIR und STEP pins der stepper zu realisieren, ohne LIB :-)
Liste der Anhänge anzeigen (Anzahl: 3)
wieder eine kleinigkeit:
Anhang 34473
Anhang 34474
Anhang 34475
ich hoffe - auch wenn ich noch gar nicht weiss, ob das ding auch wirklich was wird - es damit etwas "outdoortauglicher" gemacht zu haben. Das ausdenken, entwerfen, drucken und montieren hat riesig spass gemacht...
Bei mir ist oft der weg das ziel :-)
Liste der Anhänge anzeigen (Anzahl: 1)
hat gut geklappt:
Anhang 34476
ein drehteller (ich glaub von fondue), 10 minuten drehen und das wars...
Um ein video aufzunehmen hat die dritte hand gefehlt...
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Moppi
Mit wieviel Spannung muß das aufgewickelt werden?
MfG
Anhang 34477
habe nicht so drauf geachtet, habe einfach mit der rechten hand gedreht, mit der linken die grosse spule etwas gebremst, also das filament ein bischen unter spannung gehalten und versucht das material auf der kleineren spule ein bischen zu verteilen. Besonders ist es nicht gelungen, der drucker druckt aber...
p.s. werden hier neuerdings alle fotos in "landscape" gedreht?
Liste der Anhänge anzeigen (Anzahl: 2)
vielleicht greife ich hier zu weit vor, aber warum eigentlich nicht. Der Mega 2560 soll ja als "motorbetreuer" dienen, evtl. bekommt er noch ein paar sensoren zur seite...
Für die kommunikation nach aussen (und innen) soll ein LOLIN ESP32 dienen, den hatte ich als "rest" aus dem projekt der autonomen TT-lok noch da. Das menü auf dem smartphone sah dort so aus:
Anhang 34490
dies soll, da die bedienung des outdoor roboters ja viel umfangreicher sein wird durch so etwas
Anhang 34491
ersetzt werden...
Die übernahme des AP-servers macht mir denke ich keine probleme, wie ich aber die (html?) programmierung des neuen bedienfeldes hinbekommen soll, da habe ich keinen blassen schimmer... Wer hilft?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Moppi
das Tastenfeld der abgebildeten Fernbedienung kannst Du in eine HTML-Seite packen, die kannst Du per Webbrowser von jedem Gerät, dass einen hat, aufrufen.
das ist genau der punkt, wo ich hilfe bräuchte... vielleicht sollten wir uns erstmal auf den aufbau der webseite konzentrieren. Ich hab ja vor jahrzenten bereits ein bischen was mit HTML, PHP und CSS gemacht, aber das ist einerseits sicher überholt und auch bereits so gut wie vergessen. Ein paar begriffe und ihre bedeutung sind noch da, mehr ist es aber nicht...
das hier
Code:
while (client.connected())
{
if (client.available())
{
char new_byte = client.read();
Serial.write(new_byte);
header += new_byte;
if (new_byte == '\n')
{
if (current_data_line.length() == 0)
{
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// lok vorwärts/rückwärts
if (header.indexOf("LED1=ON") != -1)
{
Serial.println("GPIO5 LED is ON");
LED_ONE_STATE = "vorwaerts";
digitalWrite(GPIO_PIN_NUMBER_5, HIGH);
}
if (header.indexOf("LED1=OFF") != -1)
{
Serial.println("GPIO5 LED is OFF");
LED_ONE_STATE = "rueckwaerts";
digitalWrite(GPIO_PIN_NUMBER_5, LOW);
}
// lok an/aus
if (header.indexOf("LED2=ON") != -1)
{
Serial.println("GPIO18 LED is ON");
LED_TWO_STATE = "an";
analogWrite(GPIO_PIN_NUMBER_18, velo); //HIGH);
}
if (header.indexOf("LED2=OFF") != -1)
{
Serial.println("GPIO18 LED is OFF");
LED_TWO_STATE = "aus";
analogWrite(GPIO_PIN_NUMBER_18, LOW);
}
//lok schneller/langsammer
if (header.indexOf("LED3=ON") != -1)
{
Serial.println("GPIO22 LED is ON");
velo = velo + 5;
LED_THREE_STATE = velo; //"on";
//analogWrite(GPIO_PIN_NUMBER_22, velo);//HIGH
}
if (header.indexOf("LED3=OFF") != -1)
{
Serial.println("GPIO22 LED is OFF");
velo = velo - 5;
LED_THREE_STATE = velo; //"off";
//analogWrite(GPIO_PIN_NUMBER_22, velo); //LOW
}
if (header.indexOf("LED4=ON") != -1)
{
Serial.println("GPIO19 LED is ON");
LED_FOUR_STATE = "an";
digitalWrite(GPIO_PIN_NUMBER_19, HIGH);
}
if (header.indexOf("LED4=OFF") != -1)
{
Serial.println("GPIO19 LED is OFF");
LED_FOUR_STATE = "aus";
digitalWrite(GPIO_PIN_NUMBER_19, LOW);
}
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
client.println(".button { background-color: #4CAF50; border: 2px solid #4CAF50;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 1px 1px; cursor: pointer; }");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
// Web Page Heading
client.println("</style></head>");
//client.println("<body><center><h1>ESP32 Web server LED controlling example</h1></center>");
//client.println("<center><h2>Web Server Example Microcontrollerslab.com</h2></center>" );
//client.println("<center><h2>Press on button to turn on led and off button to turn off LED</h3></center>");
client.println("<form><center>");
client.println("<p> richtung ist " + LED_ONE_STATE + "</p>");
client.println("<button class=\"button\" name=\"LED1\" value=\"ON\" type=\"submit\">VORW</button>") ;
client.println("<button class=\"button\" name=\"LED1\" value=\"OFF\" type=\"submit\">RUECKW</button></center>");
client.println("<p>motor ist " + LED_TWO_STATE + "</p>");
client.println("<button class=\"button\" name=\"LED2\" value=\"ON\" type=\"submit\">AN</button>");
client.println("<button class=\"button\" name=\"LED2\" value=\"OFF\" type=\"submit\">AUS</button></center>");
client.println("<p>geschwindigkeit ist " + LED_THREE_STATE + "</p>");
client.println("<button class=\"button\" name=\"LED3\" value=\"ON\" type=\"submit\">SCHNELLER</button>");
client.println("<button class=\"button\" name=\"LED3\" value=\"OFF\" type=\"submit\">LANGSAMMER</button></center>");
client.println("<p>kamera ist " + LED_FOUR_STATE + "</p>");
client.println("<button class=\"button\" name=\"LED4\" value=\"ON\" type=\"submit\">AN</button>");
client.println("<button class=\"button\" name=\"LED4\" value=\"OFF\" type=\"submit\">AUS</button></center>");
client.println("</center></form></body></html>");
client.println();
break;
}
else
{
current_data_line = "";
}
}
else if (new_byte != '\r')
{
current_data_line += new_byte;
}
}
}
ist das problem,
Zitat:
Zitat von
Moppi
Du kannst Deinen alten Code natürlich umstricken. Dann musst Du sagen, wobei Du genau Hilfe brauchst. Beim Quelltext für HTML? Oder noch was anderes?
naja, dass, was jetzt bereits im arduino läuft - läuft ja. Zunächst ist das ja ausreichend. Es geht mir letztendlich darum , dass ich - je nach situation - den roboter per IR-fernbedienung oder smartphone steuen kann...
edit: foto hinzu...
Anhang 34497
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist zunächst der erste Schritt:
Ich habe jetzt mal das Bild bearbeitet und verkleinert, dass es noch eine annehmbare Zahl an Details enthält, wenn das Bild nachher im Browser dargestellt wird, sollte der die Pixelübergänge weichzeichnen.
Hier ist erst einmal der String, wie der dann aussieht:
Code:
data:image/png;base64,iVBORw....AElFTkSuQmCC
Weil das 9KByte sind, hier als Textdatei: Anhang 34498
Base64 ist eine Codierung, die Hex-Code in Zeichencode umwandelt (ganz einfach ausgedrückt). So kann der auch im Webseitencode transportiert werden. Damit kann man eine DATA-URL erzeugen, direkt im Webseitencode, der Browser erkennt das und stellt die Grafik dann als solche dar, weil er das zuvor dekodiert. Man kann diesen String aber auch direkt im Browser, oben in der URL-Zeile, eingeben (reinkopieren), der Browser sollte dann das Bild darstellen (es ist in dem Moment eine Data-URL). Wenn Du es ausprobierst, wird Dir sicher alles klar.
MfG
- - - Aktualisiert - - -
SPIFF ist das File System, dass auf einem nodeMCU emuliert wird. Ein ESP-12E hat 1MByte Programmspeicher und 3MByte für SPIFFs (zusätzlicher Flash-Speicher für Dateien). In der Arduino-IDE kann man Dateien im Menü "Werkzeuge" mit "Sketch Data Upload" hochladen. So wie man den Programmcode in den Programmspeicher hochlädt. So, wie Du eine SD-Karte verwenden kannst, kannst Du auch diesen Speicher per SPIFFs verwenden. Wieviel der ESP32 hat, weiß ich nicht, habe noch keinen ESP32.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Moppi
Man kann diesen String aber auch direkt im Browser, oben in der URL-Zeile, eingeben (reinkopieren), der Browser sollte dann das Bild darstellen (es ist in dem Moment eine Data-URL). Wenn Du es ausprobierst, wird Dir sicher alles klar.
Anhang 34499
war das so gemeint?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Moppi
Nein! Du hast den Kurzen aus dem Veranschaulichungsbeispiel genommen! :Haue
Du musst den langen String aus der Textdatei nehmen, nur der ist vollständig. :-b
jaja, hau nur drauf...
das sieht aber schon besser aus jetzt:
Anhang 34500
den zweck musst Du mir aber bei passender gelegenheit erklären...
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe aber gerade nochmal nachgesehen, statt Tabelle können wir wohl auch eine Image Map in HTML benutzen. Dafür sind diese Dinger da. Das würde die Sache erleichtern.
Also nehmen wir dann dieses Bild und erzeugen damit in HTML eine Map, also Karte, mit den Koordinaten, wo was angeklickt werden kann.
Wofür das oben gut ist? Du siehst, dass man diesen 9KByte langen String als Text kopieren kann und sich darin Dein Bild befindet.
MfG
- - - Aktualisiert - - -
Nächster Schritt
Ich habe schon mal eine Tabelle, als Rahmen, erstellt und das ganz einfach als HTM-Datei gespeichert.
Zuerst muss die Tabelle definiert werde, dann in der Tabelle drei Zeilen und jede Zeile enthält drei Zellen.
Die mittlere Zelle bekommt später als Inhalt die Image Map, also das Bild der Fernbedienung.
Die Tabelle dient als Rahmen um das Bild, damit die Fernbedienung dem Original nahe kommt.
Ich habe bei dem Bild zunächst alle Ränder abgeschnitten, damit wir Speicherplatz sparen.
Die Ränder sind mit der Tabelle wieder hinzugefügt. Belegen damit 928Byte, also knapp 1KByte, zusätzlich zum Bild.
Hier erstmal die Datei mit den Rohdaten: Anhang 34501
Die Datei ist als *.TXT gespeichert. Die Endung kann umbenannt werden von ".txt" in ".htm", um sie im Browser zu laden und anzuschauen.
Fragen so weit? Wir machen weiter, wenn nicht.
MfG
- - - Aktualisiert - - -
Zur Erläuterung des HTML-Codes
Die Tabelle ist so aufgebaut:
Code:
TABELLE
.......TABELLENZEILE
...................TABELLENZELLE|TABELLENZELLE|TABELLENZELLE
.......TABELLENZEILE
...................TABELLENZELLE|TABELLENZELLE|TABELLENZELLE
.......TABELLENZEILE
...................TABELLENZELLE|TABELLENZELLE|TABELLENZELLE
Die Tabelle hat also sechs Zellen, in drei Zeilen.
------------------------------------------------------------------
Die Tabelle ist definiert mit:
Code:
<div style='display:table;background:#000000;border-radius:2em'>
display:table ... DIV-Container als Tabelle
background ... #000000 = hexadezimale Notation für RGB (Rot/Grün/Blau) ergibt hier schwarz
border-radius ... damit die Ecken der Tabelle rund werden, die Zahl gibt den Durchmesser an
Maßeinheit: ich verwende immer "em", diese Maßeinheit ist skalierbar. 1em sind normalerweise 16 Pixel, aber nicht in jedem Browser, hängt mit der Basis-Schriftgröße zusammen; Pixel "px" wäre eine absolute Größe und ist unpraktisch, wir wollen später sehen, dass sich unsere HTML-Fernbedienung an die Größe Deines Smartphone-Bildschirms anpasst
------------------------------------------------------------------
Eine Tabellenzeile ist definiert mit:
Code:
<div style='display:table-row'>
display:table-row ... DIV-Container als Tabellenzeile
------------------------------------------------------------------
Eine Tabellenzelle ist definiert mit:
Code:
<div style='display:table-cell;width:3em;height:3em'>
display:table-cell ... DIV-Container als Tabellenzelle
width ... Breite einer Zelle
height ... Höhe einer Zelle
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo inka!
Ich habe da mal noch eine Versuchsdatei: Anhang 34503
Wieder Endung ".txt" in ".htm" umbenennen und mit dem Webbrowser laden.
Daran ist zu sehen, wie das mit der Image Map funktioniert.
Hier der Teil der Map:
Code:
<img width='170' height='372' usemap='#Remote' src='data:image/png;base64,iVBO...uQmCC'>
<map name='Remote'>
<area shape='circle' coords='84,26,22' href='..'>
</map>
Mit width und height wird die Breite und Höhe des Bildes angegeben. Usemap verweist auf die Map mit dem Namen "Remote".
Weil zu dem Bild eine "Karte" mit Koordinaten angegeben werden muss - der Bereich "area", wo sich eine Taste, auf dem Bild der Fernbedienung, befindet. Für die oberste Taste ist das die Position 84 Pixel von links und 26 Pixel von oben, mit einem Radius (weil die Tasten rund sind) von 22 Pixel. Angegeben wird das alles in "<area ...>". "shape='circle'" wird verwendet, weil wir einen Kreis, als Bereich, definieren. "src=..." ist die Quelle des Bildes für die Map, hier setzen wir den Base64-kodierten String unseres Bildes ein.
Und nun haben wir ein Problem, das mir nicht gefällt. Hätte ich ganz zu Anfang dran denken können, das zu überprüfen (obwohl ich schon einmal Image Maps verwendet habe, ist allerdings schon etwa 15 Jahre her): die Image Map arbeitet nur mit Pixel. Wir können keine Koordinaten verwenden, die einfach skaliert werden können, indem wir ein anderes Maß, als eben Pixel, verwenden. Falls das doch irgendwie machbar sein sollte, weiß ich noch nicht wie.
Das bedeutet, dass die Tabelle und das Bild - also die Fernbedienung in HTML - in Pixel definiert wird (was ich in der Beispieldatei schon gemacht habe). Sollte die Fernbedienung, in Pixel, breiter oder höher sein, als der Smartphone-Bildschirm, passt die dort nicht vollständig drauf und muss horizontal und/oder vertikal gescrollt werden. Natürlich kann man die Pixelmaße dann an seinen Smartphone- oder Tablet-Bildschirm anpassen, es bleibt aber eine feste Angabe.
Ich lass das erst einmal so stehen. Schau es Dir zunächst einmal an. Dann schauen wir weiter.
-------------
Gleich noch etwas weiter drüber nachgedacht: die Pixelangaben können nachher im Programm berechnet und in die HTML-Seite eingesetzt werden, basierend auf einer vorgegebenen Breite und Höhe (z.B. Displaygröße in Pixel v. Smartphone). Damit kann die Größe der HTML-Fernbedienung auch nachjustiert werden. Aber das jetzt erst einmal nur so nebenbei.
MfG
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Moppi
Und nun haben wir ein Problem, das mir nicht gefällt. Hätte ich ganz zu Anfang dran denken können, das zu überprüfen (obwohl ich schon einmal Image Maps verwendet habe, ist allerdings schon etwa 15 Jahre her): die Image Map arbeitet nur mit Pixel. Wir können keine Koordinaten verwenden, die einfach skaliert werden können, indem wir ein anderes Maß, als eben Pixel, verwenden. Falls das doch irgendwie machbar sein sollte, weiß ich noch nicht wie.
Das bedeutet, dass die Tabelle und das Bild - also die Fernbedienung in HTML - in Pixel definiert wird (was ich in der Beispieldatei schon gemacht habe). Sollte die Fernbedienung, in Pixel, breiter oder höher sein, als der Smartphone-Bildschirm, passt die dort nicht vollständig drauf und muss horizontal und/oder vertikal gescrollt werden. Natürlich kann man die Pixelmaße dann an seinen Smartphone- oder Tablet-Bildschirm anpassen, es bleibt aber eine feste Angabe.
die darstellung auf dem smartphone sieht so aus:
Anhang 34504
ich meine, es muss nicht sein, dass die html fernbedienung das ganze display ausfüllt, toll (und völlig ausreichend) wäre es, wenn es in etwa zentriert zum display wäre.
Die anderen sachen habe ich mir angeschaut, selber programmieren könnte ich es nicht, aber ich habe verstanden wo Du was und wie gemacht hast, müsste also in der lage sein kleine korrekturen selbst durchführen zu können. Toll erklärt!