Hallo,
es geht um folgendes, ich wollte eine sketch schreiben der mir mit dem taster vom keypad shield ermöglicht wird mit verschieden tasten verschieden Pins auf high zu setzen. das gelingt mir leider nicht. wenn ich serial.println eingebe dann wird die ganze zeit was ausgegeben, obwohl ich keine taste betätige! wollte auch eine zeitverzögerung einbauen wenn man eine andere taste betätigt die dazu deklariert wurde.
so sieht mein sketch bis jetzt aus. über hilfreiche tipps bin ich sehr dankbar
//#include <LCDKeypad.cpp>
#include <PWM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd (8,9,4,5,6,7);
int NUM_KEYS = 5;
int key = -1;
int oldkey = -1;
int entprellzeit = 200;
int tasterstatus = LOW;
unsigned long tasterzeit =0;
int tasterGedrueckt = 0;
int Pegel1=0;
int Pegel2=0;
int FehlerAusgabe=0;
int Versorgungsspannung=0;
// Zuweisung der Pins
const int Pwm1 = 22; // Pegel 1
const int Pwm2 = 24; //Pegel 2
const int Pwm3 = 26; // Fehler Ausgabe
const int Pwm4 = 28; //Versorgungsspannung
// Tasten zuweisen
int adc_key_in = 0;
int lcd_key = 0;
#define btnNONE 0 // Wenn kein Button gerdückt wird soll die Versorgungsspannung auf High gesetzt
#define btnSELECT 1 // Wenn die Button Select gedrückt wird soll Fehler ausgelöst werden
#define btnLEFT 2 // Wenn die Button Links gedrückt wird soll Pegel 2 auf High gesetzt werden
#define btnUP 3 // Wenn die Button Up gedrückt wird soll die Zeit um 1 µs erhöht werden
#define btnDOWN 4 // Wenn die Button Down gedrückt wird soll die Zeit um 1 µs verringert werden
#define btnRIGHT 5 // Wenn die Button Right gedrückt wird soll Pegel 1 auf High gesetzt werden
int read_LCD_buttons ()
{
adc_key_in = analogRead (0);
if (adc_key_in <20) return btnRIGHT;
if (adc_key_in <180) return btnUP;
if (adc_key_in <610) return btnDOWN;
if (adc_key_in <890) return btnLEFT;
if (adc_key_in <990) return btnSELECT;
return btnNONE;
}
void setup()
{
Serial.begin (9600);
lcd.clear();
lcd.begin(16,2); // Verfügung der Zeilen und Spalten des Displays
lcd.setCursor(0,0); //Ausgabe auf den Display Zeile und Spalte
lcd.print (" Right/Left Up/Down Select");
lcd.setCursor(0,1);
lcd.print ("Level1/Level2 Time Set Fail");
pinMode ( NUM_KEYS, INPUT); // Auslesen des Buttons
pinMode (Pwm4, OUTPUT); // Wird als Ausgang deklariert
digitalWrite (Pwm4, HIGH); // Spannung Ausgabe
pinMode (Pwm1, OUTPUT);
digitalWrite (Pwm1, HIGH);
pinMode (Pwm2, OUTPUT);
digitalWrite (Pwm2, HIGH);
pinMode (Pwm3, OUTPUT);
digitalWrite (Pwm3, HIGH);
}
void loop()
{
for (int positionCounter = 0 ; positionCounter <1; positionCounter++)
{
lcd.scrollDisplayRight();
delay(400);
}
lcd_key = read_LCD_buttons ();
switch (lcd_key)
{
case btnRIGHT:
{
lcd.clear ();
lcd.begin(16,2);
lcd.setCursor (3,0);
lcd.print("Level1: 5-28v");
digitalWrite (2,LOW);
break;
}
{
case btnLEFT:
lcd.clear ();
lcd.print ("Level2: 1-25V");
break;
}
{
case btnUP:
lcd.clear();
lcd.print("Increase Time");
break;
}
{
case btnDOWN:
lcd.clear();
lcd.print("Decrement Time");
break;
}
{
case btnSELECT:
lcd.clear();
lcd.print("Set Fail");
break;
}
}
if ((millis()-tasterzeit> entprellzeit)&& tasterGedrueckt==0) //(btnNONE == HIGH && btnSELECT == LOW && btnUP == LOW && btnDOWN == LOW && btnLEFT == LOW && btnRIGHT == LOW) // Kein Button betätigt
{
digitalWrite (Pwm4, HIGH);
digitalWrite (Pwm1, LOW);
digitalWrite (Pwm2, LOW);
digitalWrite (Pwm3, LOW);
}
{
tasterstatus = analogRead (adc_key_in);
if (tasterstatus == HIGH)
{
tasterzeit= millis();
tasterGedrueckt =1;
}
if ((millis()-tasterzeit> entprellzeit)&& tasterGedrueckt==1)// && btnRIGHT == HIGH && btnSELECT == LOW && btnUP == LOW && btnDOWN == LOW && btnLEFT == LOW && btnNONE == LOW) // Rechte Button betätigt
{
Pegel1++;
tasterGedrueckt =0;
}
if (Pegel1==0)
{
digitalWrite (Pwm1, HIGH);
digitalWrite (Pwm4, LOW);
digitalWrite (Pwm2, LOW);
digitalWrite (Pwm3, LOW);
}
else if (Pegel1==1)
{
digitalWrite (Pwm4, HIGH);
digitalWrite (Pwm1, LOW);
digitalWrite (Pwm2, LOW);
digitalWrite (Pwm3, LOW);
}
else
{
Pegel1=0;
}
tasterstatus = analogRead (adc_key_in);
if (tasterstatus == HIGH)
{
tasterzeit= millis();
tasterGedrueckt =1;
}
Serial.println(Pegel2);
if ((millis()-tasterzeit> entprellzeit)&& tasterGedrueckt==1)// && btnLEFT == HIGH && btnSELECT == LOW && btnUP == LOW && btnDOWN == LOW && btnRIGHT == LOW btnNONE ==LOW) // linker button
{ Pegel2++;
tasterGedrueckt =0;
}
if (Pegel2==1)
{
digitalWrite (Pwm2, HIGH);
digitalWrite (Pwm4, LOW);
digitalWrite (Pwm1, LOW);
digitalWrite (Pwm3, LOW);
}
else if (Pegel2==2)
{
digitalWrite (Pwm4, HIGH);
digitalWrite (Pwm2, LOW);
digitalWrite (Pwm1, LOW);
digitalWrite (Pwm3, LOW);
}
else
{
Pegel2 =0;
}
tasterstatus = analogRead (adc_key_in);
if (tasterstatus == HIGH)
{
tasterzeit= millis();
tasterGedrueckt =1;
}
if ((millis()-tasterzeit> entprellzeit)&& tasterGedrueckt== 1)// &&btnSELECT == HIGH && btnLEFT == LOW && btnUP == LOW && btnDOWN == LOW && btnRIGHT == LOW && btnNONE == LOW)) // Select Button betätigt
{
FehlerAusgabe++;
tasterGedrueckt =0;
}
if (FehlerAusgabe == 0)
{
digitalWrite (Pwm2, HIGH);
digitalWrite (Pwm4, LOW);
digitalWrite (Pwm1, LOW);
digitalWrite (Pwm3, LOW);
}
else if (FehlerAusgabe == 1)
{
digitalWrite (Pwm4, HIGH);
digitalWrite (Pwm2, LOW);
digitalWrite (Pwm1, LOW);
digitalWrite (Pwm3, LOW);
}
else
{
FehlerAusgabe =0;
}
}
}