123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include <M5Stack.h>
- void WriteRelayReg( int regAddr, int data )
- {
- Wire.beginTransmission(0x26);
- Wire.write(regAddr);
- Wire.write(data);
- Wire.endTransmission();
- Serial.printf("[ W ] %02X : %02X. \r\n", regAddr, data);
- }
- int readRelayReg(int regAddr)
- {
- Wire.beginTransmission(0x26);
- Wire.write(regAddr);
- Wire.endTransmission();
- Wire.requestFrom(0x26, 1);
- int data = Wire.read() & 0x00ff;
- Serial.printf("[ R ] %02X : %02X. \r\n", regAddr, data);
- return data;
- }
- void WriteRelayNumber( int number, int state )
- {
- int StateFromDevice = readRelayReg(0x11);
- if( state == 0 )
- {
- StateFromDevice &= ~( 0x01 << number );
- }
- else
- {
- StateFromDevice |= ( 0x01 << number );
- }
- WriteRelayReg(0x11,StateFromDevice);
- }
- void setup() {
-
- M5.begin(true, true, true, true);
- M5.Lcd.setCursor(90, 0, 4);
- M5.Lcd.setTextColor(TFT_GREEN, TFT_BLACK);
- M5.Lcd.print("4-RELAY UNIT");
- M5.Lcd.setCursor(0, 220, 2);
- M5.Lcd.print("Independent Switch");
- M5.Lcd.setCursor(130, 220, 2);
- M5.Lcd.print("LED Sync/Async");
- M5.Lcd.setCursor(250, 220, 2);
- M5.Lcd.print("ALL Relay");
- M5.Lcd.setCursor(20, 50, 4);
- M5.Lcd.print("Relay State: ");
- M5.Lcd.setCursor(20, 80, 4);
- M5.Lcd.print("Sync Mode: ");
- readRelayReg(0x10);
- readRelayReg(0x11);
- WriteRelayReg(0x10,1);
- WriteRelayReg(0x11,0);
-
- }
- int count_i = 0;
- bool flag_led, flag_relay = false;
- void loop() {
- if(M5.BtnA.wasPressed()){
- M5.Lcd.fillRect(160, 50, 100, 20, TFT_BLACK);
- M5.Lcd.setCursor(160, 50, 4);
- M5.Lcd.printf("%d ON", count_i);
- WriteRelayReg(0x11,(0x01 << count_i));
- count_i++;
- if( count_i >= 4 ) count_i = 0;
- }
- if(M5.BtnB.wasPressed()){
- M5.Lcd.fillRect(160, 80, 100, 20, TFT_BLACK);
- if(!flag_led){
- M5.Lcd.setCursor(160, 80, 4);
- M5.Lcd.print("Async");
- WriteRelayReg(0x10, 0);
- }else {
- M5.Lcd.setCursor(160, 80, 4);
- M5.Lcd.print("Sync");
- WriteRelayReg(0x10, 1);
- }
- flag_led = !flag_led;
- }
- if(M5.BtnC.wasPressed()){
- M5.Lcd.fillRect(160, 50, 100, 20, TFT_BLACK);
- for(int i=0; i<4; i++){
- if(!flag_relay) {
- M5.Lcd.setCursor(160, 50, 4);
- M5.Lcd.print("ON");
- WriteRelayNumber(i, 1);
- }else {
- M5.Lcd.setCursor(160, 50, 4);
- M5.Lcd.print("OFF");
- WriteRelayNumber(i, 0);
- }
- }
- flag_relay = !flag_relay;
- }
- M5.update();
- }
|