Pendelzug Erstversion

new file:   .gitignore
new file:   .vscode/extensions.json
new file:   ErsterTest.code-workspace
new file:   include/README
new file:   lib/AnalogFiveButtons/AnalogFiveButtons.cpp
new file:   lib/AnalogFiveButtons/AnalogFiveButtons.h
new file:   lib/Imotor/Imotor.cpp
new file:   lib/Imotor/Imotor.h
new file:   lib/L298n/L298n.cpp
new file:   lib/L298n/L298n.h
new file:   lib/README
new file:   lib/fahrt/fahrt.cpp
new file:   lib/fahrt/fahrt.h
new file:   lib/gleis/gleis.cpp
new file:   lib/gleis/gleis.h
new file:   lib/gleisabschnitt/gleisabschnitt.cpp
new file:   lib/gleisabschnitt/gleisabschnitt.h
new file:   lib/locomotive/locomotive.cpp
new file:   lib/locomotive/locomotive.h
new file:   lib/motor/dfquad.h
new file:   lib/motor/motor.cpp
new file:   lib/motor/motor.h
new file:   lib/weiche/weiche.cpp
new file:   lib/weiche/weiche.h
new file:   platformio.ini
new file:   src/main.cpp
new file:   test/README
This commit is contained in:
2023-05-14 21:22:04 +02:00
commit 349d1d644e
27 changed files with 1051 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
/*
AnalogFiveButtonsDebounce class for the analog 5 keys panels
Version 1.0
Copyright (c) 2015 - Kiss Gábor (kiss-gabor@outlook.hu)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
*/
#include <inttypes.h>
#include <Arduino.h>
#include "AnalogFiveButtons.h"
#define DEFAULT_FAILURE_RATE 10
// analogPin : where is the keypad OUT pin connected (A0, A1..)
// typeOfModule: 0-red Keyes_AD_Key module, 1-LCD Keypad module
AnalogFiveButtonsDebounce::AnalogFiveButtonsDebounce(uint8_t analogPin, uint8_t typeOfModule)
{
if(typeOfModule == KEYES_AD_KEY) {
// Default values for the Keyes_AD_Key module
// Parameters: analog pin, failure rate, left, up, down, right, fire
init( analogPin, DEFAULT_FAILURE_RATE, 0, 140, 320, 500, 740);
} else if(typeOfModule == LCD_KEYPAD) {
// Default values for the LCD Keypad module
// Parameters: analog pin, failure rate, left, up, down, right, fire
init( analogPin, DEFAULT_FAILURE_RATE, 480, 130, 305, 0, 720);
}
}
// Custom defined module
// Parameters: analogue pin, failure rate, left, up, down, right, fire values
AnalogFiveButtonsDebounce::AnalogFiveButtonsDebounce(uint8_t analogPin, uint8_t failureRate, int sw1Value, int sw2Value, int sw3Value, int sw4Value, int sw5Value)
{
init(analogPin, failureRate, sw1Value, sw2Value, sw3Value, sw4Value, sw5Value);
}
void AnalogFiveButtonsDebounce::init(uint8_t analogPin, uint8_t failureRate, int sw1Value, int sw2Value, int sw3Value, int sw4Value, int sw5Value)
{
analogReference(DEFAULT);
_analogPin = analogPin;
_failureRate = failureRate;
_sw1Value = sw1Value;
_sw2Value = sw2Value;
_sw3Value = sw3Value;
_sw4Value = sw4Value;
_sw5Value = sw5Value;
sensorValue = 0;
oldKey = 1;
newKey = 0;
lastflickerablekey = 0;
}
void AnalogFiveButtonsDebounce::evalButton()
{
// Key reset
newKey = SW_NO_PUSH;
sensorValue = analogRead(_analogPin);
if( (sensorValue > (_sw5Value - _failureRate)) && (sensorValue < (_sw5Value + _failureRate)) ) newKey = 5; // Fire
if( (sensorValue > (_sw4Value - _failureRate)) && (sensorValue < (_sw4Value + _failureRate)) ) newKey = 4; // Right
if( (sensorValue > (_sw3Value - _failureRate)) && (sensorValue < (_sw3Value + _failureRate)) ) newKey = 3; // Down
if( (sensorValue > (_sw2Value - _failureRate)) && (sensorValue < (_sw2Value + _failureRate)) ) newKey = 2; // Up
if( (sensorValue > (_sw1Value - _failureRate)) && (sensorValue < (_sw1Value + _failureRate)) ) newKey = 1; // Left
}
uint8_t AnalogFiveButtonsDebounce::getButton()
{
evalButton();
return newKey;
}
uint8_t AnalogFiveButtonsDebounce::changedButton()
{
evalButton();
if( newKey != lastflickerablekey) {
lastdebouncetime = millis();
lastflickerablekey = newKey;
newKey = SW_NO_CHANGE;
}
if((millis() - lastdebouncetime) > DEBOUNCEDELAY) {
if(oldKey == newKey)
{
// Nothing is changed
newKey = SW_NO_CHANGE;
} else {
oldKey = newKey;
}
}
else {
newKey = SW_NO_CHANGE;
}
return newKey;
}

View File

@@ -0,0 +1,64 @@
// ensure this library description is only included once
#ifndef A5Bdb_h
#define A5Bdb_h
#include <inttypes.h>
#define SW1 1
#define SW2 2
#define SW3 3
#define SW4 4
#define SW5 5
#define SW_NO_PUSH 0
#define SW_NO_CHANGE 255
#define BTN_LEFT 1
#define BTN_UP 2
#define BTN_DOWN 3
#define BTN_RIGHT 4
#define BTN_FIRE 5
#define BTN_SELECT 5
#define BTN_NO_PUSH 0
#define BTN_NO_CHANGE 255
// Module selection
#define KEYES_AD_KEY 0
#define LCD_KEYPAD 1
class AnalogFiveButtonsDebounce
{
public:
// analogPin : where is the keypad analog pin is connected (A0, A1..)
// typeOfModule: 0-red Keyes_AD_Key module, 1-LCD Keypad module
AnalogFiveButtonsDebounce(uint8_t , uint8_t );
// Custom defined module
// Parameters: analogue pin, failure rate, left value, up value, down value, right value, fire value
AnalogFiveButtonsDebounce(uint8_t , uint8_t , int , int , int , int , int );
// Returns: - actually pressed key (1-5)
// - 0 if no key is pressed
uint8_t getButton();
// Returns: - the changed key (1-5)
// - 0 if no key is pressed
// - 255 if nothing is changed
uint8_t changedButton();
private:
// Values of buttons
int _sw1Value, _sw2Value, _sw3Value, _sw4Value, _sw5Value;
// The analog pin number (A0, A1...)
uint8_t _analogPin;
// Failure Rate, default 10
uint8_t _failureRate;
// Analog port value
int sensorValue;
uint8_t oldKey, newKey, lastflickerablekey;
unsigned long lastdebouncetime;
const uint8_t DEBOUNCEDELAY=50;
void init(uint8_t , uint8_t , int , int , int , int , int );
void evalButton();
};
#endif