Hallo ich habe ein Arduino Programm gebastelt um einen HALLSENSOR über ein OLE Display auszulesen, um die Magnetrichtung zu detektieren...Nun möchte ich das ganze auf einer Benutzeroberfläche mit Hilfe von Labview realisieren.
include <Wire.h>
#include <U8g2lib.h>
#define HALL_SENSOR_PIN A0
#define THRESHOLD_NORDPOL 20
#define THRESHOLD_SUEDPOL 20
#define NUM_SAMPLES 1
// OLED Display
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
int hallSensorValue = 0;
int referenceValue = 0;
void setup() {
Serial.begin(9600);
u8g2.begin();
// Kalibrierung des Referenzwertes
int sum = 0;
Serial.println("Kalibriere Referenzwert...");
for (int i = 0; i < NUM_SAMPLES; i++) {
sum += analogRead(HALL_SENSOR_PIN);
delay(10);
}
referenceValue = sum / NUM_SAMPLES;
Serial.print("Referenzwert ermittelt: ");
Serial.println(referenceValue);
}
void loop() {
// Rauschreduzierung durch Mittelwert
int sum = 0;
for (int i = 0; i < NUM_SAMPLES; i++) {
sum += analogRead(HALL_SENSOR_PIN);
}
hallSensorValue = sum / NUM_SAMPLES;
int diff = hallSensorValue - referenceValue;
// Display löschen
u8g2.clearBuffer();
// Textanzeige
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.setCursor(0, 12);
u8g2.print("Sensor: ");
u8g2.print(hallSensorValue);
u8g2.setCursor(0, 24);
u8g2.print("Referenz: ");
u8g2.print(referenceValue);
u8g2.setCursor(0, 36);
u8g2.print("Delta: ");
u8g2.print(diff);
// Magnetfeld-Textanzeige mit Pfeilen für Drehrichtung
if (diff > THRESHOLD_NORDPOL) {
// Rechtsdrehung (ASCII Pfeil: ->)
u8g2.setCursor(90, 60);
u8g2.print("=>"); // Rechtsdrehung Pfeil
u8g2.setCursor(0, 60); //Texthöhe (letzte Zeile)
u8g2.print("Rechtsdrehfeld");
Serial.println("+1 (Rechtsdrehfeld)");
} else if (diff < -THRESHOLD_SUEDPOL) {
// Linksdrehung (ASCII Pfeil: <-)
u8g2.setCursor(90, 60);
u8g2.print("<="); // Linksdrehung Pfeil
u8g2.setCursor(0, 60); //Texthöhe (letzte Zeile)
u8g2.print("Linksdrehfeld");
Serial.println("-1 (Linksdrehfeld)");
} else {
u8g2.setCursor(0, 60);
u8g2.print("Kein Magnetfeld");
Serial.print("Wert: ");
Serial.println(hallSensorValue);
}
// Bar-Graph zeichnen (Mitte = Referenz)
int centerX = 64;
int centerY = 44;
int maxBarLength = 60;
int barLength = map(abs(diff), 0, 100, 0, maxBarLength); // max +/-100
if (diff > 0) {
// Nordpol rechts
u8g2.drawBox(centerX, centerY, min(barLength, maxBarLength), 6);
} else if (diff < 0) {
// Südpol links
u8g2.drawBox(centerX - min(barLength, maxBarLength), centerY, min(barLength, maxBarLength), 6);
} else {
// Kein Ausschlag
u8g2.drawBox(centerX, centerY, 1, 6);
}
// Mitte markieren
u8g2.drawLine(centerX, centerY - 2, centerX, centerY + 8);
u8g2.sendBuffer();
delay(500);
}
//developedApril2025
wie schaffe ich es den Delta-, Sensor- und Referenzwert auszugeben?
`