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

    M5core 12 channel Server Module not work.

    Scheduled Pinned Locked Moved Modules
    1 Posts 1 Posters 3.8k Views 1 Watching
    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.
    • T Offline
      TheAlphaGhost
      last edited by TheAlphaGhost

      Hi Gents,

      i have a Problem with my Servo module. I buy the M5Core 12 channel Servo modul, and connect my servo on Port 0 from the Modul, but the Servo not work.

      I have a running example for the Arduino, which works well with the Servo. I think the problem is my logic to move the code from Arduino Uno to M5Core 12 Channel Servo modul.

      That is working with Arduino Uno:

      #include <SoftwareSerial.h>
      
      SoftwareSerial mySerial(10, 11); // RX, TX
      
      void setup()
      {
        Serial.begin(9600);
        mySerial.begin(115200);
        Serial.println("start");
      }
      
      void servo(char ServoId, char Mode, char Degrees, char Speed)
      {
      
        // Build checksum;
        int sum = ServoId + Mode + Degrees + Speed;
      
        char zero = 0;
        while (sum > 255)
        {
          sum -= 255;
        }
      
        //Head (Preamble)
        mySerial.write(0xFA); // Byte 1: Preamble;
        mySerial.write(0xAF); // Byte 2: Preamble;
      
        //Data
        mySerial.write(ServoId); // Byte 3: ServoID (See label of servo)
        mySerial.write(Mode);    // Byte 4: Command; for “go to command” we have = 0x01; we will try to find some other commands shortly
        mySerial.write(Degrees); // Byte 5: position = 120 + desired position in degrees;
      
        mySerial.write(Speed); // Byte 6: duration = duration in ms / 20
        mySerial.write(zero);  // Byte 7: 0x00 (? we don’t know what this is yet)
        mySerial.write(zero);  // Byte 8: 0x01 (? we don’t know what this is yet)
      
        //Check & End
        mySerial.write(sum);  // checksum = sum(byte 3 through 8) mod 256
        mySerial.write(0xED); // closure = 0xED (from “END”?)
      }
      
      void loop()
      {
        servo(16, 1, 45, 40);
        delay(2000);
      
        servo(16, 1, 0, 10);
        delay(2000);
      }
      

      And here i try move my code to M5Stack with 12 channel Servo Modul, which are not work on Port 0. Have any a idea ?

      #include <Arduino.h>
      #include <M5Stack.h>
      #include <Wire.h>
      
      #define SERVO_ADDR 0x53
      void setup()
      {
          M5.begin(true, false, true);
          M5.Power.begin();
          M5.Lcd.setTextFont(4);
          M5.Lcd.setCursor(70, 100);
          M5.Lcd.print("Servo Example");
      
          Wire.begin(21, 22, 115200);
      }
      
      void servo(char ServoId, char Mode, char Degrees, char Speed)
      {
      
          Wire.beginTransmission(SERVO_ADDR);
          Wire.write(0x00);
      
          // Build checksum;
          int sum = ServoId + Mode + Degrees + Speed;
      
          char zero = 0;
          while (sum > 255)
          {
              sum -= 255;
          }
      
          //Head (Preamble)
          Wire.write(0xFA); // Byte 1: Preamble;
          Wire.write(0xAF); // Byte 2: Preamble;
          Wire.write(ServoId); // Byte 3: ServoID (See label of servo)
          Wire.write(Mode);    // Byte 4: Command; for “go to command” we have = 0x01; we will try to find some other commands shortly
          Wire.write(Degrees); // Byte 5: position = 120 + desired position in degrees;
          Wire.write(Speed); // Byte 6: duration = duration in ms / 20
          Wire.write(zero);  // Byte 7: 0x00 (? we don’t know what this is yet)
          Wire.write(zero);  // Byte 8: 0x01 (? we don’t know what this is yet)
          Wire.write(sum);  // checksum = sum(byte 3 through 8) mod 256
          Wire.write(0xED); // closure = 0xED (from “END”?)
      
      
          Wire.endTransmission();
      }
      
      void loop()
      {
          servo(16, 1, 45, 40);
          delay(2000);
      
          servo(16, 1, 0, 10);
          delay(2000);
      }
      

      Can anyone help me, please... ?

      1 Reply Last reply Reply Quote 0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      • First post
        Last post