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 Esp32ServoController::init() { // Setup ledc servos for (byte i = 0; i < LEDC_N_SERVOS; i++) { byte channel = i; byte servoPin = ledcServoPins[i]; ledcSetup(channel, 50, 16); // channel X, 50 Hz, 16-bit depth ledcAttachPin(servoPin, channel); // GPIO servoPin on channel X ledcWrite(channel, servoMid); // Set initial (midpoint) position } // Setup MCPWM servos // Setup which MCPWM units are linked to which pins mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, mcpwmServoPins[0]); mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, mcpwmServoPins[1]); mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM1A, mcpwmServoPins[2]); // Configure MCPWM parameters mcpwm_config_t pwm_config; pwm_config.frequency = 50; //frequency = 50Hz, i.e. for every servo motor time period should be 20ms pwm_config.cmpr_a = MCPWM_DUTY_MID; //duty cycle of PWMxA pwm_config.cmpr_b = MCPWM_DUTY_MID; //duty cycle of PWMxb pwm_config.counter_mode = MCPWM_UP_COUNTER; pwm_config.duty_mode = MCPWM_DUTY_MODE_0; mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Configure PWM0A & PWM0B with above settings mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_1, &pwm_config); //Configure PWM1A & PWM1B with same settings // Set some initial positions // TODO: surely this shouldn't be required? mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, MCPWM_DUTY_MID); mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, MCPWM_DUTY_MID); mcpwm_set_duty_in_us(MCPWM_UNIT_0, MCPWM_TIMER_1, MCPWM_OPR_A, MCPWM_DUTY_MID); }
ESP32PWM::ESP32PWM() : USBPlatine(false), dir(0), pwm(0), motorStart(40), motorFullSpeed(255),ledToggle(0) { for (int i=0; i<2; i++) { pinMode(inApin[i], OUTPUT); pinMode(inBpin[i], OUTPUT); pinMode(pwmpin[i], OUTPUT); pinMode(enpin[i], INPUT); } for (int i=0; i<2; i++) { digitalWrite(inApin[i], LOW); digitalWrite(inBpin[i], LOW); ledcSetup(i, MOTOR_FREQUENCY, 8); ledcAttachPin(pwmpin[i], i); } for(int i=0; i<2; i++) { DEBUGF("Motor %d", i); DEBUGF("inA[%d]=%d", i, digitalRead(inApin[i])); DEBUGF("inB[%d]=%d", i, digitalRead(inBpin[i])); DEBUGF("en[%d]=%d", i, digitalRead(enpin[i])); } if(infoLedPin) { pinMode(infoLedPin, OUTPUT); } }