Sziasztok
A kérdésem a következő: #include <Adafruit_MCP23008.h> Adafruit_MCP23008 mcp0; // Create mpc instance Adafruit_MCP23008 mcp1; // Create mpc instance Adafruit_MCP23008 mcp2; // Create mpc instance #define button 0 // PushButton #define laser 1 // Laser Diode On #define redLedO 2 // Red Led OUT #define greenLedO 3 // Green Led OUT #define photoDiode 5 // Photo Diode #define redLedI 6 // Red Led IN #define greenLedI 7 // Green Led IN void setup() { char mcpName0 = "mcp0"; char mcpName1 = "mcp1"; char mcpName2 = "mcp2"; String *Names[3] = { &mcpName0, &mcpName1, &mcpName2 }; int i = 0; for (auto a : Names) { *a -> begin(i); // 0,1,2 = 0x20,0x21,0x22 address *a -> pinMode(button, INPUT); *a -> pullUp(button, HIGH); // vagy így *a.pinMode(laser, OUTPUT); *a.pinMode(redLedO, OUTPUT); *a.pinMode(greenLedO, OUTPUT); *a.pinMode(photoDiode, INPUT); *a.pinMode(redLedI, OUTPUT); *a.pinMode(greenLedI, OUTPUT); i++; } } A fenti módszer nem működik.
Így működik: mcp0.begin(0); mcp0.pinMode(button, INPUT); Elég macerás volt háromszor minden szenzort led-et meg nyomógombot lekezelni. Nem élet-halál kérdés csak érdekelne a megoldás (ha van), de semmilyen módszert nem találtam rá. Előre is köszönöm a segítséget.
- 207 megtekintés
Hozzászólások
Hat, ize, az mcp0 az egy objektumpeldany es nem egy string... Amit csinalnal a fenti ciklusos megoldassal az az hogy "mcp0".begin(0); de ugye a stringnek nincs ilyen metodusa :)
Az Adafruit_MCP23008 tipusu objektumokat tedd bele egy tombbe es akkor ugy!
- A hozzászóláshoz be kell jelentkezni
Miért kéne működnie? Az a-ban stringek vannak, nem Adafruit_MCP23008 típusú elemek.
Ha esetleg így próbálnád meg:
Adafruit_MCP23008* Names[3] = { mcp0, mcp1, mcp2 };
akkor a ciklusod valóban Adafruit_MCP23008 típusú elemeken iterálna végig.
Tanuldd még kicsit a C++ nyelvet, ennek semmi köze Arduinohoz.
Eleve deklarálhattad volna a három objektumot tömbben is, nem kell külön létezzen az mcp0, mcp1, mcp2 változó.
- A hozzászóláshoz be kell jelentkezni
Köszi. Kipróbálom.
- A hozzászóláshoz be kell jelentkezni
Így működik babán. Köszi.
static Adafruit_MCP23008 mcpNames[1] = { Adafruit_MCP23008() }
void setup(){
int i = 1;
for (auto &a : mcpNames) {
a.begin(i);
a.pinMode(redLedO, OUTPUT);
a.pinMode(greenLedO, OUTPUT);
}
}
void loop(){
for (auto &a : mcpNames) {
a.digitalWrite(redLedO, HIGH);
delay(500);
a.digitalWrite(redLedO, LOW);
delay(500);
}
}
Összeraktam a régi panelt, és ég forog világít.
- A hozzászóláshoz be kell jelentkezni
Egy tanács: tanuld meg alaposan a C++ nyelvet, mert látszik, hogy a kódot másoltad valahonnan, hiszen nem érted, melyik része mit csinál, és miért nem működött az eredeti elképzelésed.
Ha ilyen beágyazott eszközöket szeretnél magas szinten programozni, tényleg vesd bele magad a C++ megtanulásába.
- A hozzászóláshoz be kell jelentkezni