Witam,
Program działa ale próbuję zmienić nazwy wskaźników aby je szybko wprowadzić do tablicy i móc później program rozszerzyć bo obecnie każdy ze wskaźników muszę dodawać do tablicy ręcznie. Chodzi mi o osiągnięcie czegoś na zasadzie:
for (uint8_t i=0; i<ilosc_wskaznikow; i++){
tab[i] = wskaznik[i];
}
tylko że takie coś nie działa i nie wiem jak to ugryźć. Chciałem w "struct EventData z pliku *.h" pozmieniać nazwy ale sypie się program. Jestem dość mocno zielony a ten kod powoli rozgryzam i przerabiam pod swoje potrzeby z gotowca więc prosił bym o jasne wskazówki jak dla kogoś kto pierwszy raz to widzi na oczy
Fragment kodu który chce zmienić:
void Events::OnChanged(const EventData *evt){
int tab[rpt_gamepad_len] = {evt->channel_1,
evt->channel_2,
evt->channel_3,
evt->channel_4,
evt->channel_5,
evt->channel_6,
evt->channel_7};
for (uint8_t i=0; i<rpt_gamepad_len; i++){
Serial.println(tab[i]);
}
}
Cały program:
// plik *ino
#include <hiduniversal.h>
#include "usb.h"
USB Usb;
HIDUniversal Hid(&Usb);
Events padEvents;
ReportParser Pad(&padEvents);
void setup(){
Serial.begin(115200);
Serial.println("Start");
if(Usb.Init() == -1) Serial.println("OSC did not start");
delay(200);
if(!Hid.SetReportParser(0, &Pad)) ErrorMessage<uint8_t>(PSTR("SetReportParser"), 1);
}
void loop(){
Usb.Task();
}
// plik *.cpp
#include "usb.h"
void ReportParser::Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf){
bool match = true;
for (uint8_t i=0; i<rpt_gamepad_len; i++){
if(buf[i] != oldPad[i]){
match = false;
break;
}
}
if(!match && padEvents){
padEvents->OnChanged((const EventData*)buf);
for (uint8_t i=0; i<rpt_gamepad_len; i++) oldPad[i] = buf[i];
}
}
void Events::OnChanged(const EventData *evt){
int tab[rpt_gamepad_len] = {evt->channel_1,
evt->channel_2,
evt->channel_3,
evt->channel_4,
evt->channel_5,
evt->channel_6,
evt->channel_7};
for (uint8_t i=0; i<rpt_gamepad_len; i++){
Serial.println(tab[i]);
}
}
// plik *.h
#include <hiduniversal.h>
struct EventData{
uint8_t channel_1, channel_2, channel_3, channel_4, channel_5, channel_6, channel_7;
};
#define rpt_gamepad_len sizeof(EventData)/sizeof(uint8_t)
class Events{
public:
virtual void OnChanged(const EventData *evt);
};
class ReportParser : public HIDReportParser{
Events *padEvents;
uint8_t oldPad[rpt_gamepad_len];
public:
ReportParser(Events *evt) : padEvents(evt){};
virtual void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
};
Jest to przechwytywanie przycisków z gamepada przez ardruino za pomocą usb shield. Chcę otrzymane wyniki wpakować do tablicy i przesłać do drugiego ardruino.