Format everything
The next commit will add this to a `.git-blame-ignore-revs` file which you can use to ignore this commit when running git blame. Simply run git blame --ignore-revs-file .git-blame-ignore-revs [...] Or configure git to persistently ignore the commit: git config blame.ignoreRevsFile .git-blame-ignore-revs
This commit is contained in:
parent
14b5f6988d
commit
41d3bd907e
8
.editorconfig
Normal file
8
.editorconfig
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.{cpp,c,h,hpp}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
@ -13,9 +13,7 @@ struct FaultStatusRegisters {
|
|||||||
uint32_t SHCSR;
|
uint32_t SHCSR;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class FaultType {
|
enum class FaultType { HardFault, MemManage, BusFault, UsageFault };
|
||||||
HardFault, MemManage, BusFault, UsageFault
|
|
||||||
};
|
|
||||||
|
|
||||||
struct FlashDump {
|
struct FlashDump {
|
||||||
FaultType type;
|
FaultType type;
|
||||||
@ -48,13 +46,14 @@ size_t uart_print_hex(uint32_t x);
|
|||||||
|
|
||||||
void print_dumped_faults(bool in_irq = false);
|
void print_dumped_faults(bool in_irq = false);
|
||||||
void print_stacked_registers(const uint32_t *stack, bool in_irq = false);
|
void print_stacked_registers(const uint32_t *stack, bool in_irq = false);
|
||||||
void print_fault_registers(const FaultStatusRegisters *fsr, bool in_irq=false);
|
void print_fault_registers(const FaultStatusRegisters *fsr,
|
||||||
|
bool in_irq = false);
|
||||||
|
|
||||||
FaultStatusRegisters get_current_fsr();
|
FaultStatusRegisters get_current_fsr();
|
||||||
|
|
||||||
const char *get_fault_type_name(FaultType type);
|
const char *get_fault_type_name(FaultType type);
|
||||||
void fault_handler(uint32_t *stack_addr, FaultType fault_type,
|
void fault_handler(uint32_t *stack_addr, FaultType fault_type, const int *leds,
|
||||||
const int *leds, unsigned n_leds);
|
unsigned n_leds);
|
||||||
|
|
||||||
void inline busy_wait(size_t iterations) {
|
void inline busy_wait(size_t iterations) {
|
||||||
for (size_t i = 0; i < iterations; i++) {
|
for (size_t i = 0; i < iterations; i++) {
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
|
#include "FT18_STW_DISPLAY.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "EDIPTFT.h"
|
#include "EDIPTFT.h"
|
||||||
#include "FT_2018_STW_CAN.h"
|
|
||||||
#include "FT18_STW_INIT.h"
|
#include "FT18_STW_INIT.h"
|
||||||
#include "FT18_STW_DISPLAY.h"
|
#include "FT_2018_STW_CAN.h"
|
||||||
|
|
||||||
EDIPTFT tft(true, false);
|
EDIPTFT tft(true, false);
|
||||||
String bezeichnungen[]={"T_mot","T_oil","P_oil","% fa","U_batt","P_wat","T_air",
|
String bezeichnungen[] = {"T_mot", "T_oil", "P_oil", "% fa",
|
||||||
"P_b_front","P_b_rear","Error Type","Speed_fl","Speed_fr","Speed"};
|
"U_batt", "P_wat", "T_air", "P_b_front",
|
||||||
|
"P_b_rear", "Error Type", "Speed_fl", "Speed_fr",
|
||||||
|
"Speed"};
|
||||||
//"Drehzahl","P_fuel","Index"
|
//"Drehzahl","P_fuel","Index"
|
||||||
int led_s[] = {led1,led2,led3,led4,led5,led6,led7,led8,led9,led10,led11,led12,led13,led14,led15,led16};
|
int led_s[] = {led1, led2, led3, led4, led5, led6, led7, led8,
|
||||||
|
led9, led10, led11, led12, led13, led14, led15, led16};
|
||||||
|
|
||||||
DataBox gear_box(121, 0, 199, 94, 160, 0, EA_SWISS30B, 4, 4, 'C');
|
DataBox gear_box(121, 0, 199, 94, 160, 0, EA_SWISS30B, 4, 4, 'C');
|
||||||
DataBox left_box(0, 0, 119, 94, 110, 12, EA_FONT7X12, 3, 8, 'R');
|
DataBox left_box(0, 0, 119, 94, 110, 12, EA_FONT7X12, 3, 8, 'R');
|
||||||
@ -142,7 +145,8 @@ bool check_alarms() {
|
|||||||
if (Vehicle_data.p_oil >= POIL_ALARM_THRESH || Vehicle_data.speed == 0) {
|
if (Vehicle_data.p_oil >= POIL_ALARM_THRESH || Vehicle_data.speed == 0) {
|
||||||
poil_last_valid = now;
|
poil_last_valid = now;
|
||||||
}
|
}
|
||||||
if (Vehicle_data.t_mot <= TMOT_ALARM_THRESH || Vehicle_data.t_mot == TMOT_SAFE_VALUE) {
|
if (Vehicle_data.t_mot <= TMOT_ALARM_THRESH ||
|
||||||
|
Vehicle_data.t_mot == TMOT_SAFE_VALUE) {
|
||||||
tmot_last_valid = now;
|
tmot_last_valid = now;
|
||||||
}
|
}
|
||||||
if (Vehicle_data.t_oil <= TOIL_ALARM_THRESH) {
|
if (Vehicle_data.t_oil <= TOIL_ALARM_THRESH) {
|
||||||
@ -155,9 +159,12 @@ bool check_alarms() {
|
|||||||
|
|
||||||
if (alarm_active) {
|
if (alarm_active) {
|
||||||
String alarm_text = "";
|
String alarm_text = "";
|
||||||
if (poil_alarm) alarm_text += "PO";
|
if (poil_alarm)
|
||||||
if (tmot_alarm) alarm_text += "TM";
|
alarm_text += "PO";
|
||||||
if (toil_alarm) alarm_text += "TO";
|
if (tmot_alarm)
|
||||||
|
alarm_text += "TM";
|
||||||
|
if (toil_alarm)
|
||||||
|
alarm_text += "TO";
|
||||||
alarm(alarm_text);
|
alarm(alarm_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,11 +176,14 @@ bool check_enc_displays() {
|
|||||||
static bool display_trc, display_mode;
|
static bool display_trc, display_mode;
|
||||||
static uint32_t display_trc_begin, display_mode_begin;
|
static uint32_t display_trc_begin, display_mode_begin;
|
||||||
|
|
||||||
return check_display(trc_old, Stw_data.trc, display_trc, display_trc_begin, "ARB") ||
|
return check_display(trc_old, Stw_data.trc, display_trc, display_trc_begin,
|
||||||
check_display(mode_old, Stw_data.mode, display_mode, display_mode_begin, "MODE");
|
"ARB") ||
|
||||||
|
check_display(mode_old, Stw_data.mode, display_mode,
|
||||||
|
display_mode_begin, "MODE");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool check_display(uint8_t& val_old, uint8_t val_new, bool& active, uint32_t& begin, const String& title) {
|
bool check_display(uint8_t& val_old, uint8_t val_new, bool& active,
|
||||||
|
uint32_t& begin, const String& title) {
|
||||||
if (val_old != val_new) {
|
if (val_old != val_new) {
|
||||||
active = true;
|
active = true;
|
||||||
begin = millis();
|
begin = millis();
|
||||||
@ -250,7 +260,8 @@ void update_display(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void alarm(String textstr) {
|
void alarm(String textstr) {
|
||||||
uint8_t x = 1;;
|
uint8_t x = 1;
|
||||||
|
;
|
||||||
char text[7];
|
char text[7];
|
||||||
textstr.toCharArray(text, 7);
|
textstr.toCharArray(text, 7);
|
||||||
tft.setTextSize(8, 8);
|
tft.setTextSize(8, 8);
|
||||||
@ -310,6 +321,7 @@ void update_page_driver() {
|
|||||||
left_box_value = (Value)(left_box_value + 1);
|
left_box_value = (Value)(left_box_value + 1);
|
||||||
}
|
}
|
||||||
left_box.update_label(get_label(left_box_value));
|
left_box.update_label(get_label(left_box_value));
|
||||||
|
}
|
||||||
if (Stw_data.button1_rises > 0) {
|
if (Stw_data.button1_rises > 0) {
|
||||||
Stw_data.button1_rises--;
|
Stw_data.button1_rises--;
|
||||||
if (left_box_value == VAL_FIRST_LEFT_BOX) {
|
if (left_box_value == VAL_FIRST_LEFT_BOX) {
|
||||||
@ -330,13 +342,27 @@ void update_page_driver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void redraw_page_testing() {
|
void redraw_page_testing() {
|
||||||
|
tft.setTextFont(EA_FONT7X12);
|
||||||
|
tft.setTextSize(2, 2);
|
||||||
|
for (int i = 0; i <= min(VAL_LAST, 9); i++) {
|
||||||
|
String text = get_label((Value)i) + ":";
|
||||||
|
int x = (i < 10) ? 10 : 170;
|
||||||
|
tft.drawText(x, (i % 10) * 24, 'L', text.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_page_testing() {}
|
void update_page_testing() {
|
||||||
|
// tft.setTextFont(EA_FONT7X12);
|
||||||
|
// tft.setTextSize(2, 2);
|
||||||
|
// for (int i = 0; i < min(VALUES, 20); i++) {
|
||||||
|
// String text = get_value((Value) i);
|
||||||
|
// int x = (i < 10) ? 10 : 170;
|
||||||
|
// tft.drawText(10, (i % 10) * 24, 'L', text.c_str());
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
DataBox::DataBox(int x1, int y1, int x2, int y2, int text_x, int text_y, int font,
|
DataBox::DataBox(int x1, int y1, int x2, int y2, int text_x, int text_y,
|
||||||
int size_x, int size_y, uint8_t justification)
|
int font, int size_x, int size_y, uint8_t justification)
|
||||||
: x1{x1}, y1{y1}, x2{x2}, y2{y2}, text_x{text_x}, text_y{text_y},
|
: x1{x1}, y1{y1}, x2{x2}, y2{y2}, text_x{text_x}, text_y{text_y},
|
||||||
font{font}, size_x{size_x}, size_y{size_y},
|
font{font}, size_x{size_x}, size_y{size_y},
|
||||||
justification{justification}, value{""}, label{""} {}
|
justification{justification}, value{""}, label{""} {}
|
||||||
@ -377,8 +403,11 @@ void DataBox::redraw_label() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TireTempBox::TireTempBox(int x1, int y1, int x2, int y2, int text_x, int text_y,
|
TireTempBox::TireTempBox(int x1, int y1, int x2, int y2, int text_x, int text_y,
|
||||||
int font, int size_x, int size_y, uint8_t justification)
|
int font, int size_x, int size_y,
|
||||||
: DataBox{x1, y1, x2, y2, text_x, text_y, font, size_x, size_y, justification}, num_value{-1} {}
|
uint8_t justification)
|
||||||
|
: DataBox{x1, y1, x2, y2, text_x,
|
||||||
|
text_y, font, size_x, size_y, justification},
|
||||||
|
num_value{-1} {}
|
||||||
|
|
||||||
void TireTempBox::update_value(int val_new) {
|
void TireTempBox::update_value(int val_new) {
|
||||||
if (val_new != num_value) {
|
if (val_new != num_value) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "EDIPTFT.h"
|
#include "EDIPTFT.h"
|
||||||
#include "FT_2018_STW_CAN.h"
|
|
||||||
#include "FT18_STW_INIT.h"
|
#include "FT18_STW_INIT.h"
|
||||||
|
#include "FT_2018_STW_CAN.h"
|
||||||
#ifndef FT18_STW_DISPLAY_h
|
#ifndef FT18_STW_DISPLAY_h
|
||||||
#define FT18_STW_DISPLAY_h
|
#define FT18_STW_DISPLAY_h
|
||||||
|
|
||||||
@ -12,7 +12,6 @@
|
|||||||
#define reset 43
|
#define reset 43
|
||||||
#define writeprotect 52
|
#define writeprotect 52
|
||||||
|
|
||||||
|
|
||||||
#define POIL_ALARM_THRESH ((uint32_t)(0.1 / 0.0514))
|
#define POIL_ALARM_THRESH ((uint32_t)(0.1 / 0.0514))
|
||||||
#define POIL_ALARM_TIME 20000 // ms
|
#define POIL_ALARM_TIME 20000 // ms
|
||||||
#define TMOT_ALARM_THRESH (40 + 105)
|
#define TMOT_ALARM_THRESH (40 + 105)
|
||||||
@ -26,10 +25,27 @@ enum DisplayPage {PAGE_DRIVER, PAGE_TESTING};
|
|||||||
#define DISPLAY_PAGES 2
|
#define DISPLAY_PAGES 2
|
||||||
|
|
||||||
enum Value {
|
enum Value {
|
||||||
VAL_GEAR, VAL_RPM, VAL_TT_FL, VAL_TT_FR, VAL_TT_RL, VAL_TT_RR, VAL_LAPTIME,
|
VAL_GEAR,
|
||||||
VAL_UBATT, VAL_TMOT, VAL_TAIR, VAL_TOIL, VAL_ERR_TYPE, VAL_PWAT, VAL_POIL,
|
VAL_RPM,
|
||||||
VAL_PBF, VAL_PBR, VAL_SPEED_FL, VAL_SPEED_FR, VAL_SPEED,
|
VAL_TT_FL,
|
||||||
VAL_FIRST_LEFT_BOX = VAL_LAPTIME, VAL_LAST = VAL_SPEED
|
VAL_TT_FR,
|
||||||
|
VAL_TT_RL,
|
||||||
|
VAL_TT_RR,
|
||||||
|
VAL_LAPTIME,
|
||||||
|
VAL_UBATT,
|
||||||
|
VAL_TMOT,
|
||||||
|
VAL_TAIR,
|
||||||
|
VAL_TOIL,
|
||||||
|
VAL_ERR_TYPE,
|
||||||
|
VAL_PWAT,
|
||||||
|
VAL_POIL,
|
||||||
|
VAL_PBF,
|
||||||
|
VAL_PBR,
|
||||||
|
VAL_SPEED_FL,
|
||||||
|
VAL_SPEED_FR,
|
||||||
|
VAL_SPEED,
|
||||||
|
VAL_FIRST_LEFT_BOX = VAL_LAPTIME,
|
||||||
|
VAL_LAST = VAL_SPEED
|
||||||
};
|
};
|
||||||
String get_value(Value val);
|
String get_value(Value val);
|
||||||
String get_label(Value val);
|
String get_label(Value val);
|
||||||
@ -44,7 +60,8 @@ void alarm(String text);
|
|||||||
|
|
||||||
bool check_alarms();
|
bool check_alarms();
|
||||||
bool check_enc_displays();
|
bool check_enc_displays();
|
||||||
bool check_display(uint8_t& val_old, uint8_t val_new, bool& active, uint32_t& begin, const String& title);
|
bool check_display(uint8_t& val_old, uint8_t val_new, bool& active,
|
||||||
|
uint32_t& begin, const String& title);
|
||||||
|
|
||||||
void redraw_page_driver();
|
void redraw_page_driver();
|
||||||
void update_page_driver();
|
void update_page_driver();
|
||||||
@ -80,8 +97,8 @@ protected:
|
|||||||
|
|
||||||
class TireTempBox : public DataBox {
|
class TireTempBox : public DataBox {
|
||||||
public:
|
public:
|
||||||
TireTempBox(int x1, int y1, int x2, int y2, int text_x, int text_y,
|
TireTempBox(int x1, int y1, int x2, int y2, int text_x, int text_y, int font,
|
||||||
int font, int size_x, int size_y, uint8_t justification);
|
int size_x, int size_y, uint8_t justification);
|
||||||
|
|
||||||
void update_value(int val_new);
|
void update_value(int val_new);
|
||||||
|
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
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
|
volatile vehicle_data_type Vehicle_data = {0}; // alles mit 0 initialisieren
|
||||||
bool enc1PinALast, enc1PinANow, enc2PinALast, enc2PinANow;
|
bool enc1PinALast, enc1PinANow, enc2PinALast, enc2PinANow;
|
||||||
int led[] = {led1,led2,led3,led4,led5,led6,led7,led8,led9,led10,led11,led12,led13,led14,led15,led16};
|
int led[] = {led1, led2, led3, led4, led5, led6, led7, led8,
|
||||||
|
led9, led10, led11, led12, led13, led14, led15, led16};
|
||||||
bool entprell;
|
bool entprell;
|
||||||
int buttons[] = {button1,button2,button3,button4,button5,button6,enc1PinS,enc2PinS};
|
int buttons[] = {button1, button2, button3, button4,
|
||||||
|
button5, button6, enc1PinS, enc2PinS};
|
||||||
constexpr size_t N_BUTTONS = sizeof(buttons) / sizeof(buttons[0]);
|
constexpr size_t N_BUTTONS = sizeof(buttons) / sizeof(buttons[0]);
|
||||||
Bounce2::Button debouncer[N_BUTTONS];
|
Bounce2::Button debouncer[N_BUTTONS];
|
||||||
double val = 0;
|
double val = 0;
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
#define enc2PinB 41
|
#define enc2PinB 41
|
||||||
#define enc2PinS 39
|
#define enc2PinS 39
|
||||||
|
|
||||||
|
|
||||||
// define Drehzahlgrenzen TODOOOO
|
// define Drehzahlgrenzen TODOOOO
|
||||||
#define RPM_THRES_1 1000
|
#define RPM_THRES_1 1000
|
||||||
#define RPM_THRES_2 6000
|
#define RPM_THRES_2 6000
|
||||||
@ -45,13 +44,11 @@
|
|||||||
#define RPM_THRES_9 20000
|
#define RPM_THRES_9 20000
|
||||||
#define RPM_THRES_10 20000
|
#define RPM_THRES_10 20000
|
||||||
|
|
||||||
|
|
||||||
void set_pins(void);
|
void set_pins(void);
|
||||||
void read_buttons(void);
|
void read_buttons(void);
|
||||||
void read_rotary(void); // read rotary switches
|
void read_rotary(void); // read rotary switches
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
uint8_t Stw_shift_up; // 1 Bit 0
|
uint8_t Stw_shift_up; // 1 Bit 0
|
||||||
uint8_t Stw_shift_down; // 1 Bit 1
|
uint8_t Stw_shift_down; // 1 Bit 1
|
||||||
uint8_t Stw_neutral; // 1 Bit 2
|
uint8_t Stw_neutral; // 1 Bit 2
|
||||||
@ -60,9 +57,11 @@ typedef struct
|
|||||||
uint8_t buttonState4; // 1 Bit 5
|
uint8_t buttonState4; // 1 Bit 5
|
||||||
// bool CAN_toggle;
|
// bool CAN_toggle;
|
||||||
// bool CAN_check;
|
// bool CAN_check;
|
||||||
//uint8_t i; //Index linker Drehschalter
|
// uint8_t i; //Index
|
||||||
|
// linker Drehschalter
|
||||||
uint8_t buttonStateEnc1; // button
|
uint8_t buttonStateEnc1; // button
|
||||||
//uint8_t br; //test mode : mittlere Drehschalter position
|
// uint8_t br; //test mode : mittlere
|
||||||
|
// Drehschalter position
|
||||||
uint8_t buttonStateEnc2; // button
|
uint8_t buttonStateEnc2; // button
|
||||||
uint8_t displayindex; // index für Displayanzeige
|
uint8_t displayindex; // index für Displayanzeige
|
||||||
uint8_t error_type; // Extrainfos über Error-LED
|
uint8_t error_type; // Extrainfos über Error-LED
|
||||||
@ -75,8 +74,7 @@ typedef struct
|
|||||||
uint8_t enc2_rises;
|
uint8_t enc2_rises;
|
||||||
} stw_data_type;
|
} stw_data_type;
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
uint8_t e_thro; // E-Drossel
|
uint8_t e_thro; // E-Drossel
|
||||||
uint8_t g_auto; // Auto-Shift
|
uint8_t g_auto; // Auto-Shift
|
||||||
uint8_t gear; // Gang
|
uint8_t gear; // Gang
|
||||||
@ -97,9 +95,7 @@ typedef struct
|
|||||||
|
|
||||||
} vehicle_data_type;
|
} vehicle_data_type;
|
||||||
|
|
||||||
|
|
||||||
extern volatile stw_data_type Stw_data;
|
extern volatile stw_data_type Stw_data;
|
||||||
extern volatile vehicle_data_type Vehicle_data;
|
extern volatile vehicle_data_type Vehicle_data;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,8 +1,8 @@
|
|||||||
|
#include "FT18e_STW_DISPLAY.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "EDIPTFT.h"
|
#include "EDIPTFT.h"
|
||||||
#include "FT_2018e_STW_CAN.h"
|
|
||||||
#include "FT18e_STW_INIT.h"
|
#include "FT18e_STW_INIT.h"
|
||||||
#include "FT18e_STW_DISPLAY.h"
|
#include "FT_2018e_STW_CAN.h"
|
||||||
|
|
||||||
EDIPTFT tft(true, false);
|
EDIPTFT tft(true, false);
|
||||||
String bezeichnungen[] = {"Batterieleistung", "Moment", "Batterietemp"};
|
String bezeichnungen[] = {"Batterieleistung", "Moment", "Batterietemp"};
|
||||||
@ -26,7 +26,8 @@ uint8_t trccounter; // = Stw_data.trc;
|
|||||||
uint8_t modecounter; // = Stw_data.mode;
|
uint8_t modecounter; // = Stw_data.mode;
|
||||||
bool trctimer;
|
bool trctimer;
|
||||||
bool modetimer;
|
bool modetimer;
|
||||||
int led_s[] = {led1, led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13, led14, led15, led16};
|
int led_s[] = {led1, led2, led3, led4, led5, led6, led7, led8,
|
||||||
|
led9, led10, led11, led12, led13, led14, led15, led16};
|
||||||
unsigned long poiltimer;
|
unsigned long poiltimer;
|
||||||
unsigned long tmottimer;
|
unsigned long tmottimer;
|
||||||
unsigned long toiltimer;
|
unsigned long toiltimer;
|
||||||
@ -34,8 +35,7 @@ bool poilbool = true;
|
|||||||
bool tmotbool = true;
|
bool tmotbool = true;
|
||||||
bool toilbool = true;
|
bool toilbool = true;
|
||||||
|
|
||||||
void init_display()
|
void init_display() {
|
||||||
{
|
|
||||||
pinMode(writeprotect, OUTPUT);
|
pinMode(writeprotect, OUTPUT);
|
||||||
digitalWrite(writeprotect, HIGH);
|
digitalWrite(writeprotect, HIGH);
|
||||||
pinMode(reset, OUTPUT);
|
pinMode(reset, OUTPUT);
|
||||||
@ -48,8 +48,8 @@ void init_display()
|
|||||||
digitalWrite(MISO, HIGH);
|
digitalWrite(MISO, HIGH);
|
||||||
digitalWrite(reset, LOW);
|
digitalWrite(reset, LOW);
|
||||||
// edip.smallProtoSelect(7);
|
// edip.smallProtoSelect(7);
|
||||||
//edip.setNewColor(EA_GREY, 0xe3, 0xe3,0xe3); // redefine r-g-b-values of EA_GREY
|
// edip.setNewColor(EA_GREY, 0xe3, 0xe3,0xe3); // redefine r-g-b-values
|
||||||
//edip.drawImage(0,50,FASTTUBE_LOGO_PNG);
|
// of EA_GREY edip.drawImage(0,50,FASTTUBE_LOGO_PNG);
|
||||||
digitalWrite(reset, HIGH);
|
digitalWrite(reset, HIGH);
|
||||||
tft.begin(115200); // start display communication
|
tft.begin(115200); // start display communication
|
||||||
/*int h = 20;
|
/*int h = 20;
|
||||||
@ -70,24 +70,15 @@ void init_display()
|
|||||||
// delay(2000);
|
// delay(2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
double get_value(int a)
|
double get_value(int a) { return 0; }
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void update_display()
|
void update_display() {
|
||||||
{
|
if (!tft.disconnected) {
|
||||||
if (!tft.disconnected)
|
|
||||||
{
|
|
||||||
tft.cursorOn(false);
|
tft.cursorOn(false);
|
||||||
if (modealt != Stw_data.mode || modetimer == true)
|
if (modealt != Stw_data.mode || modetimer == true) {
|
||||||
{
|
|
||||||
display_mode();
|
display_mode();
|
||||||
}
|
} else {
|
||||||
else
|
if (clearcounter >= 56) {
|
||||||
{
|
|
||||||
if (clearcounter >= 56)
|
|
||||||
{
|
|
||||||
tft.clear();
|
tft.clear();
|
||||||
clearcounter = 0;
|
clearcounter = 0;
|
||||||
}
|
}
|
||||||
@ -96,10 +87,8 @@ void update_display()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_mode()
|
void display_mode() {
|
||||||
{
|
if (modealt != Stw_data.mode) {
|
||||||
if (modealt != Stw_data.mode)
|
|
||||||
{
|
|
||||||
tft.clear();
|
tft.clear();
|
||||||
tft.setTextSize(6, 8);
|
tft.setTextSize(6, 8);
|
||||||
tft.setDisplayColor(EA_WHITE, EA_RED);
|
tft.setDisplayColor(EA_WHITE, EA_RED);
|
||||||
@ -116,54 +105,43 @@ void display_mode()
|
|||||||
modecounter = 0;
|
modecounter = 0;
|
||||||
modealt = Stw_data.mode;
|
modealt = Stw_data.mode;
|
||||||
modetimer = true;
|
modetimer = true;
|
||||||
}
|
} else if (modecounter >= 255) {
|
||||||
else if (modecounter >= 255)
|
|
||||||
{
|
|
||||||
tft.setDisplayColor(EA_WHITE, EA_BLACK);
|
tft.setDisplayColor(EA_WHITE, EA_BLACK);
|
||||||
tft.setTextColor(EA_WHITE, EA_BLACK);
|
tft.setTextColor(EA_WHITE, EA_BLACK);
|
||||||
tft.clear();
|
tft.clear();
|
||||||
modetimer = false;
|
modetimer = false;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
modecounter += 1;
|
modecounter += 1;
|
||||||
delay(5);
|
delay(5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void alarm(String textstr)
|
void alarm(String textstr) {
|
||||||
{
|
|
||||||
uint8_t x = 1;
|
uint8_t x = 1;
|
||||||
;
|
;
|
||||||
char text[7];
|
char text[7];
|
||||||
textstr.toCharArray(text, 7);
|
textstr.toCharArray(text, 7);
|
||||||
tft.setTextSize(8, 8);
|
tft.setTextSize(8, 8);
|
||||||
while (x == 1)
|
while (x == 1) {
|
||||||
{
|
if (!tft.disconnected) {
|
||||||
if (!tft.disconnected)
|
|
||||||
{
|
|
||||||
tft.setTextColor(EA_BLACK, EA_RED);
|
tft.setTextColor(EA_BLACK, EA_RED);
|
||||||
tft.fillDisplayColor(EA_RED);
|
tft.fillDisplayColor(EA_RED);
|
||||||
tft.drawText(5, 68, 'L', text);
|
tft.drawText(5, 68, 'L', text);
|
||||||
}
|
}
|
||||||
for (int j = 0; j < 16; j++)
|
for (int j = 0; j < 16; j++) {
|
||||||
{
|
|
||||||
digitalWrite(led_s[j], HIGH);
|
digitalWrite(led_s[j], HIGH);
|
||||||
}
|
}
|
||||||
delay(100);
|
delay(100);
|
||||||
if (!tft.disconnected)
|
if (!tft.disconnected) {
|
||||||
{
|
|
||||||
tft.setTextColor(EA_BLACK, EA_WHITE);
|
tft.setTextColor(EA_BLACK, EA_WHITE);
|
||||||
tft.fillDisplayColor(EA_WHITE);
|
tft.fillDisplayColor(EA_WHITE);
|
||||||
tft.drawText(5, 68, 'L', text);
|
tft.drawText(5, 68, 'L', text);
|
||||||
}
|
}
|
||||||
for (int j = 0; j < 16; j++)
|
for (int j = 0; j < 16; j++) {
|
||||||
{
|
|
||||||
digitalWrite(led_s[j], LOW);
|
digitalWrite(led_s[j], LOW);
|
||||||
}
|
}
|
||||||
delay(100);
|
delay(100);
|
||||||
if (Stw_data.button_ll & Stw_data.button_rr)
|
if (Stw_data.button_ll & Stw_data.button_rr) {
|
||||||
{
|
|
||||||
x = 0;
|
x = 0;
|
||||||
tft.setTextColor(EA_WHITE, EA_BLACK);
|
tft.setTextColor(EA_WHITE, EA_BLACK);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "EDIPTFT.h"
|
#include "EDIPTFT.h"
|
||||||
#include "FT_2018e_STW_CAN.h"
|
|
||||||
#include "FT18e_STW_INIT.h"
|
#include "FT18e_STW_INIT.h"
|
||||||
|
#include "FT_2018e_STW_CAN.h"
|
||||||
#ifndef FT18e_STW_DISPLAY_h
|
#ifndef FT18e_STW_DISPLAY_h
|
||||||
#define FT18e_STW_DISPLAY_h
|
#define FT18e_STW_DISPLAY_h
|
||||||
|
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
#include "Arduino.h"
|
|
||||||
#include "FT18e_STW_INIT.h"
|
#include "FT18e_STW_INIT.h"
|
||||||
|
#include "Arduino.h"
|
||||||
#include "Bounce2.h"
|
#include "Bounce2.h"
|
||||||
#include "RotaryEncoder.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
|
volatile vehicle_data_type Vehicle_data = {0}; // alles mit 0 initialisieren
|
||||||
bool enc1PinALast, enc1PinANow, enc2PinALast, enc2PinANow;
|
bool enc1PinALast, enc1PinANow, enc2PinALast, enc2PinANow;
|
||||||
int led[] = {led1, led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13, led14, led15, led16};
|
int led[] = {led1, led2, led3, led4, led5, led6, led7, led8,
|
||||||
|
led9, led10, led11, led12, led13, led14, led15, led16};
|
||||||
bool entprell;
|
bool entprell;
|
||||||
int buttons[] = {PIN_BUTTON_LL, PIN_BUTTON_LR, PIN_BUTTON_RL, PIN_BUTTON_RR, enc1PinS, enc2PinS};
|
int buttons[] = {PIN_BUTTON_LL, PIN_BUTTON_LR, PIN_BUTTON_RL,
|
||||||
|
PIN_BUTTON_RR, enc1PinS, enc2PinS};
|
||||||
Bounce debouncer[8];
|
Bounce debouncer[8];
|
||||||
double val = 0;
|
double val = 0;
|
||||||
double val2 = 0;
|
double val2 = 0;
|
||||||
@ -18,10 +20,8 @@ RotaryEncoder encoder2(enc2PinA, enc2PinB, 1, 1, 50);
|
|||||||
// functions
|
// functions
|
||||||
///////////////////////////////////////////////////
|
///////////////////////////////////////////////////
|
||||||
|
|
||||||
void set_pins()
|
void set_pins() {
|
||||||
{
|
for (int thisLed = 0; thisLed < sizeof(led) / sizeof(int); thisLed++) {
|
||||||
for (int thisLed = 0; thisLed < sizeof(led) / sizeof(int); thisLed++)
|
|
||||||
{
|
|
||||||
pinMode(led[thisLed], OUTPUT);
|
pinMode(led[thisLed], OUTPUT);
|
||||||
}
|
}
|
||||||
pinMode(l, OUTPUT);
|
pinMode(l, OUTPUT);
|
||||||
@ -42,40 +42,30 @@ void set_pins()
|
|||||||
enc1PinANow = LOW;
|
enc1PinANow = LOW;
|
||||||
enc2PinALast = LOW;
|
enc2PinALast = LOW;
|
||||||
enc2PinANow = LOW;
|
enc2PinANow = LOW;
|
||||||
for (int i = 0; i < sizeof(buttons) / sizeof(*buttons); i++)
|
for (int i = 0; i < sizeof(buttons) / sizeof(*buttons); i++) {
|
||||||
{
|
|
||||||
pinMode(buttons[i], INPUT);
|
pinMode(buttons[i], INPUT);
|
||||||
debouncer[i].attach(buttons[i]);
|
debouncer[i].attach(buttons[i]);
|
||||||
debouncer[i].interval(10);
|
debouncer[i].interval(10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_buttons()
|
void read_buttons() {
|
||||||
{
|
|
||||||
Stw_data.button_ll = digitalRead(PIN_BUTTON_LL);
|
Stw_data.button_ll = digitalRead(PIN_BUTTON_LL);
|
||||||
Stw_data.button_lr = digitalRead(PIN_BUTTON_LR);
|
Stw_data.button_lr = digitalRead(PIN_BUTTON_LR);
|
||||||
Stw_data.button_rl = digitalRead(PIN_BUTTON_RL);
|
Stw_data.button_rl = digitalRead(PIN_BUTTON_RL);
|
||||||
Stw_data.button_rr = digitalRead(PIN_BUTTON_RR);
|
Stw_data.button_rr = digitalRead(PIN_BUTTON_RR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_rotary()
|
void read_rotary() {
|
||||||
{
|
|
||||||
int enc2 = encoder2.readEncoder();
|
int enc2 = encoder2.readEncoder();
|
||||||
if (enc2 != 0)
|
if (enc2 != 0) {
|
||||||
{
|
|
||||||
val2 = val2 + 0.5 * enc2;
|
val2 = val2 + 0.5 * enc2;
|
||||||
if (val2 == 1 or val2 == -1)
|
if (val2 == 1 or val2 == -1) {
|
||||||
{
|
if ((Stw_data.mode == 1 or Stw_data.mode == 0) and enc2 < 0) {
|
||||||
if ((Stw_data.mode == 1 or Stw_data.mode == 0) and enc2 < 0)
|
|
||||||
{
|
|
||||||
Stw_data.mode = 5;
|
Stw_data.mode = 5;
|
||||||
}
|
} else if (Stw_data.mode == 5 and enc2 > 0) {
|
||||||
else if (Stw_data.mode == 5 and enc2 > 0)
|
|
||||||
{
|
|
||||||
Stw_data.mode = 1;
|
Stw_data.mode = 1;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
Stw_data.mode = Stw_data.mode + enc2;
|
Stw_data.mode = Stw_data.mode + enc2;
|
||||||
}
|
}
|
||||||
val2 = 0;
|
val2 = 0;
|
||||||
|
@ -51,8 +51,7 @@ void set_pins(void);
|
|||||||
void read_buttons(void);
|
void read_buttons(void);
|
||||||
void read_rotary(void); // read rotary switches
|
void read_rotary(void); // read rotary switches
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
bool button_ll; // Left side, left button
|
bool button_ll; // Left side, left button
|
||||||
bool button_lr; // Left side, right button
|
bool button_lr; // Left side, right button
|
||||||
bool button_rl; // Right side, left button
|
bool button_rl; // Right side, left button
|
||||||
@ -63,8 +62,7 @@ typedef struct
|
|||||||
|
|
||||||
} stw_data_type;
|
} stw_data_type;
|
||||||
|
|
||||||
struct InverterData
|
struct InverterData {
|
||||||
{
|
|
||||||
bool ready;
|
bool ready;
|
||||||
bool derating;
|
bool derating;
|
||||||
bool warning;
|
bool warning;
|
||||||
@ -75,8 +73,7 @@ struct InverterData
|
|||||||
bool ts_active;
|
bool ts_active;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
|
||||||
uint16_t u_cell_min; // Minimale Zellspannung
|
uint16_t u_cell_min; // Minimale Zellspannung
|
||||||
uint16_t u_batt; // Batteriespannung (pre-AIR-voltage)
|
uint16_t u_batt; // Batteriespannung (pre-AIR-voltage)
|
||||||
int16_t t_mot_l; // Motor-Wasser-Temperatur Links
|
int16_t t_mot_l; // Motor-Wasser-Temperatur Links
|
||||||
|
@ -2,28 +2,33 @@
|
|||||||
FT_2018_STW_CAN.cpp
|
FT_2018_STW_CAN.cpp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "FT_2018_STW_CAN.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "DueTimer.h"
|
#include "DueTimer.h"
|
||||||
#include "due_can.h"
|
|
||||||
#include "FT_2018_STW_CAN.h"
|
|
||||||
#include "FT18_STW_INIT.h"
|
#include "FT18_STW_INIT.h"
|
||||||
|
#include "due_can.h"
|
||||||
|
|
||||||
CAN_FRAME can_0_msg;
|
CAN_FRAME can_0_msg;
|
||||||
// can_1_msg.id = 0x110;
|
// can_1_msg.id = 0x110;
|
||||||
int can_0_temp_data = 0;
|
int can_0_temp_data = 0;
|
||||||
int leds[] = {led1,led2,led3,led4,led5,led6,led7,led8,led9,led10,led11,led12,led13,led14,led15,led16};
|
int leds[] = {led1, led2, led3, led4, led5, led6, led7, led8,
|
||||||
|
led9, led10, led11, led12, led13, led14, led15, led16};
|
||||||
|
|
||||||
void Init_Can_0() {
|
void Init_Can_0() {
|
||||||
Can0.begin(1000000); // set CAN0 baud to 1kbit/s and don`t use enable pin!
|
Can0.begin(1000000); // set CAN0 baud to 1kbit/s and don`t use enable pin!
|
||||||
Can0.setNumTXBoxes(1); // reserves mailbox 0 for tx only 8 mailboxes are available (the other 7 mailboxes are for rx)
|
Can0.setNumTXBoxes(1); // reserves mailbox 0 for tx only 8 mailboxes are
|
||||||
Can0.watchFor(0x502); // set CAN RX filter for ID 0x502 and reserves mailbox 1 for rx
|
// available (the other 7 mailboxes are for rx)
|
||||||
|
Can0.watchFor(
|
||||||
|
0x502); // set CAN RX filter for ID 0x502 and reserves mailbox 1 for rx
|
||||||
Can0.watchFor(0x504);
|
Can0.watchFor(0x504);
|
||||||
Can0.watchFor(0x500);
|
Can0.watchFor(0x500);
|
||||||
Can0.watchFor(0x773); // set CAN RX filter for ID 0x773 and reserves mailbox 3 for rx
|
Can0.watchFor(
|
||||||
|
0x773); // set CAN RX filter for ID 0x773 and reserves mailbox 3 for rx
|
||||||
Can0.watchFor(0x775);
|
Can0.watchFor(0x775);
|
||||||
// Can0.watchFor(0x777); // set CAN RX filter for ID 0x777 and reserves mailbox 5 for rx
|
// Can0.watchFor(0x777); // set CAN RX filter
|
||||||
Can0.watchFor(0x779); // set CAN RX filter for ID 0x779 and reserves mailbox 6 for rx
|
//for ID 0x777 and reserves mailbox 5 for rx
|
||||||
|
Can0.watchFor(
|
||||||
|
0x779); // set CAN RX filter for ID 0x779 and reserves mailbox 6 for rx
|
||||||
Can0.watchFor(0x77A);
|
Can0.watchFor(0x77A);
|
||||||
Can0.setGeneralCallback(Receive_Can_0);
|
Can0.setGeneralCallback(Receive_Can_0);
|
||||||
Timer3.attachInterrupt(Send_0x110); // set send interrupt
|
Timer3.attachInterrupt(Send_0x110); // set send interrupt
|
||||||
@ -62,7 +67,10 @@ void Receive_Can_0(CAN_FRAME *temp_message){
|
|||||||
switch (temp_message->id) {
|
switch (temp_message->id) {
|
||||||
// g_auto
|
// g_auto
|
||||||
case 0x502: { // eDrossel error bit
|
case 0x502: { // eDrossel error bit
|
||||||
Vehicle_data.e_thro = (temp_message->data.byte[0] & 0x80) | (temp_message->data.byte[0] & 0x40) | (temp_message->data.byte[0] & 0x20) | (temp_message->data.byte[0] & 0x10); // bit 4-7
|
Vehicle_data.e_thro = (temp_message->data.byte[0] & 0x80) |
|
||||||
|
(temp_message->data.byte[0] & 0x40) |
|
||||||
|
(temp_message->data.byte[0] & 0x20) |
|
||||||
|
(temp_message->data.byte[0] & 0x10); // bit 4-7
|
||||||
|
|
||||||
if (temp_message->data.byte[0] & 0x80) {
|
if (temp_message->data.byte[0] & 0x80) {
|
||||||
Stw_data.error_type = 1; //"pc_error";
|
Stw_data.error_type = 1; //"pc_error";
|
||||||
@ -83,12 +91,15 @@ void Receive_Can_0(CAN_FRAME *temp_message){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x504: { // autoshift+gear
|
case 0x504: { // autoshift+gear
|
||||||
//Vehicle_data.g_auto = (temp_message->data.byte[1]) >> 4;
|
// Vehicle_data.g_auto =
|
||||||
|
// (temp_message->data.byte[1])
|
||||||
|
// >> 4;
|
||||||
Vehicle_data.gear = (temp_message->data.byte[1]) >> 5;
|
Vehicle_data.gear = (temp_message->data.byte[1]) >> 5;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x773: { // rpm
|
case 0x773: { // rpm
|
||||||
Vehicle_data.revol = (temp_message->data.byte[4] | temp_message->data.byte[3] << 8);
|
Vehicle_data.revol =
|
||||||
|
(temp_message->data.byte[4] | temp_message->data.byte[3] << 8);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 0x779: { // battery voltage
|
case 0x779: { // battery voltage
|
||||||
@ -96,28 +107,29 @@ void Receive_Can_0(CAN_FRAME *temp_message){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*case 0x77A: // revolution limit bit
|
/*case 0x77A: // revolution limit bit
|
||||||
Vehicle_data.rev_lim = (temp_message->data.byte[3] & 0x20) >> 4;
|
Vehicle_data.rev_lim =
|
||||||
|
(temp_message->data.byte[3] & 0x20) >> 4;
|
||||||
switch(temp_message->data.byte[0]) {
|
switch(temp_message->data.byte[0]) {
|
||||||
case 0x02: // temp. intercooler
|
case 0x02: // temp. intercooler
|
||||||
Vehicle_data.t_air = temp_message->data.byte[7];
|
Vehicle_data.t_air =
|
||||||
break;
|
temp_message->data.byte[7]; break; case 0x05: // temp. water
|
||||||
case 0x05: // temp. water
|
Vehicle_data.t_mot =
|
||||||
Vehicle_data.t_mot = temp_message->data.byte[4];
|
temp_message->data.byte[4]; break; case 0x04: // temp. oil
|
||||||
break;
|
Vehicle_data.t_oil =
|
||||||
case 0x04: // temp. oil
|
temp_message->data.byte[5]; case 0x01: {
|
||||||
Vehicle_data.t_oil = temp_message->data.byte[5];
|
Vehicle_data.p_wat =
|
||||||
case 0x01: {
|
temp_message->data.byte[6]; Vehicle_data.p_fuel =
|
||||||
Vehicle_data.p_wat = temp_message->data.byte[6];
|
temp_message->data.byte[7]; Vehicle_data.p_oil =
|
||||||
Vehicle_data.p_fuel = temp_message->data.byte[7];
|
temp_message->data.byte[5]; break;
|
||||||
Vehicle_data.p_oil = temp_message->data.byte[5];
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;*/
|
break;*/
|
||||||
case 0x77A: { // temp und p
|
case 0x77A: { // temp und p
|
||||||
//g_ms4_idle_b = (temp_message->data.byte[2] & 0b10000000) >> 7;
|
// g_ms4_idle_b = (temp_message->data.byte[2] &
|
||||||
//g_ms4_engine_status = (temp_message->data.byte[3] & 0b01000000) >> 6;
|
// 0b10000000)
|
||||||
//g_ms4_ignoff_b = (temp_message->data.byte[3] & 0b10000000) >> 7;
|
// >> 7; g_ms4_engine_status = (temp_message->data.byte[3] &
|
||||||
|
// 0b01000000) >> 6; g_ms4_ignoff_b =
|
||||||
|
// (temp_message->data.byte[3] & 0b10000000) >> 7;
|
||||||
// Serial.println("CAN 77A");
|
// Serial.println("CAN 77A");
|
||||||
// for (int i = 0; i < 8; i++) {
|
// for (int i = 0; i < 8; i++) {
|
||||||
// Serial.print('[');
|
// Serial.print('[');
|
||||||
@ -129,14 +141,11 @@ void Receive_Can_0(CAN_FRAME *temp_message){
|
|||||||
if (temp_message->data.byte[0] == 1) {
|
if (temp_message->data.byte[0] == 1) {
|
||||||
Vehicle_data.p_oil = temp_message->data.byte[5];
|
Vehicle_data.p_oil = temp_message->data.byte[5];
|
||||||
Vehicle_data.p_fuel = temp_message->data.byte[7];
|
Vehicle_data.p_fuel = temp_message->data.byte[7];
|
||||||
}
|
} else if (temp_message->data.byte[0] == 2) {
|
||||||
else if ( temp_message->data.byte[0] == 2){
|
|
||||||
Vehicle_data.t_air = temp_message->data.byte[7];
|
Vehicle_data.t_air = temp_message->data.byte[7];
|
||||||
}
|
} else if (temp_message->data.byte[0] == 4) {
|
||||||
else if ( temp_message->data.byte[0] == 4){
|
|
||||||
Vehicle_data.t_oil = temp_message->data.byte[5];
|
Vehicle_data.t_oil = temp_message->data.byte[5];
|
||||||
}
|
} else if (temp_message->data.byte[0] == 5) {
|
||||||
else if ( temp_message->data.byte[0] == 5){
|
|
||||||
Vehicle_data.t_mot = temp_message->data.byte[4];
|
Vehicle_data.t_mot = temp_message->data.byte[4];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -148,8 +157,8 @@ void Receive_Can_0(CAN_FRAME *temp_message){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*case 0x777:{//m4_gear
|
/*case 0x777:{//m4_gear
|
||||||
Vehicle_data.gear = temp_message->data.byte[0];
|
Vehicle_data.gear =
|
||||||
break;
|
temp_message->data.byte[0]; break;
|
||||||
}*/
|
}*/
|
||||||
case 0x500: {
|
case 0x500: {
|
||||||
Vehicle_data.p_brake_front = temp_message->data.byte[1];
|
Vehicle_data.p_brake_front = temp_message->data.byte[1];
|
||||||
@ -171,7 +180,9 @@ void update_LED(){
|
|||||||
// alle Werte als Hex-Werte angegeben
|
// alle Werte als Hex-Werte angegeben
|
||||||
bool t_oil = (Vehicle_data.t_oil - 40) >= 0x96; // 150°C temp.oil
|
bool t_oil = (Vehicle_data.t_oil - 40) >= 0x96; // 150°C temp.oil
|
||||||
bool t_air = (Vehicle_data.t_air - 40) >= 0x3C; // 60°C temp.llk
|
bool t_air = (Vehicle_data.t_air - 40) >= 0x3C; // 60°C temp.llk
|
||||||
bool t_mot = ((Vehicle_data.t_mot - 40) >= 0x69) and ((Vehicle_data.t_mot - 40)!=0xC8); // 105°C temp.water und !=200
|
bool t_mot =
|
||||||
|
((Vehicle_data.t_mot - 40) >= 0x69) and
|
||||||
|
((Vehicle_data.t_mot - 40) != 0xC8); // 105°C temp.water und !=200
|
||||||
|
|
||||||
bool g_auto = Vehicle_data.g_auto;
|
bool g_auto = Vehicle_data.g_auto;
|
||||||
bool u_batt = Vehicle_data.u_batt <= 0xB1; // 12.5V batt.spann.
|
bool u_batt = Vehicle_data.u_batt <= 0xB1; // 12.5V batt.spann.
|
||||||
@ -184,7 +195,8 @@ void update_LED(){
|
|||||||
/*if(Vehicle_data.rev_lim){
|
/*if(Vehicle_data.rev_lim){
|
||||||
for (int j = 0; j < 10; j++){
|
for (int j = 0; j < 10; j++){
|
||||||
digitalWrite(leds[j], HIGH);
|
digitalWrite(leds[j], HIGH);
|
||||||
//analogWrite(leds[j], STW_data.br); //nur eine der zwei zeilen
|
//analogWrite(leds[j], STW_data.br); //nur eine der zwei
|
||||||
|
zeilen
|
||||||
}
|
}
|
||||||
delay(100);
|
delay(100);
|
||||||
for (int j = 0; j < 10; j++){
|
for (int j = 0; j < 10; j++){
|
||||||
|
@ -2,22 +2,23 @@
|
|||||||
FT_2018_STW_CAN.cpp
|
FT_2018_STW_CAN.cpp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "FT_2018e_STW_CAN.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "DueTimer.h"
|
#include "DueTimer.h"
|
||||||
#include "due_can.h"
|
|
||||||
#include "FT_2018e_STW_CAN.h"
|
|
||||||
#include "FT18e_STW_INIT.h"
|
#include "FT18e_STW_INIT.h"
|
||||||
|
#include "due_can.h"
|
||||||
|
|
||||||
CAN_FRAME can_0_msg;
|
CAN_FRAME can_0_msg;
|
||||||
// can_1_msg.id = 0x110;
|
// can_1_msg.id = 0x110;
|
||||||
int can_0_temp_data = 0;
|
int can_0_temp_data = 0;
|
||||||
int leds[] = {led1, led2, led3, led4, led5, led6, led7, led8, led9, led10, led11, led12, led13, led14, led15, led16};
|
int leds[] = {led1, led2, led3, led4, led5, led6, led7, led8,
|
||||||
|
led9, led10, led11, led12, led13, led14, led15, led16};
|
||||||
|
|
||||||
void Init_Can_0()
|
void Init_Can_0() {
|
||||||
{
|
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
Can0.begin(1000000); // set CAN0 baud to 1kbit/s and don`t use enable pin!
|
Can0.begin(1000000); // set CAN0 baud to 1kbit/s and don`t use enable pin!
|
||||||
Can0.setNumTXBoxes(1); // reserves mailbox 0 for tx only 8 mailboxes are available (the other 7 mailboxes are for rx)
|
Can0.setNumTXBoxes(1); // reserves mailbox 0 for tx only 8 mailboxes are
|
||||||
|
// available (the other 7 mailboxes are for rx)
|
||||||
Can0.watchFor(CAN_CELL_STATS_ID);
|
Can0.watchFor(CAN_CELL_STATS_ID);
|
||||||
Can0.watchFor(CAN_BATTERY_STATS_ID);
|
Can0.watchFor(CAN_BATTERY_STATS_ID);
|
||||||
Can0.watchFor(CAN_COOLING_STATS_ID);
|
Can0.watchFor(CAN_COOLING_STATS_ID);
|
||||||
@ -27,8 +28,7 @@ void Init_Can_0()
|
|||||||
Timer3.start(10000); // Calls every 10ms
|
Timer3.start(10000); // Calls every 10ms
|
||||||
}
|
}
|
||||||
|
|
||||||
void Send_0x110()
|
void Send_0x110() {
|
||||||
{
|
|
||||||
read_buttons();
|
read_buttons();
|
||||||
read_rotary();
|
read_rotary();
|
||||||
can_0_msg.id = 0x110;
|
can_0_msg.id = 0x110;
|
||||||
@ -47,10 +47,8 @@ void Send_0x110()
|
|||||||
Can0.sendFrame(can_0_msg);
|
Can0.sendFrame(can_0_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Receive_Can_0(CAN_FRAME *temp_message)
|
void Receive_Can_0(CAN_FRAME *temp_message) {
|
||||||
{
|
switch (temp_message->id) {
|
||||||
switch (temp_message->id)
|
|
||||||
{
|
|
||||||
case CAN_CELL_STATS_ID:
|
case CAN_CELL_STATS_ID:
|
||||||
process_cell_stats(temp_message);
|
process_cell_stats(temp_message);
|
||||||
break;
|
break;
|
||||||
@ -70,21 +68,18 @@ void Receive_Can_0(CAN_FRAME *temp_message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_cell_stats(CAN_FRAME *frame)
|
void process_cell_stats(CAN_FRAME *frame) {
|
||||||
{
|
|
||||||
CellStats *data = (CellStats *)&frame->data;
|
CellStats *data = (CellStats *)&frame->data;
|
||||||
Vehicle_data.t_cell_max = data->max_cell_temp;
|
Vehicle_data.t_cell_max = data->max_cell_temp;
|
||||||
Vehicle_data.u_cell_min = data->min_cell_voltage;
|
Vehicle_data.u_cell_min = data->min_cell_voltage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_battery_stats(CAN_FRAME *frame)
|
void process_battery_stats(CAN_FRAME *frame) {
|
||||||
{
|
|
||||||
BatteryStats *data = (BatteryStats *)&frame->data;
|
BatteryStats *data = (BatteryStats *)&frame->data;
|
||||||
Vehicle_data.u_batt = data->pre_air_voltage;
|
Vehicle_data.u_batt = data->pre_air_voltage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_cooling_stats(CAN_FRAME *frame)
|
void process_cooling_stats(CAN_FRAME *frame) {
|
||||||
{
|
|
||||||
CoolingStats *data = (CoolingStats *)&frame->data;
|
CoolingStats *data = (CoolingStats *)&frame->data;
|
||||||
Vehicle_data.p_wat = data->water_pressure;
|
Vehicle_data.p_wat = data->water_pressure;
|
||||||
Vehicle_data.t_wat = data->water_temp;
|
Vehicle_data.t_wat = data->water_temp;
|
||||||
@ -92,8 +87,7 @@ void process_cooling_stats(CAN_FRAME *frame)
|
|||||||
Vehicle_data.t_mot_r = data->motor_r_temp;
|
Vehicle_data.t_mot_r = data->motor_r_temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_inverter_stats(CAN_FRAME *frame)
|
void process_inverter_stats(CAN_FRAME *frame) {
|
||||||
{
|
|
||||||
InverterStats *data = (InverterStats *)&frame->data;
|
InverterStats *data = (InverterStats *)&frame->data;
|
||||||
uint8_t status = data->status;
|
uint8_t status = data->status;
|
||||||
Vehicle_data.inverter.ready = status & CAN_INVERTER_STATS_READY;
|
Vehicle_data.inverter.ready = status & CAN_INVERTER_STATS_READY;
|
||||||
@ -109,9 +103,9 @@ void process_inverter_stats(CAN_FRAME *frame)
|
|||||||
Vehicle_data.wheel_speed = data->wheel_speed;
|
Vehicle_data.wheel_speed = data->wheel_speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_LED()
|
void update_LED() {
|
||||||
{
|
bool t_mot = (Vehicle_data.t_mot_l > LED_THRESH_T_MOT) ||
|
||||||
bool t_mot = (Vehicle_data.t_mot_l > LED_THRESH_T_MOT) || (Vehicle_data.t_mot_r > LED_THRESH_T_MOT);
|
(Vehicle_data.t_mot_r > LED_THRESH_T_MOT);
|
||||||
bool t_inv = Vehicle_data.t_inv > LED_THRESH_T_INV;
|
bool t_inv = Vehicle_data.t_inv > LED_THRESH_T_INV;
|
||||||
bool t_bat = Vehicle_data.t_cell_max > LED_THRESH_T_BAT;
|
bool t_bat = Vehicle_data.t_cell_max > LED_THRESH_T_BAT;
|
||||||
|
|
||||||
|
@ -31,32 +31,28 @@ void process_cooling_stats(CAN_FRAME *frame);
|
|||||||
void process_inverter_stats(CAN_FRAME *frame);
|
void process_inverter_stats(CAN_FRAME *frame);
|
||||||
void update_LED(void);
|
void update_LED(void);
|
||||||
|
|
||||||
struct CellStats
|
struct CellStats {
|
||||||
{
|
|
||||||
uint16_t sum_cell_voltage;
|
uint16_t sum_cell_voltage;
|
||||||
int16_t max_cell_temp;
|
int16_t max_cell_temp;
|
||||||
uint16_t max_cell_voltage;
|
uint16_t max_cell_voltage;
|
||||||
uint16_t min_cell_voltage;
|
uint16_t min_cell_voltage;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BatteryStats
|
struct BatteryStats {
|
||||||
{
|
|
||||||
uint16_t battery_current;
|
uint16_t battery_current;
|
||||||
uint16_t pre_air_voltage;
|
uint16_t pre_air_voltage;
|
||||||
uint16_t post_air_voltage;
|
uint16_t post_air_voltage;
|
||||||
uint16_t battery_power;
|
uint16_t battery_power;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CoolingStats
|
struct CoolingStats {
|
||||||
{
|
|
||||||
int16_t water_pressure;
|
int16_t water_pressure;
|
||||||
int16_t water_temp;
|
int16_t water_temp;
|
||||||
int16_t motor_l_temp;
|
int16_t motor_l_temp;
|
||||||
int16_t motor_r_temp;
|
int16_t motor_r_temp;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InverterStats
|
struct InverterStats {
|
||||||
{
|
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
uint8_t _reserved;
|
uint8_t _reserved;
|
||||||
uint16_t temp;
|
uint16_t temp;
|
||||||
|
@ -25,56 +25,40 @@
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#define DEBUG false
|
#define DEBUG false
|
||||||
|
|
||||||
|
|
||||||
EDIPTFT::EDIPTFT(boolean smallprotocol, boolean disconnected)
|
EDIPTFT::EDIPTFT(boolean smallprotocol, boolean disconnected)
|
||||||
: _smallprotocol{smallprotocol}, disconnected{disconnected} {}
|
: _smallprotocol{smallprotocol}, disconnected{disconnected} {}
|
||||||
|
|
||||||
|
void EDIPTFT::begin(long baud) { SERIAL_DEV.begin(baud); }
|
||||||
|
|
||||||
void EDIPTFT::begin(long baud) {
|
void EDIPTFT::sendByte(char data) { SERIAL_DEV.write(data); }
|
||||||
SERIAL_DEV.begin(baud);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::sendByte(char data) {
|
|
||||||
SERIAL_DEV.write(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char EDIPTFT::readByte() {
|
|
||||||
return SERIAL_DEV.read();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
char EDIPTFT::readByte() { return SERIAL_DEV.read(); }
|
||||||
|
|
||||||
void EDIPTFT::waitBytesAvailable() {
|
void EDIPTFT::waitBytesAvailable() {
|
||||||
const uint32_t t_start = millis();
|
const uint32_t t_start = millis();
|
||||||
char loop = 0;
|
char loop = 0;
|
||||||
while (loop == 0)
|
while (loop == 0) {
|
||||||
{
|
|
||||||
if (bytesAvailable() != 0) {
|
if (bytesAvailable() != 0) {
|
||||||
loop = 1;
|
loop = 1;
|
||||||
}
|
}
|
||||||
if(t_start + 100 < millis())
|
if (t_start + 100 < millis()) {
|
||||||
{
|
|
||||||
// Serial.println("Error: waited to long!");
|
// Serial.println("Error: waited to long!");
|
||||||
loop = 1;
|
loop = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char EDIPTFT::waitandreadByte() {
|
char EDIPTFT::waitandreadByte() {
|
||||||
waitBytesAvailable();
|
waitBytesAvailable();
|
||||||
char result = readByte();
|
char result = readByte();
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned char EDIPTFT::bytesAvailable() {
|
unsigned char EDIPTFT::bytesAvailable() {
|
||||||
return SERIAL_DEV.available();
|
return SERIAL_DEV.available();
|
||||||
//ÄNDERN
|
//ÄNDERN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::sendData(char* data, char len) {
|
void EDIPTFT::sendData(char* data, char len) {
|
||||||
|
|
||||||
/*for(int i=0; i < len; i++) {
|
/*for(int i=0; i < len; i++) {
|
||||||
@ -95,8 +79,7 @@ void EDIPTFT::sendData(char* data, char len) {
|
|||||||
|
|
||||||
if (_smallprotocol) {
|
if (_smallprotocol) {
|
||||||
sendSmall(data, len);
|
sendSmall(data, len);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
unsigned char i;
|
unsigned char i;
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
sendByte(data[i]);
|
sendByte(data[i]);
|
||||||
@ -104,7 +87,6 @@ void EDIPTFT::sendData(char* data, char len) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::sendSmall(char* data, char len) {
|
void EDIPTFT::sendSmall(char* data, char len) {
|
||||||
if (disconnected) {
|
if (disconnected) {
|
||||||
return;
|
return;
|
||||||
@ -130,12 +112,12 @@ void EDIPTFT::sendSmall(char* data, char len) {
|
|||||||
if (bytesAvailable() > 0) {
|
if (bytesAvailable() > 0) {
|
||||||
char x = readByte();
|
char x = readByte();
|
||||||
// Serial.print(uint16_t(x));
|
// Serial.print(uint16_t(x));
|
||||||
if (x == ACK) ok = 1;
|
if (x == ACK)
|
||||||
|
ok = 1;
|
||||||
else {
|
else {
|
||||||
ok = 0;
|
ok = 0;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
delay(200);
|
delay(200);
|
||||||
ok = 0;
|
ok = 0;
|
||||||
}
|
}
|
||||||
@ -146,7 +128,6 @@ void EDIPTFT::sendSmall(char* data, char len) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::sendSmallDC2(char* data, char len) {
|
void EDIPTFT::sendSmallDC2(char* data, char len) {
|
||||||
unsigned char i, bcc;
|
unsigned char i, bcc;
|
||||||
char ok = 0;
|
char ok = 0;
|
||||||
@ -163,38 +144,30 @@ void EDIPTFT::sendSmallDC2(char* data, char len) {
|
|||||||
sendByte(bcc);
|
sendByte(bcc);
|
||||||
waitBytesAvailable(); // delay(6); im 17er
|
waitBytesAvailable(); // delay(6); im 17er
|
||||||
if (bytesAvailable() > 0) {
|
if (bytesAvailable() > 0) {
|
||||||
if (readByte() == ACK) ok = 1;
|
if (readByte() == ACK)
|
||||||
else ok = 0;
|
ok = 1;
|
||||||
}
|
else
|
||||||
else {
|
ok = 0;
|
||||||
|
} else {
|
||||||
delay(200);
|
delay(200);
|
||||||
ok = 0;
|
ok = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::smallProtoSelect(char address) {
|
void EDIPTFT::smallProtoSelect(char address) {
|
||||||
char command [] = {
|
char command[] = {0x03, 'A', 'S', address};
|
||||||
0x03, 'A', 'S', address
|
|
||||||
};
|
|
||||||
sendSmallDC2(command, sizeof(command));
|
sendSmallDC2(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::smallProtoDeselect(char address) {
|
void EDIPTFT::smallProtoDeselect(char address) {
|
||||||
char command [] = {
|
char command[] = {0x03, 'A', 'D', address};
|
||||||
0x03, 'A', 'D', address
|
|
||||||
};
|
|
||||||
sendSmallDC2(command, sizeof(command));
|
sendSmallDC2(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned char EDIPTFT::datainBuffer() {
|
unsigned char EDIPTFT::datainBuffer() {
|
||||||
unsigned char result;
|
unsigned char result;
|
||||||
char command [] = {
|
char command[] = {0x01, 'I'};
|
||||||
0x01, 'I'
|
|
||||||
};
|
|
||||||
sendSmallDC2(command, sizeof(command));
|
sendSmallDC2(command, sizeof(command));
|
||||||
waitandreadByte();
|
waitandreadByte();
|
||||||
waitandreadByte();
|
waitandreadByte();
|
||||||
@ -204,12 +177,9 @@ unsigned char EDIPTFT::datainBuffer() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int EDIPTFT::readBuffer(char* data) { // return void
|
int EDIPTFT::readBuffer(char* data) { // return void
|
||||||
unsigned char len, i; // char in 17er
|
unsigned char len, i; // char in 17er
|
||||||
char command [] = {
|
char command[] = {0x01, 'S'};
|
||||||
0x01, 'S'
|
|
||||||
};
|
|
||||||
sendSmallDC2(command, sizeof(command));
|
sendSmallDC2(command, sizeof(command));
|
||||||
waitandreadByte();
|
waitandreadByte();
|
||||||
len = waitandreadByte();
|
len = waitandreadByte();
|
||||||
@ -222,101 +192,101 @@ int EDIPTFT::readBuffer(char* data) { //return void
|
|||||||
return len; // zeile nicht vorhanden
|
return len; // zeile nicht vorhanden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::clear() { // vgl 17er
|
void EDIPTFT::clear() { // vgl 17er
|
||||||
this->deleteDisplay();
|
this->deleteDisplay();
|
||||||
this->removeTouchArea(0, 1);
|
this->removeTouchArea(0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::deleteDisplay() {
|
void EDIPTFT::deleteDisplay() {
|
||||||
char command [] = {
|
char command[] = {27, 'D', 'L'};
|
||||||
27, 'D', 'L'
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::invert() {
|
void EDIPTFT::invert() {
|
||||||
char command [] = {
|
char command[] = {27, 'D', 'I'};
|
||||||
27, 'D', 'I'
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setDisplayColor(char fg, char bg) {
|
void EDIPTFT::setDisplayColor(char fg, char bg) {
|
||||||
char command [] = {
|
char command[] = {27, 'F', 'D', fg, bg};
|
||||||
27, 'F', 'D', fg, bg
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::fillDisplayColor(char bg) {
|
void EDIPTFT::fillDisplayColor(char bg) {
|
||||||
char command [] = {
|
char command[] = {27, 'D', 'F', bg};
|
||||||
27, 'D', 'F', bg
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::terminalOn(boolean on) {
|
void EDIPTFT::terminalOn(boolean on) {
|
||||||
if (on) {
|
if (on) {
|
||||||
char command[] = {27, 'T', 'E'};
|
char command[] = {27, 'T', 'E'};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
char command[] = {27, 'T', 'A'};
|
char command[] = {27, 'T', 'A'};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::loadImage(int x1, int y1, int nr) {
|
void EDIPTFT::loadImage(int x1, int y1, int nr) {
|
||||||
char command [] = {27, 'U', 'I',
|
char command[] = {
|
||||||
|
27,
|
||||||
|
'U',
|
||||||
|
'I',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
(char)x1, (char)y1,
|
(char)x1,
|
||||||
|
(char)y1,
|
||||||
#else
|
#else
|
||||||
lowByte(x1), highByte(x1), lowByte(y1), highByte(y1),
|
lowByte(x1),
|
||||||
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
#endif
|
#endif
|
||||||
nr};
|
nr
|
||||||
|
};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::cursorOn(boolean on) {
|
void EDIPTFT::cursorOn(boolean on) {
|
||||||
if (on) {
|
if (on) {
|
||||||
char command[] = {27, 'T', 'C', 1};
|
char command[] = {27, 'T', 'C', 1};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
char command[] = {27, 'T', 'C', 0};
|
char command[] = {27, 'T', 'C', 0};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setCursor(char col, char row) {
|
void EDIPTFT::setCursor(char col, char row) {
|
||||||
char command[] = {27, 'T', 'P', col, row};
|
char command[] = {27, 'T', 'P', col, row};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EDIPTFT::displayLight(char no) {
|
void EDIPTFT::displayLight(char no) {
|
||||||
char command [] = {
|
char command[] = {27, 'Y', 'H', no};
|
||||||
27, 'Y', 'H', no
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EDIPTFT::defineBargraph(char dir, char no, int x1, int y1, int x2, int y2, byte sv, byte ev, char type, char mst) {
|
void EDIPTFT::defineBargraph(char dir, char no, int x1, int y1, int x2, int y2,
|
||||||
|
byte sv, byte ev, char type, char mst) {
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'B', dir, no,
|
27,
|
||||||
|
'B',
|
||||||
|
dir,
|
||||||
|
no,
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2,
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2,
|
||||||
#else
|
#else
|
||||||
lowByte(x1), highByte(x1), lowByte(y1), highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2), highByte(x2), lowByte(y2), highByte(y2),
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2),
|
||||||
#endif
|
#endif
|
||||||
char(sv),
|
char(sv),
|
||||||
char(ev),
|
char(ev),
|
||||||
@ -327,113 +297,87 @@ void EDIPTFT::defineBargraph(char dir, char no, int x1, int y1, int x2, int y2,
|
|||||||
// mst fehlt 17
|
// mst fehlt 17
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::updateBargraph(char no, char val) {
|
void EDIPTFT::updateBargraph(char no, char val) {
|
||||||
char command [] = {
|
char command[] = {27, 'B', 'A', no, val};
|
||||||
27, 'B', 'A', no, val
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setBargraphColor(char no, char fg, char bg, char fr) {
|
void EDIPTFT::setBargraphColor(char no, char fg, char bg, char fr) {
|
||||||
char command [] = {
|
char command[] = {27, 'F', 'B', no, fg, bg, fr};
|
||||||
27, 'F', 'B', no, fg, bg, fr
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::linkBargraphLight(char no) {
|
void EDIPTFT::linkBargraphLight(char no) {
|
||||||
char command [] = {
|
char command[] = {27, 'Y', 'B', no};
|
||||||
27, 'Y', 'B', no
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::makeBargraphTouch(char no) {
|
void EDIPTFT::makeBargraphTouch(char no) {
|
||||||
char command [] = {
|
char command[] = {27, 'A', 'B', no};
|
||||||
27, 'A', 'B', no
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::deleteBargraph(char no, char n1) {
|
void EDIPTFT::deleteBargraph(char no, char n1) {
|
||||||
char command [] = {
|
char command[] = {27, 'B', 'D', no, n1};
|
||||||
27, 'B', 'D', no, n1
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EDIPTFT::defineInstrument(char no, int x1, int y1, char image, char angle,
|
||||||
void EDIPTFT::defineInstrument(char no, int x1, int y1, char image, char angle, char sv, char ev) {
|
char sv, char ev) {
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'I', 'P', no,
|
27,
|
||||||
|
'I',
|
||||||
|
'P',
|
||||||
|
no,
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1,
|
x1,
|
||||||
|
y1,
|
||||||
#else
|
#else
|
||||||
lowByte(x1), highByte(x1), lowByte(y1), highByte(y1),
|
lowByte(x1),
|
||||||
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
#endif
|
#endif
|
||||||
image, angle, sv, ev
|
image,
|
||||||
|
angle,
|
||||||
|
sv,
|
||||||
|
ev
|
||||||
};
|
};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::updateInstrument(char no, char val) {
|
void EDIPTFT::updateInstrument(char no, char val) {
|
||||||
char command [] = {
|
char command[] = {27, 'I', 'A', no, val};
|
||||||
27, 'I', 'A', no, val
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::redrawInstrument(char no) {
|
void EDIPTFT::redrawInstrument(char no) {
|
||||||
char command [] = {
|
char command[] = {27, 'I', 'N', no};
|
||||||
27, 'I', 'N', no
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::deleteInstrument(char no, char n1, char n2) {
|
void EDIPTFT::deleteInstrument(char no, char n1, char n2) {
|
||||||
char command [] = {
|
char command[] = {27, 'B', 'D', no, n1, n2};
|
||||||
27, 'B', 'D', no, n1, n2
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setLineColor(char fg, char bg) {
|
void EDIPTFT::setLineColor(char fg, char bg) {
|
||||||
char command [] = {
|
char command[] = {27, 'F', 'G', fg, bg};
|
||||||
27, 'F', 'G', fg, bg
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setLineThick(char x, char y) {
|
void EDIPTFT::setLineThick(char x, char y) {
|
||||||
char command [] = {
|
char command[] = {27, 'G', 'Z', x, y};
|
||||||
27, 'G', 'Z', x, y
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTextColor(char fg, char bg) {
|
void EDIPTFT::setTextColor(char fg, char bg) {
|
||||||
char command [] = {
|
char command[] = {27, 'F', 'Z', fg, bg};
|
||||||
27, 'F', 'Z', fg, bg
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTextFont(char font) {
|
void EDIPTFT::setTextFont(char font) {
|
||||||
char command [] = {
|
char command[] = {27, 'Z', 'F', font};
|
||||||
27, 'Z', 'F', font
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,14 +388,12 @@ void EDIPTFT::setTextSize(int xsize, int ysize){
|
|||||||
|
|
||||||
void EDIPTFT::setTextAngle(char angle) {
|
void EDIPTFT::setTextAngle(char angle) {
|
||||||
// 0 = 0°, 1 = 90°, 2 = 180°, 3 = 270°
|
// 0 = 0°, 1 = 90°, 2 = 180°, 3 = 270°
|
||||||
char command [] = {
|
char command[] = {27, 'Z', 'W', angle};
|
||||||
27, 'Z', 'W', angle
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EDIPTFT::drawText(uint16_t x1, uint16_t y1, char justification,
|
||||||
void EDIPTFT::drawText(uint16_t x1, uint16_t y1, char justification, const char* text) {
|
const char* text) {
|
||||||
// nicht const 17//
|
// nicht const 17//
|
||||||
byte len = strlen(text);
|
byte len = strlen(text);
|
||||||
byte i;
|
byte i;
|
||||||
@ -470,14 +412,13 @@ void EDIPTFT::drawText(uint16_t x1, uint16_t y1, char justification, const char*
|
|||||||
sendData(helper, sizeof(helper));
|
sendData(helper, sizeof(helper));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EDIPTFT::drawTextInRect(int x1, int y1, int x2, int y2, uint8_t align,
|
||||||
void EDIPTFT::drawTextInRect(int x1, int y1, int x2, int y2, uint8_t align, const char* text) {
|
const char* text) {
|
||||||
int len_text = strlen(text);
|
int len_text = strlen(text);
|
||||||
int len = 3 + 8 + 1 + len_text + 1;
|
int len = 3 + 8 + 1 + len_text + 1;
|
||||||
char data[len] = {
|
char data[len] = {27, 'Z', 'B', lowByte(x1),
|
||||||
27, 'Z', 'B', lowByte(x1), highByte(x1), lowByte(y1), highByte(y1),
|
highByte(x1), lowByte(y1), highByte(y1), lowByte(x2),
|
||||||
lowByte(x2), highByte(x2), lowByte(y2), highByte(y2), align
|
highByte(x2), lowByte(y2), highByte(y2), align};
|
||||||
};
|
|
||||||
for (int i = 0; i < len_text; i++) {
|
for (int i = 0; i < len_text; i++) {
|
||||||
data[3 + 8 + 1 + i] = text[i];
|
data[3 + 8 + 1 + i] = text[i];
|
||||||
}
|
}
|
||||||
@ -486,111 +427,179 @@ void EDIPTFT::drawTextInRect(int x1, int y1, int x2, int y2, uint8_t align, cons
|
|||||||
sendData(data, len);
|
sendData(data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::drawLine(int x1, int y1, int x2, int y2) {
|
void EDIPTFT::drawLine(int x1, int y1, int x2, int y2) {
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27,'G','D',
|
27,
|
||||||
|
'G',
|
||||||
|
'D',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2
|
||||||
#else
|
#else
|
||||||
lowByte(x1),highByte(x1),lowByte(y1),highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2),highByte(x2),lowByte(y2),highByte(y2)
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2)
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::drawRect(int x1, int y1, int x2, int y2) {
|
void EDIPTFT::drawRect(int x1, int y1, int x2, int y2) {
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27,'G','R',
|
27,
|
||||||
|
'G',
|
||||||
|
'R',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2
|
||||||
#else
|
#else
|
||||||
lowByte(x1),highByte(x1),lowByte(y1),highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2),highByte(x2),lowByte(y2),highByte(y2)
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2)
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::drawRectf(int x1, int y1, int x2, int y2, char color) {
|
void EDIPTFT::drawRectf(int x1, int y1, int x2, int y2, char color) {
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27,'R','F',
|
27,
|
||||||
|
'R',
|
||||||
|
'F',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2,
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2,
|
||||||
#else
|
#else
|
||||||
lowByte(x1),highByte(x1),lowByte(y1),highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2),highByte(x2),lowByte(y2),highByte(y2),
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2),
|
||||||
#endif
|
#endif
|
||||||
color
|
color
|
||||||
};
|
};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::clearRect(int x1, int y1, int x2, int y2) {
|
void EDIPTFT::clearRect(int x1, int y1, int x2, int y2) {
|
||||||
Serial.print("Clearing ");
|
Serial.print("Clearing ");
|
||||||
Serial.print(x1); Serial.print(", ");
|
Serial.print(x1);
|
||||||
Serial.print(y1); Serial.print(", ");
|
Serial.print(", ");
|
||||||
Serial.print(x2); Serial.print(", ");
|
Serial.print(y1);
|
||||||
|
Serial.print(", ");
|
||||||
|
Serial.print(x2);
|
||||||
|
Serial.print(", ");
|
||||||
Serial.println(y2);
|
Serial.println(y2);
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'R', 'L',
|
27,
|
||||||
|
'R',
|
||||||
|
'L',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2
|
||||||
#else
|
#else
|
||||||
lowByte(x1),highByte(x1),lowByte(y1),highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2),highByte(x2),lowByte(y2),highByte(y2),
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::defineTouchKey(int x1, int y1, int x2, int y2, char down, char up,
|
void EDIPTFT::defineTouchKey(int x1, int y1, int x2, int y2, char down, char up,
|
||||||
const char* text) { // text nicht const 17
|
const char* text) { // text nicht const 17
|
||||||
byte len = strlen(text);
|
byte len = strlen(text);
|
||||||
byte i;
|
byte i;
|
||||||
char helper[len + 6 + 4 * COORD_SIZE]; // len+13 17
|
char helper[len + 6 + 4 * COORD_SIZE]; // len+13 17
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'A', 'T',
|
27,
|
||||||
|
'A',
|
||||||
|
'T',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2,
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2,
|
||||||
#else
|
#else
|
||||||
lowByte(x1), highByte(x1), lowByte(y1), highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2), highByte(x2), lowByte(y2), highByte(y2),
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2),
|
||||||
#endif
|
#endif
|
||||||
down, up
|
down,
|
||||||
|
up
|
||||||
};
|
};
|
||||||
for (i = 0; i < (5 + 4 * COORD_SIZE); i++) helper[i] = command[i];//i<=12 17
|
for (i = 0; i < (5 + 4 * COORD_SIZE); i++)
|
||||||
for (i = 0; i <= len+1; i++) helper[i + 5 + 4 * COORD_SIZE] = text[i];//i<=len 17
|
helper[i] = command[i]; // i<=12 17
|
||||||
|
for (i = 0; i <= len + 1; i++)
|
||||||
|
helper[i + 5 + 4 * COORD_SIZE] = text[i]; // i<=len 17
|
||||||
sendData(helper, sizeof(helper)); // size len+14 17
|
sendData(helper, sizeof(helper)); // size len+14 17
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EDIPTFT::defineTouchSwitch(int x1, int y1, int x2, int y2, char down,
|
||||||
void EDIPTFT::defineTouchSwitch(int x1, int y1, int x2, int y2,
|
char up, const char* text) { // const nicht 17
|
||||||
char down, char up, const char* text) {//const nicht 17
|
|
||||||
byte len = strlen(text);
|
byte len = strlen(text);
|
||||||
byte i;
|
byte i;
|
||||||
char helper[len + 6 + 4 * COORD_SIZE]; // len+13 17
|
char helper[len + 6 + 4 * COORD_SIZE]; // len+13 17
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'A', 'K',
|
27,
|
||||||
|
'A',
|
||||||
|
'K',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2,
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2,
|
||||||
#else
|
#else
|
||||||
lowByte(x1),highByte(x1),lowByte(y1),highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2),highByte(x2),lowByte(y2),highByte(y2),
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2),
|
||||||
#endif
|
#endif
|
||||||
down, up
|
down,
|
||||||
|
up
|
||||||
};
|
};
|
||||||
for (i = 0; i < 5 + 4 * COORD_SIZE; i++) helper[i] = command[i];
|
for (i = 0; i < 5 + 4 * COORD_SIZE; i++)
|
||||||
for (i = 0; i <= len; i++) helper[i + 5 + 4 * COORD_SIZE] = text[i];
|
helper[i] = command[i];
|
||||||
|
for (i = 0; i <= len; i++)
|
||||||
|
helper[i + 5 + 4 * COORD_SIZE] = text[i];
|
||||||
sendData(helper, sizeof(helper)); // size len+14
|
sendData(helper, sizeof(helper)); // size len+14
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::defineTouchSwitch(int x, int y, int img, char downcode,
|
void EDIPTFT::defineTouchSwitch(int x, int y, int img, char downcode,
|
||||||
char upcode, const char* text) {
|
char upcode, const char* text) {
|
||||||
byte len = strlen(text);
|
byte len = strlen(text);
|
||||||
@ -598,135 +607,123 @@ void EDIPTFT::defineTouchSwitch(int x, int y, int img, char downcode,
|
|||||||
byte n = 6 + 2 * COORD_SIZE;
|
byte n = 6 + 2 * COORD_SIZE;
|
||||||
char helper[len + n + 1];
|
char helper[len + n + 1];
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'A', 'J',
|
27,
|
||||||
|
'A',
|
||||||
|
'J',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x, y,
|
x,
|
||||||
|
y,
|
||||||
#else
|
#else
|
||||||
lowByte(x), highByte(x), lowByte(y), highByte(y),
|
lowByte(x),
|
||||||
|
highByte(x),
|
||||||
|
lowByte(y),
|
||||||
|
highByte(y),
|
||||||
#endif
|
#endif
|
||||||
img, downcode, upcode
|
img,
|
||||||
|
downcode,
|
||||||
|
upcode
|
||||||
};
|
};
|
||||||
for (i = 0; i < n; i++) helper[i] = command[i];
|
for (i = 0; i < n; i++)
|
||||||
for (i = 0; i <= len; i++) helper[i + n] = text[i];
|
helper[i] = command[i];
|
||||||
|
for (i = 0; i <= len; i++)
|
||||||
|
helper[i + n] = text[i];
|
||||||
sendData(helper, sizeof(helper));
|
sendData(helper, sizeof(helper));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTouchSwitch(char code, char value) {
|
void EDIPTFT::setTouchSwitch(char code, char value) {
|
||||||
char command [] = {
|
char command[] = {27, 'A', 'P', code, value};
|
||||||
27, 'A', 'P', code, value
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EDIPTFT::setTouchkeyColors(char n1, char n2, char n3, char s1, char s2,
|
||||||
void EDIPTFT::setTouchkeyColors(
|
char s3) {
|
||||||
char n1, char n2, char n3, char s1, char s2, char s3) {
|
char command[] = {27, 'F', 'E', n1, n2, n3, s1, s2, s3};
|
||||||
char command [] = {
|
|
||||||
27, 'F', 'E', n1, n2, n3, s1, s2, s3
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTouchkeyFont(char font) {
|
void EDIPTFT::setTouchkeyFont(char font) {
|
||||||
char command [] = {
|
char command[] = {27, 'A', 'F', font};
|
||||||
27, 'A', 'F', font
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTouchkeyLabelColors(char nf, char sf) {
|
void EDIPTFT::setTouchkeyLabelColors(char nf, char sf) {
|
||||||
char command [] = {
|
char command[] = {27, 'F', 'A', nf, sf};
|
||||||
27, 'F', 'A', nf, sf
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTouchGroup(char group) {
|
void EDIPTFT::setTouchGroup(char group) {
|
||||||
char command [] = {
|
char command[] = {27, 'A', 'R', group};
|
||||||
27, 'A', 'R', group
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::removeTouchArea(char code, char n1) {
|
void EDIPTFT::removeTouchArea(char code, char n1) {
|
||||||
char command [] = {
|
char command[] = {27, 'A', 'L', code, n1};
|
||||||
27, 'A', 'L', code, n1
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::callMacro(uint nr) {
|
void EDIPTFT::callMacro(uint nr) {
|
||||||
char command[] = {
|
char command[] = {27, 'M', 'N', nr};
|
||||||
27, 'M', 'N', nr
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::callTouchMacro(uint nr) {
|
void EDIPTFT::callTouchMacro(uint nr) {
|
||||||
char command[] = {
|
char command[] = {27, 'M', 'T', nr};
|
||||||
27, 'M', 'T', nr
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::callMenuMacro(uint nr) {
|
void EDIPTFT::callMenuMacro(uint nr) {
|
||||||
char command[] = {
|
char command[] = {27, 'M', 'M', nr};
|
||||||
27, 'M', 'M', nr
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EDIPTFT::defineTouchMenu(int x1, int y1, int x2, int y2, char downcode,
|
||||||
void EDIPTFT::defineTouchMenu(int x1, int y1, int x2, int y2,
|
char upcode, char mnucode, const char* text) {
|
||||||
char downcode, char upcode, char mnucode, const char *text) {
|
|
||||||
byte len = strlen(text);
|
byte len = strlen(text);
|
||||||
byte n = 6 + 4 * COORD_SIZE;
|
byte n = 6 + 4 * COORD_SIZE;
|
||||||
char helper[len + n + 1];
|
char helper[len + n + 1];
|
||||||
|
|
||||||
char command[] = {
|
char command[] = {
|
||||||
27, 'A', 'M',
|
27,
|
||||||
|
'A',
|
||||||
|
'M',
|
||||||
#if COORD_SIZE == 1
|
#if COORD_SIZE == 1
|
||||||
x1, y1, x2, y2,
|
x1,
|
||||||
|
y1,
|
||||||
|
x2,
|
||||||
|
y2,
|
||||||
#else
|
#else
|
||||||
lowByte(x1),highByte(x1),lowByte(y1),highByte(y1),
|
lowByte(x1),
|
||||||
lowByte(x2),highByte(x2),lowByte(y2),highByte(y2),
|
highByte(x1),
|
||||||
|
lowByte(y1),
|
||||||
|
highByte(y1),
|
||||||
|
lowByte(x2),
|
||||||
|
highByte(x2),
|
||||||
|
lowByte(y2),
|
||||||
|
highByte(y2),
|
||||||
#endif
|
#endif
|
||||||
downcode, upcode, mnucode
|
downcode,
|
||||||
|
upcode,
|
||||||
|
mnucode
|
||||||
};
|
};
|
||||||
for (int i = 0; i < n; i++) helper[i] = command[i];
|
for (int i = 0; i < n; i++)
|
||||||
for (int i = 0; i <= len; i++) helper[i + n] = text[i];
|
helper[i] = command[i];
|
||||||
|
for (int i = 0; i <= len; i++)
|
||||||
|
helper[i + n] = text[i];
|
||||||
sendData(helper, sizeof(helper));
|
sendData(helper, sizeof(helper));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::openTouchMenu() {
|
void EDIPTFT::openTouchMenu() {
|
||||||
char command [] = {
|
char command[] = {27, 'N', 'T', 2};
|
||||||
27, 'N', 'T', 2
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setMenuFont(char font) {
|
void EDIPTFT::setMenuFont(char font) {
|
||||||
char command [] = {
|
char command[] = {27, 'N', 'F', font};
|
||||||
27, 'N', 'F', font
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDIPTFT::setTouchMenuAutomation(bool val) {
|
void EDIPTFT::setTouchMenuAutomation(bool val) {
|
||||||
char n1 = val ? 1 : 0;
|
char n1 = val ? 1 : 0;
|
||||||
char command [] = {
|
char command[] = {27, 'N', 'T', n1};
|
||||||
27, 'N', 'T', n1
|
|
||||||
};
|
|
||||||
sendData(command, sizeof(command));
|
sendData(command, sizeof(command));
|
||||||
}
|
}
|
@ -208,8 +208,8 @@ class EDIPTFT {
|
|||||||
void deleteBargraph(char no, char n1);
|
void deleteBargraph(char no, char n1);
|
||||||
|
|
||||||
// Instrument
|
// Instrument
|
||||||
void defineInstrument(char no, int x1, int y1, char image,
|
void defineInstrument(char no, int x1, int y1, char image, char angle,
|
||||||
char angle, char sv, char ev);
|
char sv, char ev);
|
||||||
void updateInstrument(char no, char val);
|
void updateInstrument(char no, char val);
|
||||||
void redrawInstrument(char no);
|
void redrawInstrument(char no);
|
||||||
void deleteInstrument(char no, char n1, char n2);
|
void deleteInstrument(char no, char n1, char n2);
|
||||||
@ -266,7 +266,8 @@ class EDIPTFT {
|
|||||||
* bottom left, 8 = bottom center, 9 = bottom right.
|
* bottom left, 8 = bottom center, 9 = bottom right.
|
||||||
* \param text text to draw on display
|
* \param text text to draw on display
|
||||||
*/
|
*/
|
||||||
void drawTextInRect(int x1, int y1, int x2, int y2, uint8_t align, const char* text);
|
void drawTextInRect(int x1, int y1, int x2, int y2, uint8_t align,
|
||||||
|
const char* text);
|
||||||
|
|
||||||
// Rectangle and Line
|
// Rectangle and Line
|
||||||
void setLineColor(char fg, char bg);
|
void setLineColor(char fg, char bg);
|
||||||
@ -309,8 +310,8 @@ class EDIPTFT {
|
|||||||
* \param up return/touchmacro (1-255) if released
|
* \param up return/touchmacro (1-255) if released
|
||||||
* \param text label of the touch key
|
* \param text label of the touch key
|
||||||
*/
|
*/
|
||||||
void defineTouchKey(int x1, int y1, int x2, int y2,
|
void defineTouchKey(int x1, int y1, int x2, int y2, char down, char up,
|
||||||
char down, char up, const char* text);
|
const char* text);
|
||||||
|
|
||||||
/*! \brief Define touch switch
|
/*! \brief Define touch switch
|
||||||
*
|
*
|
||||||
@ -324,8 +325,8 @@ class EDIPTFT {
|
|||||||
* \param up return/touchmacro (1-255) if released
|
* \param up return/touchmacro (1-255) if released
|
||||||
* \param text label of the touch key
|
* \param text label of the touch key
|
||||||
*/
|
*/
|
||||||
void defineTouchSwitch(int x1, int y1, int x2, int y2,
|
void defineTouchSwitch(int x1, int y1, int x2, int y2, char down, char up,
|
||||||
char down, char up, const char* text);
|
const char* text);
|
||||||
|
|
||||||
/*! \brief Define touch switch with image
|
/*! \brief Define touch switch with image
|
||||||
*
|
*
|
||||||
@ -339,8 +340,8 @@ class EDIPTFT {
|
|||||||
* \param up return/touchmacro (1-255) if released
|
* \param up return/touchmacro (1-255) if released
|
||||||
* \param text label of the touch switch
|
* \param text label of the touch switch
|
||||||
*/
|
*/
|
||||||
void defineTouchSwitch(int x, int y, int img, char downcode,
|
void defineTouchSwitch(int x, int y, int img, char downcode, char upcode,
|
||||||
char upcode, const char* text);
|
const char* text);
|
||||||
|
|
||||||
/*! \brief Set touch switch
|
/*! \brief Set touch switch
|
||||||
*
|
*
|
||||||
@ -352,8 +353,7 @@ class EDIPTFT {
|
|||||||
*/
|
*/
|
||||||
void setTouchSwitch(char code, char value);
|
void setTouchSwitch(char code, char value);
|
||||||
|
|
||||||
void setTouchkeyColors(char n1, char n2, char n3,
|
void setTouchkeyColors(char n1, char n2, char n3, char s1, char s2, char s3);
|
||||||
char s1, char s2, char s3);
|
|
||||||
|
|
||||||
/*! \brief Label font
|
/*! \brief Label font
|
||||||
*
|
*
|
||||||
@ -406,21 +406,23 @@ class EDIPTFT {
|
|||||||
/*! \brief Define touch key with menu function
|
/*! \brief Define touch key with menu function
|
||||||
*
|
*
|
||||||
* Define the area from *x1*, *y1* to *x2*, *y2* as a menu key.
|
* Define the area from *x1*, *y1* to *x2*, *y2* as a menu key.
|
||||||
* The first character determines the direction in which the menu opens (R=right,L=left,O=up,U=down)
|
* The first character determines the direction in which the menu opens
|
||||||
* The second character determines the alignment of the touch text (C=center,L=left-,R=right justified)
|
* (R=right,L=left,O=up,U=down) The second character determines the alignment
|
||||||
* The menu items are separated by the character '|' ($7C,dec:124) (e.g. "UCkey|item1|item2|item3".
|
* of the touch text (C=center,L=left-,R=right justified) The menu items are
|
||||||
* The key text is written with the current touch font and the menu items are written with the current menu font. The background of the menu is saved automatically.
|
* separated by the character '|' ($7C,dec:124) (e.g.
|
||||||
* \param downcode `1-255` return/touchmacro if pressed
|
* "UCkey|item1|item2|item3". The key text is written with the current touch
|
||||||
* \param upcode `1-255` return/touchmacro if released
|
* font and the menu items are written with the current menu font. The
|
||||||
* \param mnucode return/menumacro+(item nr - 1) after selection of a
|
* background of the menu is saved automatically. \param downcode `1-255`
|
||||||
|
* return/touchmacro if pressed \param upcode `1-255` return/touchmacro if
|
||||||
|
* released \param mnucode return/menumacro+(item nr - 1) after selection of a
|
||||||
* menu item
|
* menu item
|
||||||
* \param text string with the key text and menu items
|
* \param text string with the key text and menu items
|
||||||
*/
|
*/
|
||||||
void defineTouchMenu(int x1, int y1, int x2, int y2,
|
void defineTouchMenu(int x1, int y1, int x2, int y2, char downcode,
|
||||||
char downcode, char upcode, char mnucode,
|
char upcode, char mnucode, const char* text);
|
||||||
const char *text);
|
|
||||||
|
|
||||||
/*! \brief Send *open* signal after a Menu open request has been sent from TFT.
|
/*! \brief Send *open* signal after a Menu open request has been sent from
|
||||||
|
* TFT.
|
||||||
*
|
*
|
||||||
* If a touch menu is not set to open automatically the TFT sends a
|
* If a touch menu is not set to open automatically the TFT sends a
|
||||||
* request 'ESC T 0'. This function sends 'ESC N T 2' to open the menu.
|
* request 'ESC T 0'. This function sends 'ESC N T 2' to open the menu.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user