This is my Error code and i dont understand why its not working
/usr/local/bin/arduino-cli compile --fqbn arduino:avr:uno --libraries /home/builder/opt/libraries/latest --build-cache-path /tmp --output-dir /tmp/910587254/build --build-path /tmp/arduino-build-4B0148DF450995F9F76C5E3DC5CDA3AD /tmp/910587254/Projekt_7
Using library adafruit_gfx_library_1_11_5 at version 1.11.5 in folder: /home/builder/opt/libraries/adafruit_gfx_library_1_11_5
Using library adafruit_st7735_and_st7789_library_1_10_0 at version 1.10.0 in folder: /home/builder/opt/libraries/adafruit_st7735_and_st7789_library_1_10_0
/tmp/910587254/Projekt_7/Projekt_7.ino: In function 'void setup()':
/tmp/910587254/Projekt_7/Projekt_7.ino:147:38: error: too few arguments to function 'void print_TFT(uint16_t, int, int, char*, int)'
print_TFT(WHITE, 40, 50, printToTFT), h); //temp_alt ins TFT
^
/tmp/910587254/Projekt_7/Projekt_7.ino:53:6: note: declared here
void print_TFT(uint16_t color, int x, int y, char printToTFT[], int h);
^~~~~~~~~
/tmp/910587254/Projekt_7/Projekt_7.ino: In function 'void messung()':
/tmp/910587254/Projekt_7/Projekt_7.ino:221:44: error: too many arguments to function 'char* dtostrf(double, signed char, unsigned char, char*)'
dtostrf(temp_neu, 40, 50, printToTFT, h);
^
In file included from /home/builder/.arduino15/packages/arduino/hardware/avr/1.8.6/cores/arduino/Arduino.h:23:0,
from /tmp/arduino-build-4B0148DF450995F9F76C5E3DC5CDA3AD/sketch/Projekt_7.ino.cpp:1:
/home/builder/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/stdlib.h:666:14: note: declared here
extern char *dtostrf(double __val, signed char __width,
^~~~~~~
Error during build: exit status 1
This is My code:
#include <Adafruit_BMP280.h> /BOSCH BMP280
#include <Adafruit_GFX.h> //TFT
#include <Adafruit_ST7735.h> //TFT controller
#include <SPI.h> //SPI-Bus
#include <Wire.h>
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0XF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0XF81F
#define YELLOW 0XFFEO
#define WHITE 0XFFFF
#define ORANGE 0XFD20
#define GREENYELLOW 0xAFE5
#define NAVY 0x000F
#define DARKGREEN 0x03E0
#define DARKCYAN 0x03EF
#define MAROON 0x7800
#define PURPLE 0x780F
#define OLIVE 0x7BE0
#define LIGHTGREY 0xC618
#define DARKGREY 0x7BEF
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
Adafruit_BMP280 bmp;
// Globale Variablen
float temp_alt, temp_neu; // Für jeden der drei Sensor-Größen 2 Variablen
float druck_alt, druck_neu;
boolean modus = false; // false -> manuell, true -> String zyklisch senden
int x, y; // Zeilenanfang des TFTS: Cursor x- und y-Position
int h; // Textgröße
char grad = 247; // Zeichen für Grad auf dem TFT
char prozent = 37; // Zeichen für Prozent auf dem TFT
char printToTFT[22]; // Array um die Zeichenketten ins TFT zu schreiben
char clearZeile[22]; // Array zum löschen einer alten Zeile auf dem TFT
uint16_t color; // TFT Farbe (datenty: 16 Bit alias unsigned int)
/**********************************************************************************************************************************************************/
//Prototypen
void messung(void);
void print_TFT(uint16_t color, int x, int y, char printToTFT[], int h);
void clear_TFT(int x, int y, char clearZeile[], int h);
void serial_RS232(void);
/**********************************************************************************************************************************************************/
void setup()
{
Serial.begin(9600);
bmp.begin(0x77); //Sensor starten mit adressübergabe, wenn SD0 _ VCC!!
// Use this initializer if youre using a 1.8" TFT
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, Black tab
tft.setTextWrap(false);
//TFT Hintergrund
tft.fillScreen(BLACK);
//TFT-Text um 90 Grad gegen den Uhrzeigersinn drehen
tft.setRotation(tft.getRotation() + 3);
// Text der im TFT reingeschrieben ist
h = 1; // Textgröße
tft.setCursor(0, 0);
tft.setTextColor(WHITE);
tft.println("BBS Ammerland");
delay(5);
tft.setCursor(0, 10);
tft.setTextColor(WHITE);
tft.println("FB Elektotechnik");
delay(5);
tft.setCursor(0, 20);
tft.setTextColor(WHITE);
tft.println("Labor Technische Informatik");
delay(5);
tft.setCursor(0, 30);
tft.setTextColor(WHITE);
tft.println("TD-Interface");
delay(5);
tft.setCursor(0, 40);
tft.setTextColor(WHITE);
tft.println("BOSCH BMP280 >> I2C-Bus");
delay(5);
tft.setCursor(0, 110);
tft.setTextColor(CYAN);
tft.println(">> Terminal: ASCII U, 0, 1,");
delay(5);
tft.setCursor(0, 120);
tft.setTextColor(WHITE);
tft.println("TD_Interface_TFT_COM.ino");
delay(5);
//Zeichen müssen vorher ins Array printToTFT formatieren geschrieben werden
// 'T' soll nur einmal ins TFT geschrieben werden und stehenbleiben
sprintf(printToTFT, "T");
print_TFT(WHITE, 120, 50, printToTFT, h);
// 'C' soll nur einmal ins TFT geschrieben werden und stehenbleiben
h = 2; //Textgröße
sprintf(printToTFT, "%cC", grad);
print_TFT(WHITE, 0, 50, printToTFT, h);
// 'D' soll nur einmal ins TFT geschrieben werden und stehenbleiben
sprintf(printToTFT, "D");
print_TFT(WHITE, 0, 70, printToTFT, h);
// 'hPa' soll nur einmal ins TFT geschrieben werden und stehenbleiben
sprintf(printToTFT, "hPa");
print_TFT(WHITE, 120, 70, printToTFT, h);
temp_alt = bmp.readTemperature(); //Temperatur abrufen
delay(20);
druck_alt = (bmp.readPressure()) / 100; // Druck abrufen
delay(20);
h = 2;
dtostrf(temp_alt, 6, 1, printToTFT); // float in ASCII char formatieren
print_TFT(WHITE, 40, 50, printToTFT), h); //temp_alt ins TFT
dtostrf(druck_alt, 6, 1, printToTFT); // float in ASCII char formatieren
print_TFT(WHITE, 40, 70, printToTFT, h); //druck_alt ins TFT
}
/**********************************************************************************************************************************************************/
void loop()
{
messung();
serial_RS232();
delay(1000);
}
/**********************************************************************************************************************************************************/
// Schreibt die neuen (akutellen) Werte ins TFT
void print_TFT(uint16_t color, int x, int y, char printToTFT[], int h)
{
//Textgröße wird als Parameter immer mit übergeben
tft.setTextSize(h);
//Textfarbe mit übergebenen Parametern für r,g und b einstellen
tft.setTextColor(color);
//Cursor-Startposition
tft.setCursor(x, y);
//TFT beginned bei übergeben Parametern für x und y beschreiben
tft.println(printToTFT);
}
/**********************************************************************************************************************************************************/
//Überschreibt die exakt alten Werte im TFT in Hintergrundfarbe
void clear_TFT(int x, int y, char clearZeile[], int h)
{
//Textgröße wird las Parameter immer mit übergeben
tft.setTextSize(h);
//Textfarbe auf Hintergrund einstellen
tft.setTextColor(BLACK);
//Cursor-Startpositon
tft.setCursor(x, y);
//TFT beginned bei übergeben Paranetern für x und y überschreiben
tft.println(clearZeile);
}
/**********************************************************************************************************************************************************/
void messung(void)
{
temp_neu = bmp.readTemperature(); // Temp abrufen
delay(20);
druck_neu = (bmp.readPressure()) / 100; //Druck abrufen
delay(20);
if (abs(temp_neu - temp_alt) > 0.2)
{
h = 2;
// Löschen von temp_alt durch exaktes Überschreiben mit Hintergrundfarbe
dtostrf(temp_alt, 6, 1, clearZeile); // float in ASCII cha formatieren
//temp_alt zum Löschen ins TFT schreiben , Parameter:x,y und clearZeile
clear_TFT(40, 50, clearZeile, h);
//temp_neu formatiert ins char-Array printToTFT schreiben
dtostrf(temp_neu, 40, 50, printToTFT, h);
//temp_neu ins TFT schreiben, Parameter r, g, b, x, y
print_TFT(WHITE, 40, 50, printToTFT, h);
temp_alt = temp_neu; // Alten Messwert speichern
}
if (abs(druck_neu - druck_alt) > 0.2)
{
h = 2;
//Löschen von Sensor_1_alt durch Überschreiben mit Hintergrundfarbe
dtostrf(druck_alt, 6, 1, clearZeile); //float in ASCII char formatieren
//druck_alt zum löschen ins TFT schreiben, Parameter: x,y und clearZeile
clear_TFT(40, 70, clearZeile, h);
//druck_neu formatiert ins char-Array printToTFT schreiben
dtostrf(druck_neu, 6, 1, printToTFT);
//druck_neu ins TFT schreiben, Parameter: r, g, b, x, y
print_TFT(WHITE, 40, 70, printToTFT, h);
druck_alt = druck_neu; // Alten Messwerten speichern
}
}
/**********************************************************************************************************************************************************/
void serial_RS232(void)
{
String terminalString; // String, der zum Terminal gesendet wird
char serialIn[2]; // Array für emfange ASCII-Bytes (RX)
String A = "A"; //Trennung der Messwerte
String B = "B"; //Trennung der Messwerte
String C = "C"; //Trennung der Messwerte
String Z = "Z"; //Letztes Zeichen der Zeichenkette für das Terminal
if (Serial.available()) // Wurden daten vom Terminal empfangen
{
//Einlesen des Emofangsregisters und speicher der ersen Bytes
Serial.readBytes(serialIn, 1);
// Ist 'U' das erste umpfangene Zeichen?
if (serialIn[0] == 'U')
{
// String zusammensetzen , Beispiel: A20.78B1012.00C34.00CZ
terminalString = A + temp_neu + B + druck_neu + C;
Serial.print(terminalString); // String ans Terminal senden
Serial.print("Z\n");
}
else if (serialIn[0] == '1')
{
modus = true;
}
else if (serialIn[0] == '0')
{
modus = false;
}
}
if (modus == true) //automatisches senden der Werte ans Terminal
{
// String zusammensetzen, Beispiel: A20.78B1012.00C34.00CZ
terminalString = A + temp_neu + B + druck_neu + C;
Serial.print(terminalString); // String ans Terminal senden
Serial.print("Z\n");
}
}