Hallo Zusammen
ich verwende einen arduino Uno und der serielle monitor und allgemein ist er gefühl langsam. Aktuelle aktualisiert er alle 1- 1,5 sekunden.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
bool EINATMEN;
bool AUSATMEN;
#define TWI_FREQ 400000
// Motor
int enA = 9;
int in1 = 8;
int in2 = 7;
const float SensorOffset = 102.0;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight();
// Motor
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
}
void loop() {
//Presuresensor
// read the input on analog pin 0:
volatile float sensorValue = (analogRead(A0)-SensorOffset)/100.0+0.7; //Do maths for calibration
// print out the value you read:
Serial.print("Air Pressure: ");
Serial.print(sensorValue,2);
Serial.println(" kPa");
// LCD Display
// Initialisieren LCD display
lcd.begin(20, 4);
lcd.setCursor(0, 0);
lcd.print("Test");
}
// //Program
// if (sensorValue < -0.1) {
//
// lcd.setCursor(0, 1);
// lcd.print("Einatmen");
// Serial.print("Einatmen");
// AUSATMEN = LOW;
// EINATMEN = HIGH;
// }
// else if (sensorValue > 0.1) {
//
// lcd.setCursor(0, 1);
// lcd.print("Ausatmen");
// Serial.print("Ausatmen");
// EINATMEN = LOW;
// AUSATMEN = HIGH;
// }
// else if ((sensorValue > -0.09) && (sensorValue < 0.09)) {
//
// lcd.setCursor(0, 1);
// lcd.print("Nichts");
// EINATMEN = LOW;
// AUSATMEN = LOW;
// }
//// Motor
//if ( EINATMEN == HIGH) {
// digitalWrite(in1, LOW);
// digitalWrite(in2, HIGH);
//
// }
// else if (AUSATMEN == HIGH) {
// digitalWrite(in1, LOW);
// digitalWrite(in2, LOW);
//
// }
//
//
//}
Was kann ich verbessern oder ändern?
Danke euch
achso das unten ist eigendlich nicht ausgeklammert war nur ein test.
Dann korrigiere bitte Dein Posting.
Warum macht Du lcd.begin() im loop und nicht im setup?
Gruß Tommy
unverändert übernommen:
16:34:13.980 -> AusatmenLaufzeit 1 Durchlauf: 38 ms
16:34:14.012 -> Air Pressure: 0.39 kPa
16:34:14.046 -> AusatmenLaufzeit 1 Durchlauf: 38 ms
16:34:14.079 -> Air Pressure: 0.39 kPa
16:34:14.112 -> AusatmenLaufzeit 1 Durchlauf: 38 ms
16:34:14.145 -> Air Pressure: 0.38 kPa
16:34:14.181 -> AusatmenLaufzeit 1 Durchlauf: 38 ms
16:34:14.212 -> Air Pressure: 0.39 kPa
16:34:14.248 -> AusatmenLaufzeit 1 Durchlauf: 37 ms
Achso. doch ne Änderung war drin.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
bool EINATMEN;
bool AUSATMEN;
#define TWI_FREQ 400000
// Motor
int enA = 9;
int in1 = 8;
int in2 = 7;
const float SensorOffset = 102.0;
// the setup routine runs once when you press reset:
void setup()
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight();
// Motor
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
}
uint32_t startZeit;
uint32_t endZeit;
void loop()
{
startZeit=millis();
//Presuresensor
// read the input on analog pin 0:
volatile float sensorValue = (analogRead(A0) - SensorOffset) / 100.0 + 0.7; //Do maths for calibration
// print out the value you read:
Serial.print("Air Pressure: ");
Serial.print(sensorValue, 2);
Serial.println(" kPa");
// LCD Display
// Initialisieren LCD display
//lcd.begin(20, 4);
lcd.setCursor(0, 0);
lcd.print("Test");
// //Program
if (sensorValue < -0.1)
{
//
lcd.setCursor(0, 1);
lcd.print("Einatmen");
Serial.print("Einatmen");
AUSATMEN = LOW;
EINATMEN = HIGH;
}
else if (sensorValue > 0.1)
{
lcd.setCursor(0, 1);
lcd.print("Ausatmen");
Serial.print("Ausatmen");
EINATMEN = LOW;
AUSATMEN = HIGH;
}
else if ((sensorValue > -0.09) && (sensorValue < 0.09))
{
lcd.setCursor(0, 1);
lcd.print("Nichts");
EINATMEN = LOW;
AUSATMEN = LOW;
}
//// Motor
if ( EINATMEN == HIGH)
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}
else if (AUSATMEN == HIGH)
{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
}
endZeit=millis();
Serial.print(F("Laufzeit 1 Durchlauf: "));
Serial.print(endZeit-startZeit);
Serial.println(F(" ms"));
}
Und dann informier Dich mal über das blockweise kommentieren.
Ich hab mal das Problem gehabt, dass bei einem Programm mit dem Seriellen Monitor alles immer länger gedauert hat. Wie ich dann diesen deaktiviert hab, ist alles schneller gegangen. Ich hab aber auch noch ein extra Display, das ich dazu benutze.
MfG,
cloudDev
fony
April 7, 2023, 4:18pm
6
Wen man mit 200 Baud fährt dauert es eben
uwefed
April 7, 2023, 4:54pm
7
9600 Baud übertragen ca 1000 Byte pro Sekunde, das heißt umgekehrt, daß jedes Byte ca 1mS zur Übertragung braucht.
Abhilfe kann eine schnellere Baudrate sein zB 115200 .
Grüße Uwe
fony
April 7, 2023, 5:03pm
8
Wen bei mir alles funktioniert, dann wird ganze SerMon Ausgabe kommentiert, wo zu soll die Ressourcen fressen, wen nicht benutzt, und es werden parr Byte Speicher frei, kostet 10 Sek Arbeit, Suchen, Ersetzen
Besser mit #defines zum Abschalten:
// Bei DEBUG 0 werden die Ausgaben nicht einkompiliert
// 1 oder 0 zum Ein-/Ausschalten
#define DEBUG 1
#if (DEBUG == 0)
#define dbgp(...) // Serial.print
#define dbgpn(...) // Serial.println
#define dbgpf(...)
#define dbgbeg(...) // Serial.begin
#else
#define dbgp(...) Serial.print(__VA_ARGS__)
#define dbgpn(...) Serial.println(__VA_ARGS__)
#if defined ESP8266 || defined ESP32
#define dbgpf(...) Serial.printf(__VA_ARGS__)
#else
#define dbgpf(x, ... ) {char dbgBuf[80]; snprintf_P( dbgBuf, sizeof(dbgBuf), PSTR( x ), ##__VA_ARGS__ ) ; Serial.println( dbgBuf ); }
#endif
#define dbgbeg(...) Serial.begin(__VA_ARGS__)
#endif
Gruß Tommy
Das ist sowieso schneller als ich lesen kann. In der Millisekunde, die das Zeichen die Leitung belegt, kann der Arduino munter weiterarbeiten.
Weniger Text auszugeben macht den Arduino schneller. Solange kein Puffer überläuft , ist es völlig egal ob die Geschwindigkeit 115200 oder 9600 (oder 300) ist.
(Wobei --zugegeben-- bei 300 die Gefahr eines Pufferüberlaufs schon groß ist)
fony
April 7, 2023, 7:15pm
13
Ja aber dann muss das von Anfang an berücksichtig werden, ich bin noch um was zu testen bei SerMon, dadurch geht das Ersetzen schneller.
system
Closed
October 4, 2023, 7:16pm
14
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.