Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: eeprom_intern LCD_i2c_GSOE MotorinoLib
main.cpp@6:6e75241bcdd9, 2022-01-25 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |