/**
* @file matrix.c
*
* @date 04.03.2013
* @author Pascal Gollor
* web http://www.pgollor.de
*
* @copyright Dieses Werk ist unter einer Creative Commons Lizenz vom Typ
* Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen Bedingungen 3.0 Deutschland zugänglich.
* Um eine Kopie dieser Lizenz einzusehen, konsultieren Sie
* http://creativecommons.org/licenses/by-nc-sa/3.0/de/ oder wenden Sie sich
* brieflich an Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
*
* -- englisch version --
* @n This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
*
*/
#include "matrix.h"
#include "adc.h"
#include <util/delay.h> // delay_ms
/**
* @brief gedrueckte Taste
* @return Taste
*
* ADC 4x4 Matrix
*
* @n Pin: U/mV
* @n 1: 1019
* @n 2: 509
* @n 3: 339
* @n 4: 817
* @n 5: 453
* @n 6: 313
* @n 7: 683
* @n 8: 408
* @n 9: 291
* @n 0: 371
* @n A: 254
* @n B: 239
* @n C: 226
* @n D: 214
* @n *: 586
* @n #: 271
*/
uint8_t matrix_getKey(void)
{
uint8_t taste = 'x';
uint16_t adc = adc_read_avg(MATRIX_PIN, 3);
if (adc > 200)
{
// Zeit zum Entprellen
_delay_ms(10);
// Anschliessend Wert zum verwerten einlesen
uint16_t wert = adc_read_avg(MATRIX_PIN, 3);
// wenn der Wert < 200 ist, dann wurde eine Taste zu kurz gedrueckt
if (wert < 200)
return 'x';
// solange warten bis die Taste wieder losgelassen wurde
while (adc != 0)
{
adc = adc_read_avg(MATRIX_PIN, 3);
}
// Taste auf der 4x4 Matrix
if (wert > 998)
taste = '1';
else if (wert > 800)
taste = '4';
else if (wert > 668)
taste = '7';
else if (wert > 573)
taste = '*';
else if (wert > 498)
taste = '2';
else if (wert > 443)
taste = '5';
else if (wert > 399)
taste = '8';
else if (wert > 363)
taste = '0';
else if (wert > 331)
taste = '3';
else if (wert > 306)
taste = '6';
else if (wert > 284)
taste = '9';
else if (wert > 265)
taste = '#';
else if (wert > 248)
taste = 'A';
else if (wert > 233)
taste = 'B';
else if (wert > 220)
taste = 'C';
else if (wert > 209)
taste = 'D';
}
// Taste ausgeben
return taste;
}