Adafruit-PWM-Servo-Driver-Library
arduino-ad-mux-lib
Adafruit-PWM-Servo-Driver-Library | arduino-ad-mux-lib | |
---|---|---|
3 | 1 | |
457 | 33 | |
1.3% | - | |
4.1 | 1.8 | |
29 days ago | about 3 years ago | |
C++ | C++ | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Adafruit-PWM-Servo-Driver-Library
-
help with arduino code please? extreme noob at it.
The source code you have there is from the example code here. In the example they give you will see that they are using the variable servonum to tell which of 8 servos they are driving (0 thru 7) in their example.
-
Servos move towards default set position before correcting towards provided set position. Can anyone provide some insight on what may be happening? Details and code in comments
These six servos are being controlled through an Adafruit servo shield (https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library), with angular setpoints sent over UART, and a default setpoint set at upload time. This variable is then overwritten with new values when a new UART command is sent.
-
Can't get 2 servos to move at the same time using this code
/* * Blender Animation to Servo via PCA9685 Example * * This example requires the Adafruit PCA9685 PWM Servo Driver Library: * https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library */
arduino-ad-mux-lib
-
Float values giving overflow
#include //library for transceiver (nrf24l01+ PA+LNA) https://github.com/nRF24/RF24 #include #include #include //library for multiplexer (74HC4067DB) https://github.com/stechio/arduino-ad-mux-lib using namespace admux; #include //library for display (SSD1306 128x64) https://github.com/adafruit/Adafruit_SSD1306 #include //library for I2C const int sig = A3; //signal pin const int s0 = 2; //address pin 0 const int s1 = 3; //address pin 1 const int s2 = 4; //address pin 2 const int s3 = 5; //address pin 3 const int up1pin = 1; //foward left motor const int down1pin = 0; //backwards left motor const int up2pin = 3; //foward right motor const int down2pin = 2; //backwards right motor const int modifierpin = 4; //pwm speed modifier const int trimmerpin = 5; //pwm trimmer const int navlightpin = 6; //navigation lights const int intlightpin = 7; //interior lights const int extlightpin = 8; //exterior lights const int camerapin = 9; //fpv camera const int autoModepin = 10; //autonomous mode const int CE = 9; //radio CE pin const int CSN = 10; //radio CSN pin const byte address[5] = "00001"; //pipe address float latFromSerial; //parsed lattitude from serial input float lonFromSerial; //parsed longitude from serial input float batteryVoltage; //calculated battery voltage float batteryPercentage; //estimated battery charge int timer; //millis timer const int waypointSize = 50; //number of waypoints const PROGMEM float waypoint[waypointSize][2] = { //waypoints for autoMode() {51.966571, 6.2743379}, {51.966772, 6.2744777}, {51.96699149689901, 6.274366197893084}, {51.9671527562416, 6.274120865412113}, {51.96729645199409, 6.273423270736089}, {51.96743080331666, 6.272665240634041}, {51.96754042621848, 6.271857581899409}, {51.96776236209548, 6.270915330645548}, {51.96798193464908, 6.270221004668555}, {51.96828516667115, 6.269413032485236}, {51.96872940066316, 6.268397202672209}, {51.9690764880844, 6.267825125563484}, {51.96951599079974, 6.267264642338533}, {51.97011340024988, 6.266554277598022}, {51.97066084143675, 6.265542763068586}, {51.97101162702417, 6.264465224751552}, {51.97133799766154, 6.263262306712254}, {51.97164036068298, 6.262353231049387}, {51.97207885573615, 6.261205467922246}, {51.97247264722145, 6.260387048788263}, {51.9730446081463, 6.259285804638093}, {51.97348333946684, 6.258252773125921}, {51.97383500264349, 6.257083089055559}, {51.97411491189212, 6.255751674816601}, {51.97421125024911, 6.254641997085617}, {51.97428144275973, 6.253337927743205}, {51.97438642575778, 6.252258957953291}, {51.97461230120062, 6.251185555711}, {51.97496391672023, 6.250073663806153}, {51.97535356652884, 6.249136612734796}, {51.97593199219659, 6.247849009012851}, {51.97673996614692, 6.246219928264511}, {51.97759975319016, 6.244774079377116}, {51.97970812227523, 6.24269840869726}, {51.98056951741261, 6.241148196857345}, {51.98138148466968, 6.238582344717527}, {51.98226488661611, 6.236909516229776}, {51.9828880442564, 6.236150123494202}, {51.98356664827293, 6.235581737840659}, {51.9846292540927, 6.235086763643169}, {51.98620084359441, 6.234541602496764}, {51.9869680375904, 6.233970146843246}, {51.9884155464398, 6.232522126238424}, {51.98950934373955, 6.231079775783453}, {51.99067711020479, 6.229346290429132}, {51.99142243067518, 6.228071305330573}, {51.99218280844037, 6.226417272538562}, {51.99276345055314, 6.224660968088269}, {51.9928317367713, 6.22340383146351}, {51.99303408040588, 6.222658471539628}, }; int waypointCounter = 0; struct values{ //structure for control values bool up1; bool down1; bool up2; bool down2; int trimmer; int modifier; bool navlight; bool intlight; bool extlight; bool camera; bool autoMode; float targetLat; float targetLon; }; struct info{ //structure for answer from boat int autoMode; int battery; int boatHeading; float boatSpeed; int targetDistance; int targetHeading; }; struct values control; //control values struct info answer; //answer from boat Mux mux(Pinset(s0, s1, s2, s3)); //multiplexer object Adafruit_SSD1306 display(128, 64, &Wire, -1); //display object RF24 radio(CE, CSN); //wireless object void setup() { radio.begin(); //start radio service as transmitter radio.setPALevel(RF24_PA_MIN); //transmission power radio.setDataRate(RF24_250KBPS); //data rate radio.enableAckPayload(); //enable ack payloads radio.setRetries(5,5); //delay, count radio.openWritingPipe(address); //set pipe address radio.stopListening(); //stop listening Serial.setTimeout(10); //set timeout for waiting for incoming data Serial.begin(115200); //set serial baudrate if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } delay(2000); //allow startup of display display.clearDisplay(); //clear the display display.setTextSize(1); //standard 1:1 pixel scale display.setTextColor(WHITE); //set white text display.cp437(true); //use full 256 char 'Code Page 437' font control.targetLat = 51.966451; //default target lattitude control.targetLon = 6.274279; //default target longitude } void loop() { if(millis() - timer >= 100){ //activate every 100 milliseconds timer = millis(); //new timestamp mux.signalPin(sig, INPUT_PULLUP, PinType::Digital); //read all digital switches control.up1 = !mux.read(up1pin); control.down1 = !mux.read(down1pin); control.up2 = !mux.read(up2pin); control.down2 = !mux.read(down2pin); control.navlight = !mux.read(navlightpin); control.intlight = !mux.read(intlightpin); control.extlight = !mux.read(extlightpin); control.camera = !mux.read(camerapin); control.autoMode = !mux.read(autoModepin); mux.signalPin(sig, INPUT, PinType::Analog); //read the analog potentiometers control.modifier = mux.read(modifierpin); control.trimmer = mux.read(trimmerpin); /* if(Serial.available()){ //get target location from serial input latFromSerial = Serial.parseFloat(); //read lattitude lonFromSerial = Serial.parseFloat(); //read longitude if(latFromSerial != 0) //only non zero values control.targetLat = latFromSerial; if(lonFromSerial != 0) //only non zero values control.targetLon = lonFromSerial; } */ control.targetLat = waypoint[waypointCounter][0]; //set target waypoint lattitude control.targetLon = waypoint[waypointCounter][1]; //set target waypoint longitude if(answer.autoMode == 1 && waypointCounter < waypointSize-1) //set next waypoint waypointCounter++; if(control.autoMode && control.camera) //if autoMode is activated use trim potmeter and camera button to override waypoint selection waypointCounter = map(control.trimmer, 0, 1023, 0, waypointSize-1); if(radio.write(&control, sizeof(control))){ //send control values Serial.println(F("Data sent successfully")); if(radio.isAckPayloadAvailable()){ //do we get an answer back? radio.read(&answer, sizeof(answer)); //read answer batteryVoltage = (batteryVoltage+(answer.battery*15.0/1023.0))/2.0; //calculate battery voltage (measured as 1/3th with voltage divider) batteryPercentage = (batteryVoltage-11.5)/(13.0-11.5)*100; //estimate battery charge remaining answerToDisplay(); //put all info on oled display } else{ Serial.println(F("Message received but no answer...")); display.clearDisplay(); //display message for no answer from boat display.setCursor(0, 1); display.print("RC Boat: no answer"); display.display(); } Serial.print((control.targetLat)); Serial.print((" ")); Serial.println((control.targetLon)); } else{ Serial.println(F("Data sending failed")); //display message for no connection to boat display.clearDisplay(); display.setCursor(0, 1); display.print("RC Boat: no contact"); display.display(); } } } void answerToDisplay(){ //function for putting answer from boat on display display.clearDisplay(); display.setCursor(0, 1); display.print("RC Boat: connected!"); display.setCursor(0, 15); display.print("Battery: "); display.print(batteryPercentage, 0); display.print("% "); display.print(batteryVoltage, 1); display.print("V"); display.setCursor(0, 29); display.print("Course: "); display.print(answer.boatHeading); display.print((char)248); display.print(" "); display.print(answer.boatSpeed, 1); display.print("km/h"); display.setCursor(0, 43); display.print("AutoMode: "); if(control.autoMode == 1) display.print(answer.autoMode); else display.print("off"); display.print(" "); display.print(waypointCounter); display.setCursor(0, 57); display.print("Target: "); display.print(answer.targetDistance); display.print("m "); if(answer.targetHeading >= 0) display.print("+"); display.print(answer.targetHeading); display.print((char)248); display.display(); }
What are some alternatives?
sbus - Arduino and CMake library for communicating with SBUS receivers and servos.
RF24 - OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices
PCF8575_library - i2c 16bits digital expander with i2c digital expander for Arduino, Raspberry Pi Pico and rp2040 boards, esp32, SMT32 and ESP8266. Can read write digital values with only 2 wire. Very simple and encoder support. Uncommet NOT_SEQUENTIAL_PINOUT define to have pins like datasheet and not sequential one.
ArduinoXInput - XInput library for USB capable Arduino boards
HCSR04-ultrasonic-sensor-lib - Arduino lib for HCSR04 ultrasonic sensor
MD_MAX72XX - LED Matrix Library
Parallax-FeedBack-360-Servo-Control-Library-4-Arduino - Arduino library which control Parallax FeedBack 360° High Speed Servo easy.
Adafruit_SSD1306 - Arduino library for SSD1306 monochrome 128x64 and 128x32 OLEDs
vtm - Text-based desktop environment
6dof_arm_firmware
ServoProject - Getting the most out of your hobby servo