e-wagen: Use updated LEDs & kill display
This commit is contained in:
@ -3,26 +3,28 @@
|
||||
#include "Bounce2.h"
|
||||
#include "RotaryEncoder.h"
|
||||
|
||||
volatile stw_data_type Stw_data = {0}; //alles mit 0 initialisieren
|
||||
volatile stw_data_type Stw_data = {0}; //alles mit 0 initialisieren
|
||||
volatile vehicle_data_type Vehicle_data = {0}; //alles mit 0 initialisieren
|
||||
bool enc1PinALast,enc1PinANow,enc2PinALast,enc2PinANow;
|
||||
int led[] = {led1,led2,led3,led4,led5,led6,led7,led8,led9,led10,led11,led12,led13,led14,led15,led16};
|
||||
bool enc1PinALast, enc1PinANow, enc2PinALast, enc2PinANow;
|
||||
int led[] = {led1, led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13, led14, led15, led16};
|
||||
bool entprell;
|
||||
int buttons[] = {button1,button2,button3,button4,button5,button6,enc1PinS,enc2PinS};
|
||||
int buttons[] = {PIN_BUTTON_LL, PIN_BUTTON_LR, PIN_BUTTON_RL, PIN_BUTTON_RR, enc1PinS, enc2PinS};
|
||||
Bounce debouncer[8];
|
||||
double val = 0;
|
||||
double val2 = 0;
|
||||
RotaryEncoder encoder(enc1PinA,enc1PinB,1,1,50);
|
||||
RotaryEncoder encoder2(enc2PinA,enc2PinB,1,1,50);
|
||||
RotaryEncoder encoder(enc1PinA, enc1PinB, 1, 1, 50);
|
||||
RotaryEncoder encoder2(enc2PinA, enc2PinB, 1, 1, 50);
|
||||
///////////////////////////////////////////////////
|
||||
// functions
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
void set_pins(){
|
||||
pinMode (l,OUTPUT);
|
||||
for (int thisLed = 0; thisLed < sizeof(led)/sizeof(int); thisLed++) {
|
||||
void set_pins()
|
||||
{
|
||||
for (int thisLed = 0; thisLed < sizeof(led) / sizeof(int); thisLed++)
|
||||
{
|
||||
pinMode(led[thisLed], OUTPUT);
|
||||
}
|
||||
pinMode(l, OUTPUT);
|
||||
/*pinMode(button1, INPUT);
|
||||
pinMode(button2, INPUT);
|
||||
pinMode(button3, INPUT);
|
||||
@ -36,165 +38,47 @@ void set_pins(){
|
||||
pinMode(enc2PinB, INPUT);
|
||||
//pinMode(enc2PinS, INPUT);
|
||||
//Stw_data.i=0;
|
||||
enc1PinALast=LOW;
|
||||
enc1PinANow=LOW;
|
||||
enc2PinALast=LOW;
|
||||
enc2PinANow=LOW;
|
||||
for(int i = 0; i < 8; i++){
|
||||
enc1PinALast = LOW;
|
||||
enc1PinANow = LOW;
|
||||
enc2PinALast = LOW;
|
||||
enc2PinANow = LOW;
|
||||
for (int i = 0; i < sizeof(buttons) / sizeof(*buttons); i++)
|
||||
{
|
||||
pinMode(buttons[i], INPUT);
|
||||
debouncer[i].attach(buttons[i]);
|
||||
debouncer[i].interval(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void read_buttons(){
|
||||
/*entprell = digitalRead(button3);
|
||||
delay(10);
|
||||
if(digitalRead(button3)){
|
||||
Stw_data.Stw_auto_shift = entprell;
|
||||
}
|
||||
entprell = digitalRead(button2);
|
||||
delay(10);
|
||||
if(digitalRead(button2)){
|
||||
Stw_data.Stw_neutral = entprell;
|
||||
}
|
||||
entprell = digitalRead(button1);
|
||||
delay(10);
|
||||
if(digitalRead(button1)){
|
||||
Stw_data.buttonState1 = entprell;
|
||||
}
|
||||
entprell = digitalRead(button6);
|
||||
delay(10);
|
||||
if(digitalRead(button6)){
|
||||
Stw_data.Stw_shift_up = entprell;
|
||||
}
|
||||
entprell = digitalRead(button5);
|
||||
delay(10);
|
||||
if(digitalRead(button5)){
|
||||
Stw_data.Stw_shift_down = entprell;
|
||||
}
|
||||
entprell = digitalRead(button4);
|
||||
delay(10);
|
||||
if(digitalRead(button4)){
|
||||
Stw_data.buttonState4 = entprell;
|
||||
}
|
||||
entprell = digitalRead(enc1PinS);
|
||||
delay(10);
|
||||
if(digitalRead(enc1PinS)){
|
||||
Stw_data.buttonStateEnc1 = entprell;
|
||||
}
|
||||
entprell = digitalRead(enc2PinS);
|
||||
delay(10);
|
||||
if(digitalRead(enc2PinS)){
|
||||
Stw_data.buttonStateEnc2 = entprell;
|
||||
}*/
|
||||
Stw_data.Stw_auto_shift = digitalRead(button3);
|
||||
Stw_data.Stw_neutral = digitalRead(button2);
|
||||
Stw_data.buttonState1 = digitalRead(button1);
|
||||
Stw_data.Stw_shift_up = digitalRead(button6);
|
||||
Stw_data.Stw_shift_down = digitalRead(button5);
|
||||
Stw_data.buttonState4 = digitalRead(button4);
|
||||
Stw_data.buttonStateEnc1 = digitalRead(enc1PinS);
|
||||
Stw_data.buttonStateEnc2 = digitalRead(enc2PinS);
|
||||
|
||||
/*for(int i = 0;i < 8; i++){
|
||||
debouncer[i].update();
|
||||
}
|
||||
debouncer[2].update();
|
||||
if(debouncer[2].fell()){
|
||||
Stw_data.Stw_auto_shift = HIGH;
|
||||
}
|
||||
if(debouncer[1].fell()){
|
||||
Stw_data.Stw_neutral = digitalRead(button2);
|
||||
}
|
||||
if(debouncer[0].fell()){
|
||||
Stw_data.buttonState1 = digitalRead(button1);
|
||||
}
|
||||
if(debouncer[5].fell()){
|
||||
Stw_data.Stw_shift_up = digitalRead(button6);
|
||||
}
|
||||
if(debouncer[4].fell()){
|
||||
Stw_data.Stw_shift_down = digitalRead(button5);
|
||||
}
|
||||
if(debouncer[3].fell()){
|
||||
Stw_data.buttonState4 = digitalRead(button4);
|
||||
}
|
||||
if(debouncer[6].fell()){
|
||||
Stw_data.buttonStateEnc1 = digitalRead(enc1PinS);
|
||||
}
|
||||
if(debouncer[7].fell()){
|
||||
Stw_data.buttonStateEnc2 = digitalRead(enc2PinS);
|
||||
}*/
|
||||
}
|
||||
|
||||
void read_rotary(){
|
||||
int enc = encoder.readEncoder();
|
||||
void read_buttons()
|
||||
{
|
||||
Stw_data.button_ll = digitalRead(PIN_BUTTON_LL);
|
||||
Stw_data.button_lr = digitalRead(PIN_BUTTON_LR);
|
||||
Stw_data.button_rl = digitalRead(PIN_BUTTON_RL);
|
||||
Stw_data.button_rr = digitalRead(PIN_BUTTON_RR);
|
||||
}
|
||||
|
||||
void read_rotary()
|
||||
{
|
||||
int enc2 = encoder2.readEncoder();
|
||||
if(enc != 0){
|
||||
val = val +0.5*enc;
|
||||
if (val==1 or val ==-1){
|
||||
if(Stw_data.trc==0 and enc<0){
|
||||
Stw_data.trc = 11;
|
||||
}else if(Stw_data.trc==11 and enc>0){
|
||||
Stw_data.trc=0;
|
||||
}else{
|
||||
Stw_data.trc = Stw_data.trc + enc;
|
||||
}
|
||||
val = 0;
|
||||
}
|
||||
}
|
||||
/*enc1PinANow = digitalRead(enc1PinA);
|
||||
enc2PinANow = digitalRead(enc2PinA);
|
||||
if ((enc1PinALast == LOW) && (enc1PinANow == HIGH)) {
|
||||
if (digitalRead(enc1PinB) == HIGH) {
|
||||
if(Stw_data.trc==0){
|
||||
Stw_data.trc = 5;
|
||||
}else{
|
||||
Stw_data.trc--;
|
||||
}
|
||||
}else {
|
||||
if(Stw_data.trc==5){
|
||||
Stw_data.trc=0;
|
||||
}else{
|
||||
Stw_data.trc++;
|
||||
}
|
||||
}
|
||||
}
|
||||
enc1PinALast = enc1PinANow;
|
||||
/*if (Stw_data.buttonStateEnc1 == HIGH){
|
||||
digitalWrite(led[Stw_data.i], HIGH);
|
||||
}*/
|
||||
if(enc2 != 0){
|
||||
val2 = val2 +0.5*enc2;
|
||||
if(val2==1 or val2==-1){
|
||||
if((Stw_data.mode==1 or Stw_data.mode==0) and enc2<0){
|
||||
if (enc2 != 0)
|
||||
{
|
||||
val2 = val2 + 0.5 * enc2;
|
||||
if (val2 == 1 or val2 == -1)
|
||||
{
|
||||
if ((Stw_data.mode == 1 or Stw_data.mode == 0) and enc2 < 0)
|
||||
{
|
||||
Stw_data.mode = 5;
|
||||
}else if(Stw_data.mode==5 and enc2>0){
|
||||
Stw_data.mode=1;
|
||||
}else{
|
||||
}
|
||||
else if (Stw_data.mode == 5 and enc2 > 0)
|
||||
{
|
||||
Stw_data.mode = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Stw_data.mode = Stw_data.mode + enc2;
|
||||
}
|
||||
val2=0;
|
||||
val2 = 0;
|
||||
}
|
||||
}
|
||||
/*if ((enc2PinALast == LOW) && (enc2PinANow == HIGH)) {
|
||||
//if(enc2PinALast != enc2PinANow){
|
||||
if (digitalRead(enc2PinB) == HIGH) {
|
||||
if(Stw_data.i==0){
|
||||
Stw_data.i = sizeof(led)/sizeof(int)-1;
|
||||
}else{
|
||||
Stw_data.i--;
|
||||
}
|
||||
}else {
|
||||
if(Stw_data.i==sizeof(led)/sizeof(int)-1){
|
||||
Stw_data.i=0;
|
||||
}else{
|
||||
Stw_data.i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
enc2PinALast = enc2PinANow;*/
|
||||
/*if (Stw_data.buttonStateEnc2 == HIGH){
|
||||
digitalWrite(led[Stw_data.i], HIGH);
|
||||
}*/
|
||||
}
|
||||
@ -2,100 +2,97 @@
|
||||
#ifndef FT18e_STW_Init
|
||||
#define FT18e_STW_Init
|
||||
|
||||
#define l 78 //test_led
|
||||
#define led1 12//PD8
|
||||
#define led2 11//PD7
|
||||
#define led3 9//PC21
|
||||
#define led4 8//PC22
|
||||
#define led5 7//PC23
|
||||
#define led6 6//PC24
|
||||
#define led7 5//PC25
|
||||
#define led8 4//PC26 und PA29
|
||||
#define led9 3//PC28
|
||||
#define led10 2//PB25
|
||||
#define led11 10//PC29 und PA28
|
||||
#define led12 22//PB26
|
||||
#define led13 19//PA10
|
||||
#define led14 13//PB27
|
||||
#define led15 17//PA12
|
||||
#define led16 18//PA11
|
||||
#define button1 48//bl
|
||||
#define button2 47//gl
|
||||
#define button3 44//gr
|
||||
#define button4 46//br
|
||||
#define button5 45//sl
|
||||
#define button6 49//sr
|
||||
#define enc1PinA 37
|
||||
#define enc1PinB 38
|
||||
#define enc1PinS 35
|
||||
#define enc2PinA 40
|
||||
#define enc2PinB 41
|
||||
#define enc2PinS 39
|
||||
#define l 78 //test_led
|
||||
#define led1 12 //PD8
|
||||
#define led2 11 //PD7
|
||||
#define led3 9 //PC21
|
||||
#define led4 8 //PC22
|
||||
#define led5 7 //PC23
|
||||
#define led6 6 //PC24
|
||||
#define led7 5 //PC25
|
||||
#define led8 4 //PC26 und PA29
|
||||
#define led9 3 //PC28
|
||||
#define led10 2 //PB25
|
||||
#define led11 10 //PC29 und PA28
|
||||
#define led12 22 //PB26
|
||||
#define led13 19 //PA10
|
||||
#define led14 13 //PB27
|
||||
#define led15 17 //PA12
|
||||
#define led16 18 //PA11
|
||||
#define enc1PinA 37
|
||||
#define enc1PinB 38
|
||||
#define enc1PinS 35
|
||||
#define enc2PinA 40
|
||||
#define enc2PinB 41
|
||||
#define enc2PinS 39
|
||||
|
||||
constexpr int PIN_BUTTON_LL = 47;
|
||||
constexpr int PIN_BUTTON_LR = 48;
|
||||
constexpr int PIN_BUTTON_RL = 46;
|
||||
constexpr int PIN_BUTTON_RR = 44;
|
||||
|
||||
// define Drehzahlgrenzen TODOOOO
|
||||
#define RPM_THRES_1 1000
|
||||
#define RPM_THRES_2 6000
|
||||
#define RPM_THRES_3 7000
|
||||
#define RPM_THRES_4 8000
|
||||
#define RPM_THRES_5 10000
|
||||
#define RPM_THRES_6 14000
|
||||
#define RPM_THRES_7 17000
|
||||
#define RPM_THRES_8 18000
|
||||
#define RPM_THRES_9 20000
|
||||
#define RPM_THRES_10 20000
|
||||
constexpr int16_t RPM_THRESH_1 = 1000;
|
||||
constexpr int16_t RPM_THRESH_2 = 4000;
|
||||
constexpr int16_t RPM_THRESH_3 = 6000;
|
||||
constexpr int16_t RPM_THRESH_4 = 8000;
|
||||
constexpr int16_t RPM_THRESH_5 = 10000;
|
||||
constexpr int16_t RPM_THRESH_6 = 12000;
|
||||
constexpr int16_t RPM_THRESH_7 = 14000;
|
||||
constexpr int16_t RPM_THRESH_8 = 16000;
|
||||
constexpr int16_t RPM_THRESH_9 = 18000;
|
||||
constexpr int16_t RPM_THRESH_10 = 20000;
|
||||
|
||||
constexpr int16_t LED_THRESH_T_MOT = 7000; // 1/100°C
|
||||
constexpr int16_t LED_THRESH_T_INV = 6000; // 1/100°C
|
||||
constexpr int16_t LED_THRESH_T_BAT = 5000; // 1/100°C
|
||||
constexpr uint16_t LED_THRESH_U_BATT = 350; // 1/100V
|
||||
|
||||
void set_pins(void);
|
||||
void read_buttons(void);
|
||||
void read_rotary(void); // read rotary switches
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t Stw_shift_up; // 1 Bit 0
|
||||
uint8_t Stw_shift_down; // 1 Bit 1
|
||||
uint8_t Stw_neutral; // 1 Bit 2
|
||||
uint8_t Stw_auto_shift; // 1 Bit 3
|
||||
uint8_t buttonState1; // 1 Bit 4
|
||||
uint8_t buttonState4; // 1 Bit 5
|
||||
//bool CAN_toggle;
|
||||
//bool CAN_check;
|
||||
//uint8_t i; //Index linker Drehschalter
|
||||
uint8_t buttonStateEnc1; // button
|
||||
//uint8_t br; //test mode : mittlere Drehschalter position
|
||||
uint8_t buttonStateEnc2; //button
|
||||
uint8_t displayindex; //index für Displayanzeige
|
||||
uint8_t error_type; //Extrainfos über Error-LED
|
||||
uint8_t trc;
|
||||
uint8_t mode;
|
||||
|
||||
} stw_data_type;
|
||||
{
|
||||
bool button_ll; // Left side, left button
|
||||
bool button_lr; // Left side, right button
|
||||
bool button_rl; // Right side, left button
|
||||
bool button_rr; // Right side, right button
|
||||
uint8_t mode;
|
||||
uint8_t displayindex; //index für Displayanzeige
|
||||
uint8_t error_type; //Extrainfos über Error-LED
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t e_thro; // E-Drossel
|
||||
uint8_t g_auto; // Auto-Shift
|
||||
uint8_t gear; // Gang
|
||||
uint16_t revol; // Drehzahl
|
||||
uint8_t t_oil; // Öl-Motor-Temperatur
|
||||
uint8_t t_mot; // Wasser-Motor-Temperatur
|
||||
uint8_t t_air; // LLK-Temperatur
|
||||
uint8_t u_batt; // Batteriespannung
|
||||
uint8_t rev_lim; // Drehzahllimit Bit
|
||||
uint8_t p_wat;
|
||||
uint8_t p_fuel;
|
||||
uint8_t p_oil;
|
||||
uint8_t p_brake_front;
|
||||
uint8_t p_brake_rear;
|
||||
uint8_t speed_fl;
|
||||
uint8_t speed_fr;
|
||||
uint8_t speed;
|
||||
|
||||
} vehicle_data_type;
|
||||
} stw_data_type;
|
||||
|
||||
|
||||
extern volatile stw_data_type Stw_data;
|
||||
extern volatile vehicle_data_type Vehicle_data;
|
||||
struct InverterData
|
||||
{
|
||||
bool ready;
|
||||
bool derating;
|
||||
bool warning;
|
||||
bool error;
|
||||
bool on;
|
||||
bool precharge;
|
||||
bool ams_emerg;
|
||||
bool ts_active;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t e_thro; // E-Drossel
|
||||
int16_t revol; // Drehzahl
|
||||
int16_t t_mot_l; // Motor-Wasser-Temperatur Links
|
||||
int16_t t_mot_r; // Motor-Wasser-Temperatur Rechts
|
||||
int16_t t_cell_max; // Maximale Zelltemperatur
|
||||
uint16_t u_cell_min; // Minimale Zellspannung
|
||||
uint16_t u_batt; // Batteriespannung (pre-AIR-voltage)
|
||||
bool rev_lim; // Drehzahllimit Bit
|
||||
int16_t p_wat;
|
||||
int16_t t_wat;
|
||||
uint8_t speed;
|
||||
InverterData inverter;
|
||||
int16_t t_inv;
|
||||
} vehicle_data_type;
|
||||
|
||||
extern volatile stw_data_type Stw_data;
|
||||
extern volatile vehicle_data_type Vehicle_data;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user