Moin zusammen,
da ich hier bereits einige Male wirklich gute Hinweise sammeln konnte
und nun bei meinem neuen Projekt nicht wirklich weiter komme, wollte ich
es einmal mit einem eigenen Thread versuchen.
Ich habe mir ein TouchScreen Panel mit passendem Shield für einen
Arduino Mega 2560 geholt, um allg. Erfahrungen mit Displays zu sammeln.
http://www.sainsmart.com/arduino/arduino-shields/lcd-shields/sainsmart-3-2-tft-lcd-display-touch-panel-pcb-adapter-sd-slot-for-arduino-2560.htmlhttp://www.sainsmart.com/arduino/arduino-shields/lcd-shields/sainsmart-tft-lcd-adjustable-shield-for-arduino-mega-2560-r3-1280-a082-plug.html
Bis Dato habe ich mich an die Bibliotheken
UTFT
http://www.rinkydinkelectronics.com/library.php?id=51
und UTouch
http://www.rinkydinkelectronics.com/library.php?id=55
gehalten.
UTouch enthält einige Beispiele für das Touch Display, welche an sich
auch alle funktionieren.
Zunächst habe ich das UTouch_Calibration.ino example implementiert, um
die entsprechenden Kalibrierdaten zu erhalten und in eine Header Datei
"UTouchCD.h" einzubinden.
Danach funktionierten auch soweit alle anderen Beispiele und auch die
Touchfunktion.
Nun zu meinem eigentlichen Problem
Wenn ich die Hardware (Arduino) neustarte (einmal von der
Spannungsversorgung - 12V oder USB - trenne), verliert er die
Kalibrierung für die Touchfunktion. Das äußert sich so, dass ein Druck
auf Pos. X an Pos. Y erkannt wird.
Wenn ich das Programm anschließend mit der Arduino Software wieder neu
implementiere, funktioniert wieder alles wunderbar (Druck auf Pos. X
wird an Pos. X erkannt) ohne, dass etwas verändert wurde.
Was ich bereits Probiert habe
Es war nicht besonders umfangreich, aber ich habe versucht die
Kalibrierdaten /CAL_X, CAL_Y, CAL_S/ außerhalb der Header Datei direkt
in die /void loop()/, /void setup()/,... zu schreiben. Leider ohne
erfolg.
Hoffe ich habe das Problem und die verwendete Hard-, Software
ausreichend beschrieben und ihr könnt mir weiterhelfen.
Viele Grüße
UTouch_ButtonTest.ino
1
// UTouch_ButtonTest
2
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
3
// web: http://www.RinkyDinkElectronics.com/
4
//
5
// This program is a quick demo of how create and use buttons.
6
//
7
// This program requires the UTFT library.
8
//
9
// It is assumed that the display module is connected to an
10
// appropriate shield or that you know how to change the pin
11
// numbers in the setup.
12
//
13
14
#include<UTFT.h>
15
#include<UTouch.h>
16
#include<UTouchCD.h>
17
18
// Initialize display
19
// ------------------
20
// Set the pins to the correct ones for your development board
Um diese Uhrzeit kann ich den Sourcecode nicht mehr nachvollziehen, aber
ganz allgemein: Man sollte die bei der Kalibrierung gefundenen
Korrekturdaten ins EEPROM schreiben, dann überstehen sie auch den
nächsten Neustart.
Siehe: http://arduino.cc/en/Tutorial/EEPROMWrite
Hey Frank,
vielen Dank für die schnelle Antwort. Leider bin ich noch nicht dazu
gekommen mich mit der Lösung zu beschäftigen, werde aber auf jeden Fall
die Tage Rückmeldung geben! :-)
Hi Kabookie,
es hat sich rausgestellt, dass in einer der Konfig-Dateien von "UTouch"
ein Fehler war.
Die Datei selbst findest du unter:
/Users/<Benutzer>/Documents/Arduino/libraries/UTouch/hardware/avr
und dort "HW_AVR.inc".
Was du nun macht ist in der letzten For-Schleife einen Delay einbauen,
damit er zwischen dem Hochziehen der beiden clk Pins und der erneuten
Abfrage einen Moment wartet.
1
voidUTouch::touch_WriteData(bytedata)
2
{
3
bytetemp;
4
5
temp=data;
6
cbi(P_CLK,B_CLK);
7
8
for(bytecount=0;count<8;count++)
9
{
10
if(temp&0x80)
11
sbi(P_DIN,B_DIN);
12
else
13
cbi(P_DIN,B_DIN);
14
temp=temp<<1;
15
cbi(P_CLK,B_CLK);
16
sbi(P_CLK,B_CLK);
17
}
18
}
19
20
wordUTouch::touch_ReadData()
21
{
22
worddata=0;
23
24
for(bytecount=0;count<12;count++)
25
{
26
data<<=1;
27
sbi(P_CLK,B_CLK);
28
cbi(P_CLK,B_CLK);
29
delayMicroseconds(1);
30
if(rbi(P_DOUT,B_DOUT))
31
data++;
32
}
33
return(data);
34
}
Und schon sollte das Ganze funktionieren.
Viel Erfolg
@Mares
Guck mal zwei Beträge nach oben. In deiner
/Users/<Benutzer>/Documents/Arduino/libraries/UTouch/hardware/avr/HW_AVR
.inc
Datei fehlt ein delay.
Hast dir die anderen Beiträge nicht angeguckt?
Gruß Nick
Hallo allgemein
Dank Nick hab ich zufällig auch ein Problem mit meinem 7" Display
am Arduino Mega gelöst. Mit einem Mega Clone liefen die Testprogramme
nur manchmal. Da ich auch original Megas habe, probierte ich diese mit
dem TFT Touch -> die Programme liefen sofort problemlos.
Dann habe ich obigen Beitrag vom Nick gelesen und die Änderungen
durchgeführt und siehe -> nun laufen auch die Clone problemlos mit dem
Touch.
Vielen Dank für den Tip
Erich