ASURO Library  2.80
Funktionen
switches.c-Dateireferenz

Funktionen zum lesen der Taster und um den 'Interrupt-Betrieb' ein-
und auszuschalten. Im 'Interrupt-Betrieb' wird die globale Variable
switched gesetzt beim betaetigen irgendeines Tasters. Mehr ...

#include "asuro.h"
#include "myasuro.h"
Include-Abhängigkeitsdiagramm für switches.c:

gehe zum Quellcode dieser Datei

Funktionen

unsigned char PollSwitch (void)
 Tastsensor Abfrage im 'Polling-Betrieb'.
 
void StartSwitch (void)
 'Interrupt-Betrieb' zur Tastsensor Abfrage einschalten.
 
void StopSwitch (void)
 Die globale Variable switched wird nicht mehr automatisch bei einem
Tastendruck gesetzt.
 

Ausführliche Beschreibung

Funktionen zum lesen der Taster und um den 'Interrupt-Betrieb' ein-
und auszuschalten. Im 'Interrupt-Betrieb' wird die globale Variable
switched gesetzt beim betaetigen irgendeines Tasters.

Siehe auch
Define fuer die Auswahl des ADC-Kanals in asuro.h
SWITCH
Version
V— - 10.11.2003 - Jan Grewe - DLR
Original Version von der ASURO CD
V— - bis zum 07.01.2007 -
Bitte in Datei CHANGELOG nachsehen.
V001 - 13.01.2007 - m.a.r.v.i.n
+++ Alle Funktionen
Zerlegte Sourcen in einzelne Dateien fuer eine echte Library.
V002 - 22.01.2007 - Sternthaler
+++ Alle Funktionen
Kommentierte Version (KEINE Funktionsaenderung)
V003 - 18.02.2007 - Sternthaler
+++ StartSwitch() Korrektur im Code-Beispiel
V004 - 20.02.2007 - m.a.r.v.i.n
Korrekturfaktur aus myasuro.h verwenden
V005 - 20.01.2008 - m.a.r.v.i.n
ReadADC Funktion zum Auslesen des A/D Wandlers verwenden
Anpassungen an ATmega168
V006 - 21.04.2008 - m.a.r.v.i.n
Bug Report von RN-User thowil
  • Bugfix in PollSwitch Funktion fuehrt zu staendig neuen Interrupts
    bei Verwendung mit StartSwitch
  • PollSwitch kehrt jetzt sofort ohne A/D Wandlung zurueck
    wenn keine Taste gedrueckt wurde
V007 - 29.03.2009 - rossir
A/D Wandler Abfrage ueber Interrupt

Definiert in Datei switches.c.

Dokumentation der Funktionen

unsigned char PollSwitch ( void  )

Tastsensor Abfrage im 'Polling-Betrieb'.

Rückgabe
Tastenwert bitorientiert, K1 = Bit5, K2 = Bit4, K3 = Bit3, K4 = Bit2, K5 = Bit1, K6 = Bit0
Hinweis:
In dieser Funktion ist ein Sleep() Aufruf vorhanden. Der wird benoetigt
damit IsrStandard() genügend Zeit bekommt so, dass der zweite PollSwitch aufruf auch garantiert einen neuen Wert zur Verfügung hat.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
uint8_t t1, t2;
unsigned char text [16];
while (1)
{
t1 = PollSwitch ();
t2 = PollSwitch ();
// 2x PollSwitch aufrufen und beide Rueckgabewerte auf Gleichheit ueberpruefen
if (t1 && t2 && t1 == t2) // irgendeine Taste gedrueckt
{
itoa (t1, text, 10); // Tastenwert senden
SerPrint (text);
SerPrint ("\r\n"); // Zeilenvorschub
}
Msleep (500); // 0,5 sek warten
}

Definiert in Zeile 88 der Datei switches.c.

{
unsigned int i;
if (!switched) return 0; // Kehrt sofort zurück, falls kein Taster gedrueckt ist
i = ReadADC(SWITCH, 15); // sleep 15 ms -> Rückwärtskompatibel?! und wg. timing da draussen und drinnen (IsrStandard())
if (i>=MY_SWITCH_THRESHHOLD) return 0; // Eher rauschen -> raus hier!
// Es wurde "ganz sicher" eine Taste gedrückt.
/*
Die Original Umrechenfunktion von Jan Grewe - DLR wurde ersetzt durch
eine Rechnung ohne FLOAT-Berechnungen.
return ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 61.0 + 0.5));
Wert 61L evtl. anpasssen, falls fuer K1 falsche Werte zurueckgegebn werden.
*/
return ((10240000L / (long)i - 10000L) * MY_SWITCH_VALUE + 5000L) / 10000;
}
void StartSwitch ( void  )

'Interrupt-Betrieb' zur Tastsensor Abfrage einschalten.

Hinweis:
Ueber die globale Variable switched kann nach diesem Funktionsaufruf im
Hauptprogramm geprueft werden, ob eine Taste gedrueckt wurde und kann dann
bei Bedarf die Funktion PollSwitch() aufrufen.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
while (!switched) // wartet auf Tastendruck
;
// an dieser Stelle kann mit Pollswitch geprüft werden
// welche Taste gedrückt wurde, wenn nötig.
switched = FALSE; // Vorbereitung für neuen Aufruf von StartSwitch()

Definiert in Zeile 132 der Datei switches.c.

{
// ADC Wert von Switchen wird immer abgefragt
// siehe ISRStandard() dort auch das handling von switched=TRUE
cli ();
sei ();
}
void StopSwitch ( void  )

Die globale Variable switched wird nicht mehr automatisch bei einem
Tastendruck gesetzt.

Beispiel:
(Nicht vorhanden)

Definiert in Zeile 153 der Datei switches.c.

{
// ADC Wert von Switchen wird immer abgefragt
}