INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Programm für Touchfeld als vereinfachtes Model mit Widerständen aufgebaut
06.11.2015, 20:55
Beitrag #1
Brick Programm für Touchfeld als vereinfachtes Model mit Widerständen aufgebaut
Hallo an Alle,

ich bin dabei ein Model zur Veranschaulichung der Funktion eines "Resistiven Touchfeldes" (4-wire) zu entwickeln und brauche Hilfe da ich ein wenig Erfahrungen auf dem Gebiet des Programmierens von Mikrocontrollern mitbringe.

Die Hardware steht:
-Es sind 2 Platinen mit jeweils 2 Reihen von 3 Widerständen aufgebaut. Beide Platinen sind um 90° gegeneinander aufgebaut. Somit veranschaulicht eine Platine die Widerstands X-Achse und die andere eine "Platine Y-Achse".

-Beschaltung vom Arduino erfolgt über 2 Anschlüße je Platine. "Platine X-Achse" besitzt x+ und x-. "Platine Y-Achse" besitzt y+ und y-.

-Es gibt nur 4 Touchpunkte. Diese werden als 4 Schalter dargestelt, welche eine el. Verbindung von Widerständen der "Platine X-Achse" zur Widerständen "Platine Y-Achse" herstellen. ( Mir ist bewusst, dass beim Resistiven Touch auch die Kraft des Drucks noch zusätzlich ermittelt werden kann, dies wird bei meinem Model in der ersten Ausführung nicht umgesetzt. )

Hier die Beschaltung der Platinen:

x+ (=A1) x- (=Pin4) y+ (=A2) y- (=Pin5)
read x-Coord.: Output High Output LOW ADC Input with Pullup
read y-Coord.: ADC Input with Pullup Output High Output LOW


Das bekomme es mit dem Arduino UNO hin:

-das Auslesen von Spannungen, Umrechnung in Widerstände und Zuweisung zum einen der Tocuhpunkte.
-!!!1 aber nur entweder X-Achse oder Y-Achse, wenn ich beide Programmabschnitte nacheinander ablaufen lasse funktioniert es nicht.

Wie realisiere ich solch eine Umschaltung?
Ich habe alles in der loop-Schleife programmiert, man kann es schöner machen, aber es geht vorrangig um die Funktionalität des Programms.

Programm:

1. Wird Schalter EIN geschaltet, kann die Auslesung der Touchpunkte beginnen. Betriebsbereitschaft wird mit ener LED signalisiert.
2. Wird einer Touchpunkte (Schalter) betättigt erfolgt zuerst die Ermittlung des Widerstandswertes X-Achse und Zuweisung zum Touchpunkt liegt rechts oder links.
3. Umschaltung
4. Ermittlung des Widerstandswertes Y-Achse und Zuweisung zum Touchpunkt oben oder unten.
Noch nicht realisiert:
5. Ist es Punkt links und oben, dann ist es Punkt 1
6. Ausgabe: Punkt 1

Wäre euch für die Hilfe sehr dankbar!
------------------------------------------------
float Quellspannung = 4.835; // Spannungswert zur Berechnung
float Uxmess; // Gemessene skalierte Spannung X-Achse
float Uymess; // Gemessene skalierte Spannung Y-Achse
int RxGES = 600.00;
int RyGES = 1170.00;
float R_x; // Errechneter Widerstand X-Achse
float R_y; // Errechneter Widerstand Y-Achse
int TPoint = 0; // Ermittelte Touchpunkt
int buttonPin = 2; // Schalter Touchscreen betriebsbereit
int Xminus = 4; // X-
int Yminus = 5; // Y-
float XValue = LOW; // X Spannungswert
float YValue = LOW; // Y Spannungswert
int LED = 9; //Pin für Test-LED
int StatusbuttonPin ; //Tasterzustand speichern


void setup() {
//Initialisierung Ein-/Ausgänge
pinMode(buttonPin, INPUT); // Schalter Touchscreen betriebsbereit
pinMode(LED, OUTPUT); //Test-LED

// Anzeige am PC
Serial.begin(9600); //Serielle Auslesung mit 9600Bit/s
Serial.println("Spannung und Widerstand ausmessen");
Serial.println();
}

