Lehrer Busch / Mbed OS xxx_Motorino_Lib

Dependencies:   eeprom_intern LCD_i2c_GSOE MotorinoLib

Committer:
jack1930
Date:
Tue Jan 25 08:47:11 2022 +0000
Revision:
6:6e75241bcdd9
Parent:
5:3a7f58938059
Achsauswahl abgesichert

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jack1930 0:4db26ffb591c 1 /* mbed Microcontroller Library
jack1930 0:4db26ffb591c 2 * Copyright (c) 2019 ARM Limited
jack1930 0:4db26ffb591c 3 * SPDX-License-Identifier: Apache-2.0
jack1930 0:4db26ffb591c 4 */
jack1930 0:4db26ffb591c 5
jack1930 0:4db26ffb591c 6 #include "mbed.h"
jack1930 0:4db26ffb591c 7 #include "platform/mbed_thread.h"
jack1930 0:4db26ffb591c 8 #include "Kanal.h"
jack1930 5:3a7f58938059 9 #include "eeprom_intern.h"
jack1930 5:3a7f58938059 10 #include "LCD.h"
jack1930 0:4db26ffb591c 11
jack1930 0:4db26ffb591c 12
jack1930 0:4db26ffb591c 13
jack1930 0:4db26ffb591c 14 // Blinking rate in milliseconds
jack1930 0:4db26ffb591c 15 #define BLINKING_RATE_MS 50
jack1930 5:3a7f58938059 16 #define automatik 0
jack1930 5:3a7f58938059 17 DigitalIn TasteP(PA_1);
jack1930 5:3a7f58938059 18 DigitalIn TasteM(PA_6);
jack1930 5:3a7f58938059 19 DigitalIn TasteUE(PA_10);
jack1930 5:3a7f58938059 20 DigitalIn betriebsart(PB_7);
jack1930 5:3a7f58938059 21 PortIn achsauswahl(PortB,0b111);
jack1930 5:3a7f58938059 22 AnalogIn speed(PA_0);
jack1930 5:3a7f58938059 23 lcd mylcd;
jack1930 0:4db26ffb591c 24
jack1930 0:4db26ffb591c 25 struct position
jack1930 0:4db26ffb591c 26 {
jack1930 5:3a7f58938059 27 unsigned char w[6]; //6 Positonmen, Wertebereich: 0..180°, für 6 Achsen
jack1930 4:f863f6847c7d 28 int ms; //Fahrzeit in ms zur neuen Position
jack1930 0:4db26ffb591c 29 };
jack1930 0:4db26ffb591c 30
jack1930 5:3a7f58938059 31 position schritt[10]; //Es werden 10 Positionen angefahren
jack1930 0:4db26ffb591c 32
jack1930 5:3a7f58938059 33 void toEEPROM(void)
jack1930 5:3a7f58938059 34 {
jack1930 5:3a7f58938059 35 EEPROM_WRITE(0, (char*)schritt, sizeof(schritt));
jack1930 5:3a7f58938059 36 }
jack1930 5:3a7f58938059 37
jack1930 5:3a7f58938059 38 void fromEEPROM(void)
jack1930 5:3a7f58938059 39 {
jack1930 5:3a7f58938059 40 int zeiger=0;
jack1930 5:3a7f58938059 41 EEPROM_READ(0, (char*)schritt, sizeof(schritt));
jack1930 5:3a7f58938059 42 }
jack1930 0:4db26ffb591c 43
jack1930 0:4db26ffb591c 44 int main()
jack1930 0:4db26ffb591c 45 {
jack1930 5:3a7f58938059 46 int schrittnr=0,achs=0;
jack1930 5:3a7f58938059 47 betriebsart.mode(PullDown);
jack1930 5:3a7f58938059 48 achsauswahl.mode(PullDown);
jack1930 5:3a7f58938059 49 TasteP.mode(PullDown);
jack1930 5:3a7f58938059 50 TasteM.mode(PullDown);
jack1930 5:3a7f58938059 51 TasteUE.mode(PullDown);
jack1930 4:f863f6847c7d 52 Kanal* achse[6]; //Der Roboter hat 6 Achsen:
jack1930 5:3a7f58938059 53 mylcd.clear();
jack1930 5:3a7f58938059 54 mylcd.cursorpos(0);
jack1930 5:3a7f58938059 55
jack1930 4:f863f6847c7d 56 for (int i=0;i<6;i++) achse[i]=new Kanal(i); //Die Achsobjekte werden erzeugt
jack1930 0:4db26ffb591c 57 int dtc=0;
jack1930 0:4db26ffb591c 58 // Initialise the digital pin LED1 as an output
jack1930 4:f863f6847c7d 59 DigitalOut led(LED1); //Diagnose LED auf dem Nukleo
jack1930 5:3a7f58938059 60 schritt[0].w[0]=150; //achse[0]: Greifer
jack1930 5:3a7f58938059 61 schritt[0].w[1]=90; //achse[1]: Drehachse für den Greifer
jack1930 5:3a7f58938059 62 schritt[0].w[2]=90; //achse[2]: Dritter Kipp-Servo, von unten her
jack1930 5:3a7f58938059 63 schritt[0].w[3]=90; //achse[3]: Zweiter Kipp-Servo, von unten her
jack1930 5:3a7f58938059 64 schritt[0].w[4]=90; //achse[4]: Erster Kipp-Servo auf der Drehachse
jack1930 5:3a7f58938059 65 schritt[0].w[5]=90; //achse[5]: Grundachse, Drehung des Roboters
jack1930 4:f863f6847c7d 66 schritt[0].ms=1000; //Fahrzeit
jack1930 0:4db26ffb591c 67
jack1930 5:3a7f58938059 68 schritt[1].w[0]=120;
jack1930 5:3a7f58938059 69 schritt[1].w[1]=180;
jack1930 5:3a7f58938059 70 schritt[1].w[2]=160;
jack1930 5:3a7f58938059 71 schritt[1].w[3]=15;
jack1930 5:3a7f58938059 72 schritt[1].w[4]=60;
jack1930 5:3a7f58938059 73 schritt[1].w[5]=70;
jack1930 5:3a7f58938059 74 schritt[1].ms=1000;
jack1930 0:4db26ffb591c 75
jack1930 5:3a7f58938059 76 schritt[2].w[0]=160;
jack1930 5:3a7f58938059 77 schritt[2].w[1]=180;
jack1930 5:3a7f58938059 78 schritt[2].w[2]=160;
jack1930 5:3a7f58938059 79 schritt[2].w[3]=15;
jack1930 5:3a7f58938059 80 schritt[2].w[4]=60;
jack1930 5:3a7f58938059 81 schritt[2].w[5]=70;
jack1930 5:3a7f58938059 82 schritt[2].ms=1000;
jack1930 5:3a7f58938059 83
jack1930 5:3a7f58938059 84 schritt[3].w[0]=160;
jack1930 5:3a7f58938059 85 schritt[3].w[1]=180;
jack1930 5:3a7f58938059 86 schritt[3].w[2]=125;
jack1930 5:3a7f58938059 87 schritt[3].w[3]=45;
jack1930 5:3a7f58938059 88 schritt[3].w[4]=60;
jack1930 5:3a7f58938059 89 schritt[3].w[5]=70;
jack1930 5:3a7f58938059 90 schritt[3].ms=1000;
jack1930 4:f863f6847c7d 91
jack1930 5:3a7f58938059 92 schritt[4].w[0]=160;
jack1930 5:3a7f58938059 93 schritt[4].w[1]=180;
jack1930 5:3a7f58938059 94 schritt[4].w[2]=125;
jack1930 5:3a7f58938059 95 schritt[4].w[3]=45;
jack1930 5:3a7f58938059 96 schritt[4].w[4]=60;
jack1930 5:3a7f58938059 97 schritt[4].w[5]=150;
jack1930 5:3a7f58938059 98 schritt[4].ms=1000;
jack1930 5:3a7f58938059 99
jack1930 5:3a7f58938059 100 schritt[5].w[0]=160;
jack1930 5:3a7f58938059 101 schritt[5].w[1]=180;
jack1930 5:3a7f58938059 102 schritt[5].w[2]=160;
jack1930 5:3a7f58938059 103 schritt[5].w[3]=15;
jack1930 5:3a7f58938059 104 schritt[5].w[4]=60;
jack1930 5:3a7f58938059 105 schritt[5].w[5]=150;
jack1930 5:3a7f58938059 106 schritt[5].ms=1000;
jack1930 5:3a7f58938059 107
jack1930 5:3a7f58938059 108 schritt[6].w[0]=120;
jack1930 5:3a7f58938059 109 schritt[6].w[1]=180;
jack1930 5:3a7f58938059 110 schritt[6].w[2]=160;
jack1930 5:3a7f58938059 111 schritt[6].w[3]=15;
jack1930 5:3a7f58938059 112 schritt[6].w[4]=60;
jack1930 5:3a7f58938059 113 schritt[6].w[5]=150;
jack1930 5:3a7f58938059 114 schritt[6].ms=1000;
jack1930 5:3a7f58938059 115 schritt[7].ms=1000;
jack1930 5:3a7f58938059 116 schritt[8].ms=1000;
jack1930 5:3a7f58938059 117
jack1930 4:f863f6847c7d 118 //Grundstellung nch Start des Nucleo
jack1930 5:3a7f58938059 119 achse[0]->grundstellung(150);
jack1930 3:302df40c00e2 120 achse[1]->grundstellung(90);
jack1930 3:302df40c00e2 121 achse[2]->grundstellung(90);
jack1930 3:302df40c00e2 122 achse[3]->grundstellung(90);
jack1930 3:302df40c00e2 123 achse[4]->grundstellung(90);
jack1930 3:302df40c00e2 124 achse[5]->grundstellung(90);
jack1930 5:3a7f58938059 125 fromEEPROM();
jack1930 5:3a7f58938059 126 mylcd.cursorpos(0);
jack1930 5:3a7f58938059 127 mylcd.printf("Schritt=%d ",schrittnr);
jack1930 5:3a7f58938059 128 mylcd.cursorpos(0x40);
jack1930 5:3a7f58938059 129 mylcd.printf("a: %d, w: %d ",achs,schritt[schrittnr].w[achs]);
jack1930 0:4db26ffb591c 130 while (true) {
jack1930 0:4db26ffb591c 131 led = !led;
jack1930 5:3a7f58938059 132 if (betriebsart==automatik)
jack1930 0:4db26ffb591c 133 {
jack1930 5:3a7f58938059 134 schrittnr=-1;
jack1930 5:3a7f58938059 135 for (int j=0;j<8;j++) //Schritte
jack1930 0:4db26ffb591c 136 {
jack1930 5:3a7f58938059 137 mylcd.cursorpos(0);
jack1930 5:3a7f58938059 138 mylcd.printf("Schritt=%d ",j);
jack1930 5:3a7f58938059 139 //alle Achsen mit neuen Zielen versorgen und starten
jack1930 5:3a7f58938059 140 for (int i=0;i<6;i++)
jack1930 5:3a7f58938059 141 {
jack1930 5:3a7f58938059 142 //Operstion go(´float Zielwinkel, int fahrzeit
jack1930 5:3a7f58938059 143 achse[i]->go(schritt[j].w[i],speed*10000+200);//schritt[j].ms);
jack1930 5:3a7f58938059 144 }
jack1930 5:3a7f58938059 145 //warten, dass alle Achsen fertig werden
jack1930 5:3a7f58938059 146 for (int i=0;i<6;i++)
jack1930 5:3a7f58938059 147 {
jack1930 5:3a7f58938059 148 //Operation bool isBusy()
jack1930 5:3a7f58938059 149 //true=Achse bewegt sich noch, false=Achse hat Bewegung beendet
jack1930 5:3a7f58938059 150 while(achse[i]->isBusy()); //-> gleichbedeutend mit .-Operator
jack1930 5:3a7f58938059 151 }
jack1930 5:3a7f58938059 152 }
jack1930 5:3a7f58938059 153 }
jack1930 5:3a7f58938059 154 else
jack1930 5:3a7f58938059 155 {
jack1930 6:6e75241bcdd9 156 achs=achsauswahl%6;
jack1930 5:3a7f58938059 157 if (schrittnr==-1) //Init TeachIn
jack1930 5:3a7f58938059 158 {
jack1930 5:3a7f58938059 159 schrittnr=0;
jack1930 5:3a7f58938059 160 mylcd.cursorpos(0);
jack1930 5:3a7f58938059 161 mylcd.printf("Schritt=%d ",schrittnr);
jack1930 5:3a7f58938059 162 mylcd.cursorpos(0x40);
jack1930 5:3a7f58938059 163 mylcd.printf("a: %d, w: %d ",achs,schritt[schrittnr].w[achs]);
jack1930 5:3a7f58938059 164 for (int j=0;j<6;j++) achse[j]->go(schritt[schrittnr].w[j],1000);
jack1930 5:3a7f58938059 165 for (int j=0;j<6;j++)
jack1930 5:3a7f58938059 166 {
jack1930 5:3a7f58938059 167 //Operation bool isBusy()
jack1930 5:3a7f58938059 168 //true=Achse bewegt sich noch, false=Achse hat Bewegung beendet
jack1930 5:3a7f58938059 169 while(achse[j]->isBusy()); //-> gleichbedeutend mit .-Operator
jack1930 5:3a7f58938059 170 }
jack1930 0:4db26ffb591c 171 }
jack1930 5:3a7f58938059 172
jack1930 5:3a7f58938059 173 if (TasteP==1)
jack1930 5:3a7f58938059 174 {
jack1930 5:3a7f58938059 175 if (schritt[schrittnr].w[achs]<180) schritt[schrittnr].w[achs]++;
jack1930 5:3a7f58938059 176 mylcd.cursorpos(0x40);
jack1930 5:3a7f58938059 177 mylcd.printf("a: %d, w: %d ",achs,schritt[schrittnr].w[achs]);
jack1930 5:3a7f58938059 178 achse[achs]->go(schritt[schrittnr].w[achs],10);
jack1930 5:3a7f58938059 179
jack1930 5:3a7f58938059 180 }
jack1930 5:3a7f58938059 181 if (TasteM==1)
jack1930 5:3a7f58938059 182 {
jack1930 5:3a7f58938059 183 if (schritt[schrittnr].w[achs]>0) schritt[schrittnr].w[achs]--;
jack1930 5:3a7f58938059 184 mylcd.cursorpos(0x40);
jack1930 5:3a7f58938059 185 mylcd.printf("a: %d, w: %d ",achs,schritt[schrittnr].w[achs]);
jack1930 5:3a7f58938059 186 achse[achs]->go(schritt[schrittnr].w[achs],10);
jack1930 5:3a7f58938059 187 //for (int j=0;j<6;j++) achse[j]->go(schritt[schrittnr].w[j],25);
jack1930 5:3a7f58938059 188
jack1930 5:3a7f58938059 189
jack1930 5:3a7f58938059 190 }
jack1930 5:3a7f58938059 191 if (TasteUE==1)
jack1930 0:4db26ffb591c 192 {
jack1930 5:3a7f58938059 193 for (int i=0;i<10;i++) schritt[i].ms=1000;
jack1930 5:3a7f58938059 194 schritt[0].ms=2000;
jack1930 5:3a7f58938059 195 toEEPROM();
jack1930 5:3a7f58938059 196 HAL_Delay(20);
jack1930 5:3a7f58938059 197
jack1930 5:3a7f58938059 198 schrittnr=(schrittnr+1)%10;
jack1930 5:3a7f58938059 199 mylcd.cursorpos(0);
jack1930 5:3a7f58938059 200 mylcd.printf("Schritt=%d ",schrittnr);
jack1930 5:3a7f58938059 201 for (int j=0;j<6;j++) achse[j]->go(schritt[schrittnr].w[j],1000);
jack1930 5:3a7f58938059 202 for (int j=0;j<6;j++)
jack1930 5:3a7f58938059 203 {
jack1930 5:3a7f58938059 204 //Operation bool isBusy()
jack1930 5:3a7f58938059 205 //true=Achse bewegt sich noch, false=Achse hat Bewegung beendet
jack1930 5:3a7f58938059 206 while(achse[j]->isBusy()); //-> gleichbedeutend mit .-Operator
jack1930 5:3a7f58938059 207 }
jack1930 5:3a7f58938059 208 while (TasteUE==1);
jack1930 5:3a7f58938059 209 HAL_Delay(20);
jack1930 5:3a7f58938059 210 }
jack1930 0:4db26ffb591c 211 }
jack1930 5:3a7f58938059 212
jack1930 0:4db26ffb591c 213 }
jack1930 0:4db26ffb591c 214 }