123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #include "Arduino.h"
- #include "AX12A.h"
- #define DirectionPin (10u)
- #define BaudRate (1000000ul)
- #define ID1 (4u)
- #define ID2 (5u)
- #include <XYZrobotServo.h>
- #ifdef SERIAL_PORT_HARDWARE_OPEN
- #define servoSerial SERIAL_PORT_HARDWARE_OPEN
- #else
- #include <SoftwareSerial.h>
- SoftwareSerial servoSerial(10, 11);
- #endif
- int input = 0;
- XYZrobotServo servo1(servoSerial, 2);
- const uint8_t playtime = 100;
- const int max_angle = 712,min_angle = 312;
- const byte button_oben = 20;
- const byte button_unten = 21;
- int ain1 = 4;
- int ain2 = 5;
- int pwma = 8;
- int x ,position;
- int val[10] = {0,0,0,0,0};
- int choice;
- void ax12_1(int position){
- if((position<min_angle) || (position>max_angle)){
- Serial.print("invalide position. Try again");
- return;
- }
- ax12a.moveSpeed(ID1,position, playtime);
- }
- void ax12_2(int position){
- if((position<min_angle) || (position>max_angle)){
- Serial.print("invalide position. Try again");
- return;
- }
- ax12a.moveSpeed(ID2,position, playtime);
- }
- void a116(int position){
- if((position<min_angle) || (position>max_angle)){
- Serial.print("invalide position. Try again");
- return;
- }
- servo1.setPosition(position, playtime);
- }
- void motor(int speed, int dir){
- if (dir == 0){
- digitalWrite(ain1,HIGH);
- digitalWrite(ain2,LOW);
- }
- else{
- digitalWrite(ain1,LOW);
- digitalWrite(ain2,HIGH);
- }
- analogWrite(pwma,speed);
- }
- void auto_close(){
- // Serial.print("Servo 1: ");
- // Serial.println(ax12a.readLoad(ID1));
- // Serial.print("Servo 2: ");
- // Serial.println(ax12a.readLoad(ID2));
- // delay(300);
- while(((ax12a.readLoad(ID1)<1450)) && (ax12a.readLoad(ID2)<1400)){
- Serial.print("Servo 1: ");
- Serial.println(ax12a.readLoad(ID1));
- Serial.print("Servo 2: ");
- Serial.println(ax12a.readLoad(ID2));
- ax12a.move(ID1,max_angle);
- ax12a.move(ID2,min_angle);
- }
-
- ax12a.move(ID1,ax12a.readPosition(ID1)+10);
- ax12a.move(ID2,ax12a.readPosition(ID2)-10);
- }
-
- void setup() {
- Serial.begin(9600);
- Serial.setTimeout(1);
- ax12a.begin(BaudRate, DirectionPin, &Serial3);
- ax12a.setEndless(ID1, OFF);
- ax12a.setEndless(ID2, OFF);
- ax12a.setMaxTorque(ID1, 1000);
- ax12a.setMaxTorque(ID2, 1000);
- servoSerial.begin(115200);
- ax12a.move(ID1,512);
- ax12a.move(ID2,512);
- servo1.setPosition(512, playtime);
- pinMode(button_oben,INPUT_PULLUP);
- pinMode(button_unten,INPUT_PULLUP);
- attachInterrupt(digitalPinToInterrupt(button_oben),interrupt1, LOW);
- attachInterrupt(digitalPinToInterrupt(button_unten),interrupt2,LOW);
- }
- void loop() {
- //Serial.print("Servo 1: ");
- //Serial.println(ax12a.readLoad(ID1));
- //Serial.print("Servo 2: ");
- //Serial.println(ax12a.readLoad(ID2));
- //delay(300);
- if (Serial.available()){
- //Serial.print(test);
- for(int n = 0; n < 10 ; n++){
- val[n] = Serial.readString().toInt();
- }
- position = 0 ;
- for(int i = 2; i < 5;i++){
- position = position * 10 + val[i];
- }
- choice = val[0];
- Serial.print("Motor: ");
- Serial.print(choice);
- Serial.print(" position: ");
- Serial.print(position);
- switch(val[0]){
- case 1:
- ax12_1(position);
- Serial.print("Ready");
- break;
- case 2:
- a116(position);
- Serial.print("Ready");
- break;
- case 3:
- ax12_2(position);
- Serial.print("Ready");
- break;
- case 4:
- motor(position,val[1]);
- Serial.print("Ready");
- break;
- case 5:
- auto_close();
- Serial.print("Ready");
- break;
- }
- }
- }
- void interrupt1(){
- //Serial.println("interrupt button oben");
- digitalWrite(36,HIGH);
- motor(254,1);
- motor(0,1);
- digitalWrite(36,LOW);
- }
- void interrupt2(){
- //Serial.println("interrupt button unten");
-
- digitalWrite(36,HIGH);
- motor(254,0);
- motor(0,0);
- digitalWrite(36,LOW);
- }
|