Hallo zusammen,
ich programmiere gerade zum ersten mal einen Arduino. Nun habe ich folgendes Problem und ich finde den Fehler nicht, weil ich nicht einschätzen kann, ob dieser an meinem Programm oder Hardware liegt.
Also der Grundgedanke ist, dass ich über einen induktiven Sensor einen Zählwert, welcher vorher über en Tastenfeld eingegeben werden kann runterzählen möchte. Sprich immer wenn der Sensor schaltet wert = -1. Auch soll der Wert mit einem Taster auf null gesetzt und mit zwei anderen Tastern von Hand rauf und runter gezählt werden können.
Einmal der Hardware technische Aufbau:
IC: Arduino Uno
Taster: sind über Seed Platinge angeschlossen
Displays : Über I2C auf die Seed Platine
Hier ist das Problem, das der Sensor eine Schaltspannung von 24V besitzt. Da man damit nicht direkt auf den Arduino gehen kann, habe ich einen Spannungswandler dazwischen geschaltet, welcher die Spannung auf 5V steuert. Auch gehe ich nicht direkt mit der Signallitze auf den Eingang des Spannungswandlers, sondern auf ein Relais, welches schaltet und dann 24V auf den Eingang des Spannungswandlers gibt.
Hier habe ich schon folgendes probiert:
- Spannung am Eingang des Wandlers gemessen
- Spannung am Ausgang des Wandlers gemessen
- Alle Leitungen mit einem Multimeter durchgebimmelt
Das Programm läuft so weit rund, allerdings zählt der Zähler einfach die ganze Zeit ununterbrochen um eins runter. Ich habe für den Sensor ganz normal den Pin 12 als Eingang deklariert und dann einfach in eine IF- Abfrage eingebunden, mit einem einfachen Zähler. Ich hänge euch den Code einfach an.
Ich freue mich über jeden Tipp oder Ratschlag
#include <rgb_lcd.h> // https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight
#include <Wire.h> // Libary für den I2C Bus
#include <LiquidCrystal_I2C.h> // https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
#include <Keypad.h> // https://github.com/Chris--A/Keypad
rgb_lcd lcd; // Initialisierung der LCD Displays
//Hier wird die größe des Keypads definiert
const byte COLS = 3; //3 Spalten
const byte ROWS = 4; //4 Zeilen
//Die Ziffern/Zeichen:
char hexaKeys[ROWS][COLS]={
{'#','0','*'},
{'9','8','7'},
{'6','5','4'},
{'3','2','1'}
};
byte colPins[COLS] = { 11, 10, 9 }; //Definition der Pins für die 3 Spalten
byte rowPins[ROWS] = { 8, 7, 6, 5 }; //Definition der Pins für die 4 Zeilen
char pressedkey; //pressedKey entspricht in Zukunft den gedrückten Tasten
Keypad mykeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //Das Keypad kann absofort mit myKeypad angesprochen werden
//Variablen sammlung
const int colorR = 255; // Initialisierung der konstanten Integer Variable zur Farbausgabe Rot
const int colorG = 0; // Initialisierung der konstanten Integer Variable zur Farbausgabe Gruen
const int colorB = 255; // Initialisierung der konstanten Integer Variable zur Farbausgabe Blau
const int buttonPin1 = 2; // Initialisierung der konstanten Integer Variable für den Hoch Button
const int buttonPin2 = 3; // Initialisierung der konstanten Integer Variable für den runter Button
const int buttonPin3 = 4; // Intialisierung der konstanten Integer Variable für den Reset Button
const int sensorPin = 12; // Intialisierung der konstanten Integer Variable für den Sensor
const int ledPin = 13; // Initialisierung der konstanten Integer Variable für den LED Button
int buttonstate1 = 0; // Initialisierung der Integer Variable für Status des Buttons
int buttonstate2 = 0; // Initialisierung der Integer Variable für Status des Buttons
int buttonstate3 = 0; // Initialisierung der Integer Variable für Status des Buttons
int sensorstate=0; // Intialisierung der Integer Variable für Status des Sensors
int x;
long zahl, zahla=0, zahlb=0, zahlc=0, zahld=0; // Variablen zur Eingabe der Zahlen
bool a=0, b=0, c=0, d=0;
void setup()
{
lcd.setRGB (colorG, colorR, colorB); // Festlegung der zu leuchtenden Hintergrundfarbe des Displays
pinMode(buttonPin1, INPUT_PULLUP); // Festlegung des Eingangs D2 als Eingang und ansprechen des internen Pullup Widerstand
pinMode(buttonPin2, INPUT_PULLUP); // Festlegung des Eingangs D3 als Eingang und ansprechen des internen Pullup Widerstand
pinMode(buttonPin3, INPUT_PULLUP); // Festlegung des Eingangs D4 als Eingang und ansprechen des internen Pullup Widerstand
pinMode(ledPin, OUTPUT); // Festlegung der internen LED als Ausgang
pinMode(sensorPin,INPUT_PULLUP); // Intialisierung des digitalen PIN als Input
}
void loop(){
Anfang:
pressedkey = mykeypad.getKey(); // Eingabe entspricht der gedrückten Taste
if (pressedkey)
{
switch (pressedkey){
case '*': //Gerade aktive Zahl löschen
if(a) zahla=0;
if(b) zahlb=0;
if(c) zahlc=0;
if(d) zahld=0;
zahl=0;
break;
case'1' : zahl*=10; zahl+=1; break; //Die Ziffern 1 bis 0 eingeben
case'2' : zahl*=10; zahl+=2; break;
case'3' : zahl*=10; zahl+=3; break;
case'4' : zahl*=10; zahl+=4; break;
case'5' : zahl*=10; zahl+=5; break;
case'6' : zahl*=10; zahl+=6; break;
case'7' : zahl*=10; zahl+=7; break;
case'8' : zahl*=10; zahl+=8; break;
case'9' : zahl*=10; zahl+=9; break;
}
}
lcd.begin(16, 2); // Start des Displays mit Zeilen und Spalten
lcd.print("Zaehlwert:" ); // Textausgabe auf Display
lcd.print(zahl); // Textausgabe der Variablen
// lcd.print (zahlb);
delay (150); // Delay zur entspannteren Eintragung des Wertes
buttonstate1 = digitalRead(buttonPin1); // Status auslesen des Pushbutton 1
buttonstate2 = digitalRead(buttonPin2); // Status auslesen des Pushbutton 2
buttonstate3 = digitalRead(buttonPin3); // Status auslesen des Pushbutton 3
sensorstate = digitalRead(sensorPin); // Status auslesen des Sensors
//-------------------------------------------------------------------------------------------------------------------------------------------
if (buttonstate1== HIGH){ // Wenn der Button gedrückt ist....
digitalWrite(ledPin, HIGH); // Dann lasse LED leuchten
x=zahl++; // Dann zaehle den Wert in der Variable wert um einen hoch und scchreibe sie in die Variable x
}
else{ // Sonst...
digitalWrite(ledPin, LOW); // bleibt die LED aus
} //-------------------------------------------------------------------------------------------------------------------------------------------
if (buttonstate2 == HIGH){ // Wenn der Button gedrückt ist....
digitalWrite(ledPin, HIGH); // Dann lasse LED leuchten
x=zahl--; // Dann zaehle den Wert in der Variable wert um einen hoch und scchreibe sie in die Variable x
}
else{ // Sonst...
digitalWrite(ledPin, LOW); // bleibt die LED aus
} //----------------------------------------------------------------------------------------------------------------------------------------------
if (buttonstate3 == HIGH){ // Wenn der Button gedrückt ist....
digitalWrite(ledPin, HIGH); // Dann lasse LED leuchten
zahl =0;
goto Anfang;
}
else{ // Sonst...
digitalWrite(ledPin, LOW); // bleibt die LED aus
} //---------------------------------------------------------------------------------------------------------------------------------------------
if (sensorstate == HIGH){ // Wenn der Button gedrückt ist....
x=zahl--;
}
//else{ // Sonst...
//digitalWrite(ledPin, LOW); // bleibt die LED aus
// }
}