Electric longboard - CODE
Help me by sharing this post



This is the code used with the Electric longboard project. This will read the PWM valeus from the radio receiver using interruptions. And then it will map the valeus to the desired range and also add a small delay so the acceleration won't be too fast.


Download PWM code: (last update 03/01/2019)



Arduino DIY electric longboard circuit





/*  Code for electric longboard PWM code
 *  Tutorial webpage: https://www.electronoobs.com/eng_robotica_tut12.php
 *  Schematic: https://www.electronoobs.com/eng_robotica_tut12_sch1.php
 *  Part list: https://www.electronoobs.com/eng_robotica_tut12_parts1.php */

#include <Servo.h>;                         //We need this library for the PWm signal
Servo motor;                                //We create the servo pin, later attach to D3

//We create variables for the time width values of each PWM input signal
unsigned long counter_1, current_count;

//We create 4 variables to stopre the previous value of the input signal (if LOW or HIGH)
byte last_CH1_state;

int THROTTLE = 1500;
int LAST_THROTTLE = 1500;
int PWM_VALUE = 1500;
int THROTTLE_MAPED = 0;

void setup() {
  motor.attach(3);
  motor.writeMicroseconds(1505);            //The range of this ESC is 1000us to 1500 for CW and 1500 to 2000us for CCW
  PCICR |= (1 << PCIE0);                    //enable PCMSK0 scan                                                 
  PCMSK0 |= (1 << PCINT0);                  //Set pin D8 trigger an interrupt on state change. 
  
  Serial.begin(250000);  
  delay(500);
}

void loop() {
  /*My ESC has ranges from 1500 to 2100 for forward adn from 1500 to 1000 for backwards*/
  
  THROTTLE_MAPED = map(THROTTLE,1085,2100,1000,2000);     //Change the range here.
  THROTTLE_MAPED = THROTTLE_MAPED - 50;
  
  if(THROTTLE_MAPED > 1480)
  {
    if(THROTTLE_MAPED > PWM_VALUE)
    {
      PWM_VALUE = PWM_VALUE + 1;
      delay(7);
      LAST_THROTTLE = THROTTLE_MAPED;
    }
    
  
    if(THROTTLE_MAPED < PWM_VALUE)
    {
      PWM_VALUE = PWM_VALUE - 1;
      delay(7);
      LAST_THROTTLE = THROTTLE_MAPED;
    }
    PWM_VALUE = constrain(PWM_VALUE,1505,2100);
  }

  if(THROTTLE_MAPED < 1450)
  {
  
    if(THROTTLE_MAPED < PWM_VALUE)
    {
      PWM_VALUE = PWM_VALUE - 1;
      delayMicroseconds(2000);
      LAST_THROTTLE = THROTTLE_MAPED;
    }
    PWM_VALUE = constrain(PWM_VALUE,1350,2100);
  }

  
  
  motor.writeMicroseconds(PWM_VALUE);             //Finally write the PWM signal on pin D3
}




ISR(PCINT0_vect){
//First we take the current count value in micro seconds using the micros() function
  
  current_count = micros();
  ///////////////////////////////////////PWM input from receiver on D8
  if(PINB & B00000001){                                //We make an AND with the pin state register, We verify if pin 8 is HIGH???
    if(last_CH1_state == 0){                           //If the last state was 0, then we have a state change...
      last_CH1_state = 1;                              //Store the current state into the last state for the next loop
      counter_1 = current_count;                       //Set counter_1 to current value.
    }
  }
  else if(last_CH1_state == 1){                        //If pin 8 is LOW and the last state was HIGH then we have a state change      
    last_CH1_state = 0;                               //Store the current state into the last state for the next loop
    THROTTLE = current_count - counter_1;             //We make the time difference. Channel 1 is current_time - timer_1.
  }
}








yt_link
insta_link
fb_link
twitter_link

Digital supply


ADVERTISERS

WellPCB PCB Manufacturing
urPCB PCB Manufacturing
PCBGOGO PCB service

Gearbest Alfawise U30 2.8 inch Touch Screen DIY Desktop 3D Printer - U30 EU Plug Black
Alfawise U30 2.8 inch Touch Screen DIY Desktop 3D Printer - U30 EU Plug Black only $$162.89

AFFILATE

Gearbest Creality3D CR - 10S 3D Printer - EU Plug Upgrade Version Coffee and Black
Creality3D CR - 10S 3D Printer - EU Plug Upgrade Version Coffee and Black only $$352.94

Gearbest Creality 3D Ender-3 V-slot Prusa I3 DIY 3D Printer Kit 220 x 220 x 250mm Printing Size - EU Plug Black
Creality 3D Ender-3 V-slot Prusa I3 DIY 3D Printer Kit 220 x 220 x 250mm Printing Size - EU Plug Black only $$153.84

Gearbest Alfawise U20 Large Scale 2.8 inch Touch Screen DIY 3D Printer - EU - U20 EU Plug Black
Alfawise U20 Large Scale 2.8 inch Touch Screen DIY 3D Printer - EU - U20 EU Plug Black only $$253.39