Hi,
ich möchte in der Klasse MainThread einen Pointer auf Joystate_t joySt speichern, den ich dann in der loop()-Funktion non MainThread immer wieder setzen kann. Aber wie stelle ich das an?
ich möchte in der Klasse MainThread einen Pointer auf Joystate_t joySt speichern, den ich dann in der loop()-Funktion non MainThread immer wieder setzen kann. Aber wie stelle ich das an?
Code:
#include "mthread.h"
int d2 = 2; //Gas
int d3 = 3; //Querruder
int d4 = 4; //Höhenruder
int d5 = 5; //Seitenruder
JoyState_t joySt;
class MainThread : public Thread {
public:
MainThread(*Joystate_t);
protected:
bool loop();
Joystate_t *joyst;
};
//Definition des Konstruktors
MainThread::MainThread(Joystate_t *j){
this->joyst = j;
}
//Definition der Threadschleife
bool MainThread::loop() {
//Die if requested:
if(kill_flag)
return false;
// code ----
Joystick.setState(joyst);
this->sleep_milli(10);
// ---- code
return true;
}
void setup() {
pinMode(d2, INPUT);
pinMode(d3, INPUT);
pinMode(d4, INPUT);
pinMode(d5, INPUT);
//pinMode(13, OUTPUT);
Serial.begin(115200);
joySt.xAxis = 0;
joySt.yAxis = 0;
joySt.zAxis = 0;
joySt.xRotAxis = 0;
joySt.yRotAxis = 0;
joySt.zRotAxis = 0;
joySt.throttle = 0;
joySt.rudder = 0;
joySt.hatSw1 = 0;
joySt.hatSw2 = 0;
joySt.buttons = 0;
main_thread_list->add_thread(new MainThread(&joySt));
}
bool laststate[4] = { LOW, LOW, LOW, LOW };
unsigned long startzeit[4];
void loop() {
if (digitalRead(d2) == HIGH && laststate[0] == LOW) {
startzeit[0] = micros();
laststate[0] = HIGH;
} else if (digitalRead(d2) == LOW && laststate[0] == HIGH) {
int x = (micros() - startzeit[0] - 1012) / 3.8274;
// if (x < 0) x = 0;
// if (x > 255) x = 255;
joySt.throttle = x;
laststate[0] = LOW;
}
// usw....
}