Braucht der MAX232 keine Versorgungsspannung?
Grüße Uwe
Du hast mich wieder gerettet
Zuerst habe ich probiert, wie von dir vorgeschlagen RX,TX neu anlöten. Leider hat es nicht viel gebracht. Das Display war extrem langsam nur dadurch.
Der Übeltäter war
mySerial.println("encres 64");//encres64
mySerial.println("sor 0");//sor0
mySerial.println("a 1");//a1
Faulhaber hat sein eigenes Software Umgebung es heißt Motion Manager und da ist es in der Programmdatei drinnen.
Naja wieder was gelernt Vielen Dank für deine Hilfe, du machst hier im Forum großartige Arbeit.
Das Display benötige ich nicht für steuerung aber für meinen Zweck ist wichtig die Darstellung von den aktuellen Drehzahl und auch Steuerung. MAX232 ist mit 5V Spannung an der UNO angeschlossen. my_xy_projekt Brattain hat mein Problem schon entdeckt. ![]()
Ich hatte einen guten Abend.
Wie gesagt: Der Code ist noch extrem Verbesserungswürdig. Wie sieht der denn jetzt aktuell aus?
Schneid ich mir aus und klebs mir an die Wand ![]()
Danke.
Das ist das aktuelle Programm. Die Wiederholung von der Geschwindigkeit musste ich da lassen sonst war der Motor unruhig. Mit diesem Programm läuft es wie eine Katze:)
#include <SPI.h>
//TFT
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <TouchScreen.h>
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#define MINPRESSURE 200
#define MAXPRESSURE 1000
#include <Interval.h>
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
///////////
//#include <SoftwareSerial.h>
//const byte RX = 6;
//const byte TX = 7;
//SoftwareSerial mySerial (RX, TX);
char CRPM[18] ;// für eine 5 stellige Zahl
// Variablen
int drehzahl = 0; // Startdrehzahl
const int drehzahlSchritt = 5; // Schrittgröße für die Drehzahl
const int maxDrehzahl = 500; // Maximale Drehzahl
const int minDrehzahl = -500; // Minimale Drehzahl
int VSpeed;
bool showSymbol1 = true; // Flag für das Symbol
bool Sperre = true;
/////Touchdisplay
// ALL Touch panels and wiring is DIFFERENT
// copy-paste results from TouchScreen_Calibr_native.ino
//const int XP = 8, XM = A2, YP = A3, YM = 9; //ID=0x9341 Hochformat
const int XP = 9, XM = A3, YP = A2, YM = 8; //ID=0x9341 Querformat
//const int TS_LEFT = 907, TS_RT = 136, TS_TOP = 942, TS_BOT = 139; //Hochformat
const int TS_LEFT = 92, TS_RT = 870, TS_TOP = 860, TS_BOT = 140; //Querformat
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_GFX_Button minus_btn, plus_btn, lock_btn, unlock_btn,plus50_btn,minus50_btn,plus25_btn,minus25_btn;
int pixel_x, pixel_y; //Touch_getXY() updates global vars
bool Touch_getXY(void)
{
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT); //restore shared pins
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //because TFT control pins
digitalWrite(XM, HIGH);
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
if (pressed) {
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width()); //.kbv makes sense to me
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
}
return pressed;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600,SERIAL_8N1);
//mySerial.begin(9600);
setupscreen();
displayWelcomeMessage();
tft.fillScreen(BLACK);
initializeButtons();
}
void setupscreen() {
/////Touchdisplay
tft.reset();
uint16_t identifier = tft.readID();
identifier=0x9341;
tft.begin(identifier);
tft.setRotation(1); //PORTRAIT
tft.fillScreen(BLACK);
}
void initializeButtons() {
minus_btn.initButton(&tft, 30, 210, 60, 60,WHITE, CYAN, BLACK, "-", 4);
plus_btn.initButton(&tft, 291, 210, 60, 60, WHITE, CYAN, BLACK, "+", 4);
lock_btn.initButton(&tft, 160, 220, 160, 40, RED, RED, BLACK, "Gesperrt", 2);
minus25_btn.initButton(&tft, 30, 150, 60, 50,WHITE, CYAN, BLACK, "-25", 3);
plus25_btn.initButton(&tft, 291, 150, 60, 50, WHITE, CYAN, BLACK, "+25", 3);
minus50_btn.initButton(&tft, 105, 150, 60, 50,WHITE, CYAN, BLACK, "-50", 3);
plus50_btn.initButton(&tft, 216, 150, 60, 50, WHITE, CYAN, BLACK, "+50", 3);
//unlock_btn.initButton(&tft, 140, 230, 160, 20, WHITE, CYAN, BLACK, "gesppert", 2);
// unlock_btn.initButton(&tft, 200, 210, 60, 60, WHITE, CYAN, BLACK, "e", 4);
minus_btn.drawButton(false);
plus_btn.drawButton(false);
lock_btn.drawButton(false);
minus25_btn.drawButton(false);
plus25_btn.drawButton(false);
minus50_btn.drawButton(false);
plus50_btn.drawButton(false);
//unlock_btn.drawButton(false);
}
void displayWelcomeMessage() {
tft.setCursor(60, 0);
tft.setTextSize(3);
tft.setTextColor(WHITE, BLACK);
tft.print("");
tft.setCursor(70, 30);
tft.print("");
tft.setCursor(90, 60);
tft.print("");
tft.setCursor(0, 100);
tft.setTextSize(2);
tft.print("");
tft.setCursor(0, 140);
tft.print("");
tft.setCursor(0, 160);
tft.print("");
delay(10000);
tft.fillScreen(BLACK);
}
void updateTouch() {
bool down = Touch_getXY();
// Button-Status aktualisieren
minus_btn.press(down && minus_btn.contains(pixel_x, pixel_y));
plus_btn.press(down && plus_btn.contains(pixel_x, pixel_y));
lock_btn.press(down && lock_btn.contains(pixel_x, pixel_y));
minus25_btn.press(down && minus25_btn.contains(pixel_x, pixel_y));
plus25_btn.press(down && plus25_btn.contains(pixel_x, pixel_y));
minus50_btn.press(down && minus50_btn.contains(pixel_x, pixel_y));
plus50_btn.press(down && plus50_btn.contains(pixel_x, pixel_y));
if (minus_btn.justReleased())
minus_btn.drawButton();
if (plus_btn.justReleased())
plus_btn.drawButton();
if (lock_btn.justReleased())
lock_btn.drawButton();
if (unlock_btn.justReleased())
unlock_btn.drawButton();
if (plus25_btn.justReleased())
plus25_btn.drawButton();
if (minus25_btn.justReleased())
minus25_btn.drawButton();
if (plus50_btn.justReleased())
plus50_btn.drawButton();
if (minus50_btn.justReleased())
minus50_btn.drawButton();
}
void handleButtonActions() {
if(!Sperre && plus25_btn.justPressed()){
plus25_btn.drawButton(true);
drehzahl = drehzahl+25;
if (drehzahl > maxDrehzahl) {
drehzahl = maxDrehzahl; // Begrenzung auf minimale Drehzahl
}
delay(200); // Entprellzeit
}
if(!Sperre && plus50_btn.justPressed()){
plus50_btn.drawButton(true);
drehzahl = drehzahl+50;
if (drehzahl > maxDrehzahl) {
drehzahl = maxDrehzahl; // Begrenzung auf minimale Drehzahl
}
delay(200); // Entprellzeit
}
if(!Sperre && minus25_btn.justPressed()){
minus25_btn.drawButton(true);
drehzahl = drehzahl-25;
if (drehzahl < minDrehzahl) {
drehzahl = minDrehzahl; // Begrenzung auf minimale Drehzahl
}
delay(200); // Entprellzeit
}
if(!Sperre && minus50_btn.justPressed()){
minus50_btn.drawButton(true);
drehzahl = drehzahl-50;
if (drehzahl < minDrehzahl) {
drehzahl = minDrehzahl; // Begrenzung auf minimale Drehzahl
}
delay(200); // Entprellzeit
}
if (lock_btn.justPressed()) {
showSymbol1 = !showSymbol1; // Symbol wechseln
drawButton(); // Taste neu zeichnen
delay(200); // Entprellen
}
if (!Sperre && minus_btn.justPressed()) {
minus_btn.drawButton(true);
drehzahl -= drehzahlSchritt; // Drehzahl verringern
if (drehzahl < minDrehzahl) {
drehzahl = minDrehzahl; // Begrenzung auf minimale Drehzahl
}
delay(200); // Entprellzeit
}
if (!Sperre && plus_btn.justPressed()) {
plus_btn.drawButton(true);
drehzahl += drehzahlSchritt; // Drehzahl erhöhen
if (drehzahl > maxDrehzahl) {
drehzahl = maxDrehzahl; // Begrenzung auf maximale Drehzahl
}
delay(200); // Entprellzeit
}
}
void displayDrehzahl() {
VSpeed = drehzahl;
snprintf(CRPM,sizeof(CRPM),"%" "18d", VSpeed);// 5 stellig
tft.setCursor(100,0); tft.setTextSize(3);
tft.setTextColor(WHITE, BLACK);
tft.print("Drehzahl");
tft.setCursor(40,30); tft.setTextSize(3);
tft.setTextColor(WHITE, BLACK);
tft.print("des Kegels RPM");
tft.setTextSize(5);
tft.setTextColor(WHITE, BLACK);
if (VSpeed>=100){
tft.setCursor(115,80);
tft.print(VSpeed);
tft.print(" ");
}
if (VSpeed<=99 && VSpeed >= 10 ){
tft.setCursor(105,80);
tft.print(" ");
tft.print(VSpeed);
tft.print(" ");
}
if (VSpeed<=9 && VSpeed >= 0){
tft.setCursor(90,80);
tft.print(" ");
tft.print(VSpeed);
tft.print(" ");
}
if (VSpeed<=-1){
tft.setCursor(70,80);
tft.print(" ");
tft.print(VSpeed);
tft.print("");
}
}
void speed() {
//Serial.println("encres 64");//encres64
//Serial.println("sor 0");//sor0
//Serial.println("a 1");//a1
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
///*
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v29
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
Serial.println("delay 4");//delay4
//Serial.println("jmp 1");//jmp1
//*/
}
void loop() {
updateTouch();
handleButtonActions();
displayDrehzahl();
speed();
}
void drawButton() {
bool down = Touch_getXY();
if (showSymbol1) {
lock_btn.initButton(&tft, 160, 220, 160, 40, RED, RED, BLACK, "Gesperrt", 2);
Sperre = true;
} else {
lock_btn.initButton(&tft, 160, 220, 160, 40, GREEN, GREEN, BLACK, "Entsperrt", 2);
Sperre = false;
}
}
Warum hast du das 50 mal hintereinander?
Schrieb er ja.
Es ruckelt sonst.
Allerdings scheint das nur die Symptome zu überdecken und das eigentliche Problem nicht zu beheben.
Ok. Man hätte das auch als:
for (byte b = 0; b < 50; b++)
{
Serial.println("delay 4");//delay4
Serial.print("V");//a1
Serial.println(VSpeed);//v295
}
schreiben können ![]()
Aber da gibts noch ganz andere Baustellen - darum schrieb ich ja:
Ja, der Code ist bestimmt verbesserungswürdig, aber mit meinen Kenntnissen stoße ich auf gewisse Grenzen ![]()
Übrigens, das mit dem wiederholten Code habe ich direkt von den Faulhaber. In Ihrem programmier Umgebung gibts die Möglichkeit der Code aus dem Motioncontroller auslesen. (das wäre schön auch bei arduino) Der Code besteht aus 2 Dateien. Die erste Datei ist so was ähnliches wie setup in dem Arduino und die zweite Datei ist loop.