Dependencies:   LCD_i2c_GSOE

main.cpp

Committer:
jack1930
Date:
2022-01-18
Revision:
2:ddf95aa94826
Parent:
1:f3303de6e057

File content as of revision 2:ddf95aa94826:

/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */
/* Auf dem Baseshield sind 3 Jumperbrücken erforderlich:
 * PB9 - PC0
 * PB3 - PC3
 * PB4 - PC4
 * Für die Stromversorgung der L293 wird unter Umständen eine 6V Batteriebox benötigt
 */
 
#include "mbed.h"
#include "LCD.h"

lcd mylcd;

PwmOut greifer(PC_7);   
PwmOut heber(PB_3);     
PwmOut schwenker(PB_4);
PwmOut dreher(PB_9);

PortOut saft(PortC,0b01100110); //Stromversorgung der Servos über den L293D
AnalogIn poti(PA_0); //wird nicht gebraucht


float wg,wg0=140,wg1=100,ag; //Winkel Greifer, Anfangswert, Endwert, Interpolation
float wh,wh0=90,wh1=90,ah;  //Winkel Heber, Anfangswert, Endwert, Interpolation
float ws,ws0=90,ws1=90,as;  //Winkel Schwenker, Anfangswert, Endwert, Interpolation
float wd,wd0=90,wd1=90,ad;  //Winkel Dreher, Anfangswert, Endwert, Interpolation
int schritte=50;    //Eine Bewegung dauert 50 * 20ms = 1s

void go()
{
         //Geadeninterpolation
        ag=(wg1-wg0)/schritte; 
        ah=(wh1-wh0)/schritte;   
        as=(ws1-ws0)/schritte;  
        ad=(wd1-wd0)/schritte;   
        //Fahren
        for (float i=0;i<schritte;i++)
        {   
            wg=ag*i+wg0;
            wh=ah*i+wh0;
            ws=as*i+ws0;
            wd=ad*i+wd0;
            greifer=0.025+(wg/180.0)*0.1;
            heber=0.025+(wh/180.0)*0.1;  
            schwenker=0.025+(ws/180.0)*0.1;   
            dreher=0.025+(wd/180.0)*0.1;        
            HAL_Delay(20);
        }
        //Startposition für nächsten Schritt = Endposition des vorherigen Schritts
        wg0=wg1;
        wh0=wh1;
        ws0=ws1;
        wd0=wd1;   
}

int main()
{
    int schritte=50;    //Eine Bewegung dauert 50 * 20ms = 1s
    saft=0b01100110;    //Servos mit Strom versorgen. 
    //PWM-Periode einstellen
    greifer.period_ms(20);
    heber.period_ms(20);
    schwenker.period_ms(20);
    dreher.period_ms(20);
    HAL_Delay(100);
    //Startposition anfahren Tastgrad PWM 0,025 .. 0,125 für 0 .. 180°
    greifer=0.025+(wg0/180.0)*0.1;
    heber=0.025+(wh0/180.0)*0.1;  
    schwenker=0.025+(ws0/180.0)*0.1;   
    dreher=0.025+(wd0/180.0)*0.1;   
    mylcd.clear();
    
    while (true) {
        mylcd.cursorpos(0);
        mylcd.printf("Schritt 0");
        schritte=50;
        //Zielpositionen der Achsen
        wg1=180;
        wh1=90;
        ws1=70;
        wd1=150;
        go();
        
        mylcd.cursorpos(0);
        mylcd.printf("Schritt 1");

        wg1=100;
        wh1=110;
        ws1=70;
        wd1=150;
        go();
        

        mylcd.cursorpos(0);
        mylcd.printf("Schritt 2");     

        wg1=180;
        wh1=110;
        ws1=70;
        wd1=150;
        go();
        

        mylcd.cursorpos(0);
        mylcd.printf("Schritt 3");

        wg1=180;
        wh1=60;
        ws1=100;
        wd1=150;
        go();
 
        mylcd.cursorpos(0);
        mylcd.printf("Schritt 4");

        wg1=180;
        wh1=30;
        ws1=100;
        wd1=30;
        go();
        
        mylcd.cursorpos(0);
        mylcd.printf("Schritt 5");
 
        wg1=120;
        wh1=30;
        ws1=100;
        wd1=30;
        go();
        
        mylcd.cursorpos(0);
        mylcd.printf("Schritt 6");
 
        wg1=100;
        wh1=60;
        ws1=100;
        wd1=30;
        go();
    }
}