Code:
#include "asuro.h"
#include <string.h>
#include <math.h>
//prototypen
void Haus(int iStil, unsigned char iSpeed);
void MyTurn ( int winkel, unsigned char iSpeed);
int main(void)
{
Init();
Encoder_Init();
//Senden von ICH beginne!
SerWrite("\n\r",2);
// 123456789012345678901234567890123456789012
SerWrite("Hallo Chef, ich beginne mit dem Programm! ",42);
SerWrite("\n\r",2);
SerWrite("Taster 1: Go 100",16);
SerWrite("\n\r",2);
SerWrite("Taster 2: Turn 90",17);
SerWrite("\n\r",2);
SerWrite("Taster 3: Haus1",15);
SerWrite("\n\r",2);
SerWrite("Taster 4: Haus2",15);
SerWrite("\n\r",2);
SerWrite("Taster 5: Haus3",15);
SerWrite("\n\r",2);
SerWrite("Taster 6: Haus4",15);
SerWrite("\n\r",2);
//in sw_pressed ist der gedrückte Schalter hinterlegt
//dazu wird PollSwitch abgefragt
int sw_pressed;
while (1) {
//solange keine Taste gedrückt wird
while((sw_pressed = PollSwitch()) == 0x00);
//korrektur für die großen Tasternummern
if (sw_pressed >4) sw_pressed++;
//Tastenabfrage
switch(sw_pressed) {
case 1:
// 1 234567890
SerWrite("\n\rTaster 1", 10);
Go (100, 150);
break;
case 2:
// 1 234567890
SerWrite("\n\rTaster 2", 10);
MyTurn (90, 150);
break;
case 4:
// 1 234567890123456
SerWrite("\n\rTaster 4: Haus1", 17);
//Haus(Größe-1..4,Speed)
Haus(1,150);
break;
case 8:
// 1 234567890123456
SerWrite("\n\rTaster 4: Haus2", 17);
//Haus(Größe-1..4,Speed)
Haus(2,150);
break;
case 16:
// 1 234567890123456
SerWrite("\n\rTaster 4: Haus3", 17);
//Haus(Größe-1..4,Speed)
Haus(3,150);
break;
case 32:
// 1 234567890123456
SerWrite("\n\rTaster 4: Haus4", 17);
//Haus(Größe-1..4,Speed)
Haus(4,150);
break; } //end switch
//mal 300 ms warten
Msleep(300);
sw_pressed=0;
} //end while (1)
// Nie vergessen, reine Vorsichtsmassnahme..
while(1){}
return 0;
} // end int main()
void Haus(int iStil, unsigned char iSpeed)
{
//Definition der Seitenlänge und Winkel (DEFAULT)
int iSeite=30;
int iWinkel_Dach1=45;
switch(iStil) {
case 1:
// 1 234567890
SerWrite("\n\rForm 1", 8);
iSeite=100;
iWinkel_Dach1= 45;
break;
case 2:
// 1 234567890
SerWrite("\n\rForm 2", 8);
iSeite=150;
iWinkel_Dach1= 45;
break;
case 3:
// 1 234567890
SerWrite("\n\rForm 3", 8);
iSeite=100;
iWinkel_Dach1= 30;
break;
case 4:
// 1 234567890
SerWrite("\n\rForm 4", 8);
iSeite=200;
iWinkel_Dach1= 30;
break;
} //end switch
float Diagonale=sqrt(2)*iSeite;
int iDiagonale= (int)Diagonale;
int iWinkel_Dach2= 2* (90-iWinkel_Dach1);
int iWinkel_Dach3= 90-iWinkel_Dach1;
int iDach=(iSeite/2)/cos(iWinkel_Dach1/180*3.1415926535);
SerWrite("\n\r",2);
// 12345678901234567890
SerWrite("Seite: ",7);
PrintInt(iSeite);
SerWrite("\n\r",2);
//SerWrite("Diagonale: ",12);
//PrintInt(Diagonale);
//SerWrite("\n\r",2);
SerWrite("int Diagonale: ",16);
PrintInt(iDiagonale);
SerWrite("\n\r",2);
SerWrite("Dach: ",6);
PrintInt(iDach);
SerWrite("\n\r",2);
SerWrite("Winkel1: ",9);
PrintInt(iWinkel_Dach1);
SerWrite("\n\r",2);
SerWrite("Winkel2: ",9);
PrintInt(iWinkel_Dach2);
SerWrite("\n\r",2);
SerWrite("Winkel3: ",9);
PrintInt(iWinkel_Dach3);
SerWrite("\n\r",2);
//solange keine Taste gedrückt wird
// 1 234567890123
SerWrite("\n\rpress a key",13);
SerWrite("\n\r",2);
while((PollSwitch()) == 0x00);
// es geht los (Seite 1)
Go(iSeite, iSpeed);
// drehen und Dach (Seite 2)
MyTurn(iWinkel_Dach1, iSpeed);
Go(iDach, iSpeed);
// drehen und Dach (Seite 3)
MyTurn(iWinkel_Dach2, iSpeed);
Go(iDach, iSpeed);
// drehen und Seite 4
MyTurn((90-iWinkel_Dach1+90), iSpeed);
Go(iSeite,iSpeed);
//drehen und Seite 5
//Linksdrehung 45- 180
MyTurn(-135, iSpeed);
Go(iDiagonale,iSpeed);
//drehen und Seite 6
//Rechtsdrehung 90+45
MyTurn(135, iSpeed);
Go(iSeite,iSpeed);
//drehen und Seite 7
//Rechtdrehung
MyTurn(135, iSpeed);
Go(iDiagonale,iSpeed);
//drehen und Seite 8
//Rechtsdrehung
MyTurn(135, iSpeed);
Go(iSeite,iSpeed);
} //end Void (Haus)
void MyTurn ( int iWinkel, unsigned char iSpeed)
{
int iStep=1;
int iRest=0;
int iLauf=0;
if (iWinkel>80)
{
iStep=iWinkel/60;
iRest=iWinkel - iStep*60;
for (iLauf; iLauf<iStep; iLauf++)
{
Turn(60,iSpeed);
}
Turn (iRest, iSpeed);
} //endif (abs(winkel)>80)
else
{
Turn(iWinkel, iSpeed);
}
}
gruß
Lesezeichen