void initScan_i2c(sState *prev){ Wire.begin(); myEnc.setLimits(0,32767); myEnc.write(0); myEnc.setMultiplicators(1,5); scan_i2c(success, unknow_error); }
void setup() { Serial.begin(115200); Wire.begin(); scan_i2c(); wifiControl.setup(sids, passwords); timeControl.setup(); for (int i=0; i < NUM_RELAYS; i++) { Serial.print("Sending in #"); Serial.print(i); Serial.print(" on pin "); Serial.println(POW_PINS[i]); } Relays.setup(POW_PINS); ledControl.setup(); webControl.setup(); ledcSetup(SOUND_CHANNEL, 1000, 13); ledcAttachPin(SOUND_PIN, SOUND_CHANNEL); }
void ParseLine() { char * strtokIndx; char delimiter[] = " \n"; std::string command = ""; std::string parameter = ""; std::vector<std::string> parameters; // get the first element strtokIndx = strtok(buffer, delimiter); command.assign(strtokIndx, strlen(strtokIndx)); Serial.print("Command received: ["); Serial.print(command.c_str()); Serial.println("]"); strtokIndx = strtok(NULL, delimiter); while(strtokIndx != NULL) { parameter.assign(strtokIndx, strlen(strtokIndx)); Serial.print("Parameter received: ["); Serial.print(parameter.c_str()); Serial.println("]"); parameters.push_back(parameter); strtokIndx = strtok(NULL, delimiter); } if (command == "relay") { // Relay has further options, on or off if (parameters.at(0) == "on") { Relays.setState(atoi(parameters.at(1).c_str()), 1); } else if (parameters.at(0) == "off") { Relays.setState(atoi(parameters.at(1).c_str()), 0); } else if (parameters.at(0) == "get") { Relays.printStates(); } } else if (command == "i2c") { // I2C just returns the current devices scan_i2c(); } else if (command == "beep") { int value = atoi(parameters.at(0).c_str()); uint32_t duty = (8191 / 255) * min(value, 255); Serial.print("Beeping "); Serial.print(value); Serial.print(" duty "); Serial.println(duty); ledcWrite(SOUND_CHANNEL, duty); delay(1000); ledcWrite(SOUND_CHANNEL, 0); } else if (command == "time") { if (parameters.at(0) == "get") { timeControl.printDate(); } else if (parameters.at(0) == "set") { timeControl.setDate(3, 2, 1, 0, 3, 11, 18); timeControl.printDate(); } } }
sState* testScan_i2c(){ static int memPosition = -1; static int current_add = 7; int Position = myEnc.read(); //position du selecteur modulo le nombre de choix possible if(Position != memPosition){ //on affiche que si on change de position byte add=0; if(Position > memPosition){ for(int i=current_add+1;i<120;i++){ if(success[i] || unknow_error[i]){ add=i; break; } } } if(Position < memPosition){ for(int i=current_add-1;i>8;i--){ if(success[i] || unknow_error[i]){ add=i; break; } } } if(add){ display(add,success, unknow_error); current_add = add; } if((!add && Position < memPosition) || !Position){ int nb=0; for(int i=8;i<120;i++){ if(success[i]) nb++; } afficher(0,1,"%d Devices(s)",nb); current_add -= 1; } memPosition=Position; } if(!digitalRead(SELECT)){ //si on appui sur select: scan_i2c(success, unknow_error); int nb=0; for(int i=8;i<120;i++){ if(success[i]) nb++; } afficher(0,1,"%d Devices(s)",nb); current_add = 7; } if(!digitalRead(RETOUR)){ delay(DELAY_BOUNCE); //anti rebond while(!digitalRead(RETOUR)); //attente du relachement du bouton return(&sMenu_principal); } return NULL; }