#include <Adafruit_ILI9341.h>
#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <TouchScreen.h>
#define LCD_CS A3 //A0-A4 Display //A5 Taster
#define LCD_CD A2 //10-13 frei
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define TS_MINX 122
#define TS_MINY 113
#define TS_MAXX 942
#define TS_MAXY 907
#define YP A2
#define XM A3
#define YM 8
#define XP 9
#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 ORANGE tft.color565(255, 200, 0)
#define GREY tft.color565(240, 240, 240)
#define DARK_GREY tft.color565(150, 150, 150)
#define HELL_BLUE tft.color565(0, 240, 255)
bool touchstate, ptouchstate, b;
int x, y, TouchDisplayswitch, Matrix;
double voltage_setting = 24.00, current_setting = 10, voltage_messaure = 24.00, current_messaure = 10;
int voltagevorkomma = 24 , voltagenachkomma = 20;
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
unsigned long nmillis, pmillis;
uint16_t icr = 0xffff;
void setup() {
Serial.begin(115200);
Serial.print("Starting...");
tft.reset();
tft.begin(0x9341);
tft.setRotation(0);
tft.fillScreen(BLACK);
tft.setRotation(3);
tft.setFont(&FreeMonoBold24pt7b);
tft.setTextSize(1);
setupPWM16();
analogWrite16(10, 0); //16 bit PWM 0-65535
StartMenu();
}
void loop() {
//Serial.println("Zyklus");
/*extrem wichtig sonst funkioniert display und touch nicht zusammen #tft.print*/
// if sharing pins, you'll need to fix the directions of the touchscreen pins
//pinMode(XP, OUTPUT);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
//pinMode(YM, OUTPUT);
/*extrem wichtig sonst funkioniert display und touch nicht zusammen #tft.print*/
/*Displayausgabe muss vor p Touch sein und nach XM YP*/
nmillis = millis() - pmillis;
pmillis = millis();
//Serial.print("Zykluszeit ");Serial.print(nmillis);Serial.println("ms");
/*Displayausgabe muss vor p Touch sein und nach XM YP*/
TSPoint p = ts.getPoint();
/*Serial.print("touchstate= ");Serial.print(touchstate);
Serial.print("ptouchstate= ");Serial.println(ptouchstate);*/
if (p.z > ts.pressureThreshhold)
touchstate = 1;
else
touchstate = 0;
if(touchstate != ptouchstate && touchstate == 1) {
x = map(p.x, TS_MINX, TS_MAXX, tft.height(), 0);
y = map(p.y, TS_MINY, TS_MAXY, tft.width(), 0);
Serial.print("X = "); Serial.print(x);
Serial.print("\tY = "); Serial.print(y);
Serial.print("p.X = "); Serial.print(p.x);
Serial.print("\tp.Y = "); Serial.print(p.y);
Serial.print("\tPressure = "); Serial.println(p.z);
//analogWrite16(10, 30000); //16 bit PWM 0-65535
//delay(2);
}
}
void StartMenu(){
tft.setTextSize(2);
tft.setCursor(10,60); tft.print(voltage_messaure,1);tft.print("V");
}
void setupPWM16() {
DDRB |= _BV(PB1) | _BV(PB2); /* set pins as outputs */
TCCR1A = _BV(COM1A1) | _BV(COM1B1) /* non-inverting PWM */
| _BV(WGM11); /* mode 14: fast PWM, TOP=ICR1 */
TCCR1B = _BV(WGM13) | _BV(WGM12)
| _BV(CS10); /* prescaler 1 */
ICR1 = icr; /* TOP counter value (freeing OCR1A*/
}
void analogWrite16(uint8_t pin, uint16_t val)
{
switch (pin) {
case 9: OCR1A = val; break;
case 10: OCR1B = val; break;
}
}
Das Programm funktioniert einwandfrei auf dem Arduino Uno. Aber auf dem MEGA bleibt das Display weiß. Ich habe schon nach der Ursache gesucht bei anderen Displays kann man Lötverbindungen setzen bzw. entfernen ich kann das jedoch bei dem Display nicht.
Habt ihr eine Idee wie man das Programm mit dem Display auf dem MEGA zum laufen bringt?