🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    I would like to send a PPM with M5 stack Fire

    PROJECTS
    2
    9
    12.7k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      amn
      last edited by

      HI,
      after to consult many web page I don't find a solution
      I would like to dialog with VESC to control the speed motor via PPN signal (NO PWM)
      Somebody have an idea ? or know how to do this ?
      thx
      Alain

      amn

      1 Reply Last reply Reply Quote 0
      • m5stackM
        m5stack
        last edited by

        you could try search some keywords esp32 ppm `Arduino in Github. maybe some lib could do that.

        https://github.com/search?q=arduino+ppm

        1 Reply Last reply Reply Quote 0
        • A
          amn
          last edited by

          thx, found this https://github.com/schinken/PPMEncoder
          try later

          amn

          1 Reply Last reply Reply Quote 0
          • A
            amn
            last edited by

            Hi
            no find yet a correct solution
            somebody have exemple ?
            other this need for me to return to my arduino board.
            Thx

            amn

            1 Reply Last reply Reply Quote 0
            • m5stackM
              m5stack
              last edited by

              maybe you could try their example:

              https://github.com/kolod/Arduino-PPM-Generator

              https://github.com/smilexth/Generate-PPM-Signal/blob/master/Generate-PPM-Signal.ino

              1 Reply Last reply Reply Quote 0
              • A
                amn
                last edited by

                Hi
                already test these program, no compatble with ESP32 or M5 stack seem a problem of timer.
                turn on the loop.

                type of error:
                error: 'TCCR1A' was not declared in this scope

                amn

                m5stackM 1 Reply Last reply Reply Quote 0
                • m5stackM
                  m5stack @amn
                  last edited by

                  @amn said in I would like to send a PPM with M5 stack Fire:

                  'TCCR1A' was not declared in this scope

                  'TCCR1A' was not declared in this scope

                  that looks like is a grammar error..... you just need define the function before you use it,

                  A 1 Reply Last reply Reply Quote 0
                  • A
                    amn @m5stack
                    last edited by

                    @m5stack said in I would like to send a PPM with M5 stack Fire:
                    read on the web the timer is different between Arduino and ESP32
                    could be nice to find sample of code.
                    other this I'll continue my investigation
                    thx

                    amn

                    A 1 Reply Last reply Reply Quote 0
                    • A
                      amn @amn
                      last edited by

                      @amn
                      HI found this code: (how to adapt with potentiometre for the lenght of pulse , ?)

                      //////////////////////CONFIGURATION///////////////////////////////
                      #define chanel_number 1 //set the number of chanels
                      #define default_servo_value 1500 //set the default servo value
                      #define PPM_FrLen 22500 //set the PPM frame length in microseconds (1ms = 1000µs)
                      #define PPM_PulseLen 300 //set the pulse length
                      #define onState 1 //set polarity: 1 is positive, 0 is negative
                      #define sigPin 36 //set 10 PPM signal pin on the arduino

                      /this array holds the servo values for the ppm signal
                      change theese values in your code (usually servo values are between 1000 and 2000)
                      /
                      int ppm[chanel_number];

                      void setup(){
                      // Initialize the M5Stack object
                      M5.begin();
                      /*
                      Power chip connected to gpio21, gpio22, I2C device
                      Set battery charging voltage and current
                      If used battery, please call this function in your project
                      */
                      M5.Power.begin();

                      M5.Lcd.fillScreen(BLACK);
                      M5.Lcd.setTextColor(GREEN , BLACK);
                      M5.Lcd.setTextSize(2);

                      //initiallize default ppm values
                      for(int i=0; i<chanel_number; i++){
                      ppm[i]= default_servo_value;
                      }

                      pinMode(sigPin, OUTPUT);
                      digitalWrite(sigPin, !onState); //set the PPM signal pin to the default state (off)
                      }

                      void loop(){
                      //put main code here
                      ppmWrite();

                      }

                      void ppmWrite(){ //generate PPM signal
                      static unsigned long lastFrLen;
                      static unsigned long lastServo;
                      static unsigned long lastPulse;
                      static boolean PPM_run;
                      static boolean pulse;
                      static boolean pulseStart = true;
                      static byte counter;
                      static byte part = true;

                      if(micros() - lastFrLen >= PPM_FrLen){ //start PPM signal after PPM_FrLen has passed
                      lastFrLen = micros();
                      PPM_run = true;
                      }

                      if(counter >= chanel_number){
                      PPM_run = false;
                      counter = 0;
                      pulse = true; //put out the last pulse
                      }

                      if(PPM_run){
                      if (part){ //put out the pulse
                      pulse = true;
                      part = false;
                      lastServo = micros();
                      }
                      else{ //wait till servo signal time (values from the ppm array) has passed
                      if(micros() - lastServo >= ppm[counter]){
                      counter++; //do the next channel
                      part = true;
                      }
                      }
                      }

                      if(pulse){
                      if(pulseStart == true){ //start the pulse
                      digitalWrite(sigPin, onState);
                      pulseStart = false;
                      lastPulse = micros();
                      }
                      else{ //will wait till PPM_PulseLen has passed and finish the pulse
                      if(micros() - lastPulse >= PPM_PulseLen){
                      digitalWrite(sigPin, !onState);
                      pulse = false;
                      pulseStart = true;
                      }
                      }
                      }
                      }

                      amn

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post