Skip to content

Commit 67e04d3

Browse files
Rocketctleonardocavagnis
authored andcommitted
added support for opto relay
1 parent 1f0f983 commit 67e04d3

File tree

4 files changed

+1271
-1198
lines changed

4 files changed

+1271
-1198
lines changed
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#include <Modulino.h>
2+
3+
ModulinoRelay relay;
4+
5+
void setup() {
6+
Serial.begin(115200);
7+
Modulino.begin();
8+
relay.begin();
9+
10+
}
11+
void loop() {
12+
relay.on();
13+
if(relay.getStatus())
14+
{
15+
Serial.println("Relay state ON!");
16+
}
17+
delay(1000);
18+
relay.off();
19+
if(!(relay.getStatus()))
20+
{
21+
Serial.println("Relay state OFF!");
22+
}
23+
Serial.println();
24+
delay(1000);
25+
}

examples/Utilities/AddressChanger/AddressChanger.ino

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ String pinstrapToName(uint8_t pinstrap) {
3434
return "JOYSTICK";
3535
case 0x7C:
3636
return "BUTTONS";
37+
case 0x28:
38+
return "RELAY";
3739
case 0x76:
3840
case 0x74:
3941
return "ENCODER";

src/Modulino.h

+52-6
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class ModulinoJoystick : public Module {
182182
return (last_status[1] < 128 ? (128 - last_status[1]) : -(last_status[1] - 128));
183183
}
184184
virtual uint8_t discover() {
185-
for (int i = 0; i < match.size(); i++) {
185+
for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) {
186186
if (scan(match[i])) {
187187
return match[i];
188188
}
@@ -192,7 +192,7 @@ class ModulinoJoystick : public Module {
192192
private:
193193
uint8_t last_status[3];
194194
protected:
195-
std::vector<uint8_t> match = { 0x58 }; // same as fw main.c
195+
uint8_t match[1] ={ 0x58 }; // same as fw main.c
196196
};
197197

198198
class ModulinoBuzzer : public Module {
@@ -239,18 +239,17 @@ class ModulinoVibro : public Module {
239239
write(buf, 8);
240240
}
241241
virtual uint8_t discover() {
242-
for (int i = 0; i < match.size(); i++) {
242+
for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) {
243243
if (scan(match[i])) {
244244
return match[i];
245245
}
246246
}
247247
return 0xFF;
248248
}
249249
protected:
250-
std::vector<uint8_t> match = { 0x70 }; // same as fw main.c
250+
uint8_t match[1] = { 0x70 }; // same as fw main.c
251251
};
252252

253-
254253
class ModulinoColor {
255254
public:
256255
ModulinoColor(uint8_t r, uint8_t g, uint8_t b)
@@ -582,4 +581,51 @@ class ModulinoDistance : public Module {
582581
_distance_api* api = nullptr;
583582
};
584583

585-
#endif
584+
class ModulinoRelay : public Module {
585+
public:
586+
ModulinoRelay(uint8_t address = 0xFF)
587+
: Module(address, "RELAY") {}
588+
bool update() {
589+
uint8_t buf[3];
590+
auto res = read((uint8_t*)buf, 3);
591+
auto ret = res && (buf[0] != last_status[0] || buf[1] != last_status[1] || buf[2] != last_status[2]);
592+
last_status[0] = buf[0];
593+
last_status[1] = buf[1];
594+
last_status[2] = buf[2];
595+
return ret;
596+
}
597+
void on() {
598+
uint8_t buf[3];
599+
buf[0] = 1;
600+
buf[1] = 0;
601+
buf[2] = 0;
602+
write((uint8_t*)buf, 3);
603+
return;
604+
}
605+
void off() {
606+
uint8_t buf[3];
607+
buf[0] = 0;
608+
buf[1] = 0;
609+
buf[2] = 0;
610+
write((uint8_t*)buf, 3);
611+
return;
612+
}
613+
bool getStatus() {
614+
update();
615+
return last_status[0];
616+
}
617+
virtual uint8_t discover() {
618+
for (unsigned int i = 0; i < sizeof(match)/sizeof(match[0]); i++) {
619+
if (scan(match[i])) {
620+
return match[i];
621+
}
622+
}
623+
return 0xFF;
624+
}
625+
private:
626+
bool last_status[3];
627+
protected:
628+
uint8_t match[1] = { 0x28 }; // same as fw main.c
629+
};
630+
631+
#endif // ARDUINO_LIBRARIES_MODULINO_H

0 commit comments

Comments
 (0)