Beschleunigungssensor ADXL 337, LCD Display und Arduino

Guten Tag,

ich möchte ein ADXL 337 3-Achsen Sensor mit einem Arduino auslesen und auf einem LCD DIsplay anzeigen lassen.

Das Auslesen funktioniert sehr gut, es werden mir bspw. Werte, wie
X: 342 Y: 349 Z: 410
X: 343 Y: 349 Z: 412
angezeigt.

Dies möchte ich nicht nur im Serial Monitor im Arduino Programm auslesen, sondern auf dem LCD Display anzeigen lassen. Dies klappt noch nicht richtig. Bei der letzten Codezeile, habe ich lcd.print(pinX,pinY,pinZ); versucht, aber damit kommt error. Wenn ich die Codezeile so verwende: lcd.print(pinX); kommt nur die Zahl 54. Meine Intention dahinter war, dass ich die Parameter einfach "abrufen" kann, dieser Ansatz ist vermutlich falsch.

2.Problem
Anstatt den Zahlen bei X,Y,Z hätte ich gerne eine Spannungswert als Ausgabe.
Ist das möglich?

Sktech:

int pinX = A0;
int pinY = A1;
int pinZ = A2;

#include<LiquidCrystal.h>

const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup()
{
Serial.begin(9600);
lcd.begin(40, 2);
}

void loop()
{
Serial.print(" X: ");
Serial.print(analogRead(pinX));
Serial.print(" Y: ");
Serial.print(analogRead(pinY));
Serial.print(" Z: ");
Serial.print(analogRead(pinZ));
Serial.println();
delay(1000);

lcd.setCursor(0,0);
lcd.clear();
lcd.print(pinX,pinY,pinZ);
}

Try this code:

#define pinX  A0
#define pinY  A1
#define pinX  A2

#include<LiquidCrystal.h>

const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup()
{
Serial.begin(9600);
lcd.begin(40, 2);
}

void loop()
{
Serial.print(" X: ");
Serial.print(analogRead(pinX));
Serial.print(" Y: ");
Serial.print(analogRead(pinY));
Serial.print(" Z: ");
Serial.print(analogRead(pinZ));
Serial.println();
delay(1000);

lcd.setCursor(0,0);
lcd.clear();
lcd.print(analogRead(pinX),analogRead(pinY),analogRead(pinZ));
}

Hey, hat leider nicht funkitoniert. Es kommt diese Fehlermeldung:
Hey, sorry, but this code does not work.

exit status 1

Compilation error: no matching function for call to 'LiquidCrystal::print(int, int, int)'

Du kannst print() nur einen Parameter übergeben. Du musst lcd.print also drei mal aufrufen und vorher den Cursor für die Ausgabeposition setzen,. sonst wird alles an dieselbe Stelle geschrieben.

Hallo,

print kennt nur einen Parameter. Habe mir erlaubt aufzuräumen. Beide Ausgabefunktionen könnte man auch noch zusammenfassen wenn man setCursor in die Hauptschleife loop verlegt.

#include<LiquidCrystal.h>

struct Sensor
{
  const byte pinX = A0;
  const byte pinY = A1;
  const byte pinZ = A2;
  int x = 0;
  int y = 0;
  int z = 0;
};
Sensor adxl;

//               RS, EN, D4, D5, D6, D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
{
  Serial.begin(9600);
  lcd.begin(40, 2);
}

void loop()
{
  readADXL (adxl);
  ausgabeSerial (Serial, adxl);
  ausgabeLcd (lcd, adxl);
  
  delay(1000);
}


void readADXL (auto &sensor)
{
  sensor.x = analogRead(sensor.pinX);
  sensor.y = analogRead(sensor.pinY);
  sensor.z = analogRead(sensor.pinZ);
}

void ausgabeSerial (auto &out, auto &sensor)
{
  out.print(" X: ");
  out.print(sensor.x);
  out.print(" Y: ");
  out.print(sensor.y);
  out.print(" Z: ");
  out.print(sensor.z);
  out.println();
}

void ausgabeLcd (auto &out, auto &sensor)
{
  out.setCursor(0,0);
  out.print(" X: ");
  out.print(sensor.x);
  out.print(" Y: ");
  out.print(sensor.y);
  out.print(" Z: ");
  out.print(sensor.z);
  out.print("    ");
}

Ich vermute Du benutzt einen Arduino Mega2560

lcd.print(pinX); gibt den Inhalt der Variable pinX also A0 was 54 entspricht (siehe Analog pin numbers don't match standard pinout Mega2560 - #2 by blh64 )
Es ist weder der digitale Wert der der Spannung entspricht, noch die umgerechnene Spannung noch die Beschleunigung.
Also stimmt es wenn Dir 54 augegeben wird.
Alles andere haben die anderen Dir bereits erklährt.
Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.