void loop() {
StatusbuttonPin = digitalRead(buttonPin);
if (StatusbuttonPin != LOW) {
digitalWrite(LED, HIGH);

//Beschaltung der Platine X-Achse
pinMode(Xminus, OUTPUT);
digitalWrite(Xminus, LOW); // GND am X-
delay(1000);
pinMode(Yminus, INPUT);
digitalWrite(Yminus, INPUT_PULLUP); // Y- auf HIGH Potential verschieben
delay(1000);
pinMode(A1, OUTPUT);
digitalWrite(A1, HIGH); // HIGH(=4,835V) auf X+

delay(1000);

float sensorValue1 = analogRead(A2); //Lese SpannungX ein
XValue = sensorValue1;

// Skaliere und Speichere den Wert
Uxmess = (Quellspannung / 1023.0) * XValue; //Skalierung der SpannungX
Serial.print(Uxmess); // Ausgabe des Spannungswertes
Serial.println("Volt");
R_x = RxGES * (Uxmess / Quellspannung);
Serial.print(R_x); // Ausgabe des Widerstandswertes
Serial.println("Ohm");
Serial.println();

//Zuweisung der Touchpunkte X-Achse
if (R_x > 501) {
Serial.println("Keiner der Schalter betättigt! ");
Serial.println();
}
if ((R_x < 500) && (R_x > 300)) {
int TPointLeft = 1;
Serial.println("Touchpunkt Links ");
Serial.println();
}
if (R_x < 300) {
int TPointRight = 1;
Serial.println("Touchpunkt Rechts ");
Serial.println();
}

delay(1000);
Serial.println("Umschaltung ");
Serial.println();
delay(500);

//Beschaltung der Platine Y-Achse
pinMode(Yminus, OUTPUT);
digitalWrite(Yminus, LOW); // GND am Y-
delay(1000);
pinMode(Xminus, INPUT);
digitalWrite(Xminus, INPUT_PULLUP); // X- auf HIGH Potential verschieben
delay(1000);
pinMode(A2, OUTPUT);
digitalWrite(A2, HIGH); // HIGH(=4,835V) auf Y+

delay(1000);

float sensorValue2 = analogRead(A1); //Lese SpannungY ein
YValue = sensorValue2;

// Skaliere und Speichere den Wert
Uymess = (Quellspannung / 1023.0) * YValue; //Skalierung der SpannungX
Serial.print(Uymess); // Ausgabe des Spannungswertes
Serial.println("Volt");
R_y = RyGES * (Uymess / Quellspannung);
Serial.print(R_y); // Ausgabe des Widerstandswertes
Serial.println("Ohm");
Serial.println();

//Zuweisung der Touchpunkte Y-Achse
if (R_y > 1000) {
Serial.println("Keiner der Schalter betättigt! ");
Serial.println();
}
if ((R_y < 999) && ( R_y > 585)) {
int TPointUp = 1;
Serial.println("Touchpunkt Oben ");
Serial.println();
}
if (R_y < 585) {
int TPointDown = 1;
Serial.println("Touchpunkt Unten ");
Serial.println();
}
delay(1000);

}
else {
digitalWrite(LED, LOW);
Uxmess = 0;
R_x = 0;
Uymess = 0;
R_y = 0;
Serial.print("Bitte Schalter betättigen!");
Serial.println();
delay(3000);
}
}

-------------------------------------------------------------------------------------------


Angehängte Datei(en)
.ino  touch_sketch.ino (Größe: 3,5 KB / Downloads: 35)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.11.2015, 16:52
Beitrag #2
RE: Programm für Touchfeld als vereinfachtes Model mit Widerständen aufgebaut
Beitrag nicht mehr aktuell. Programm läuft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler in meinem Programm Franz54 7 165 01.12.2016 23:58
Letzter Beitrag: hotsystems
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 550 06.07.2016 14:59
Letzter Beitrag: Binatone
  Werte an anderes Programm weiterleiten Typ 2 440 12.03.2016 23:28
Letzter Beitrag: Typ
  Programm Code Erweitern hugolost 8 664 01.01.2016 20:02
Letzter Beitrag: Bitklopfer
  Eingänge im Programm integrieren Phil94 21 1.851 06.12.2015 10:52
Letzter Beitrag: hotsystems
  Webserver abfragen mit einem Programm arduinofan 2 736 28.11.2015 15:54
Letzter Beitrag: arduinofan
  aus Arduino IDE Programm beim Upload starten PingPong 3 627 13.11.2015 15:38
Letzter Beitrag: PingPong
  Graph-Programm arduinofan 3 543 31.10.2015 13:45
Letzter Beitrag: hotsystems
  Programm zum Beobachten von Messwerten Marduino_UNO 13 2.090 22.10.2015 12:29
Letzter Beitrag: Scherheinz
  Taster-Programm TheTerrawr 2 1.059 06.08.2015 16:24
Letzter Beitrag: TheTerrawr

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste