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: Led-libary TextLCD mbed
Fork of Laufled by
Diff: main.cpp
- Revision:
- 11:caa67a0ab7bd
- Parent:
- 10:f635972952e0
- Child:
- 12:7b480ec47c4c
--- a/main.cpp Sun Mar 13 00:18:29 2016 +0000
+++ b/main.cpp Sun Mar 13 19:44:04 2016 +0000
@@ -8,28 +8,25 @@
AnalogIn ldr(P0_12);
AnalogIn poti(P0_11);
//BusOut rgb(P0_9,P1_15,P0_21);
-//BusIn btn(P1_16,P0_23,P0_10,P0_15);
RGBOut rgb(P0_21,P0_9,P1_15);
//Old: P0_13
LedOut Feld (P1_23);//P1_23 ->14
LedOut Home (P1_20);//P1_20->13
LedOut Dice (P1_21);//P1_21->12
-//-> Würfel (ersten 3 LED in Binär-4. LED für 7. Zustand), Spieler, Start, Ziel, Referenz(auch RGB am board)
-// übrige 8 LED für zeit-Anzeige des Zuges einer KI
+//-> Würfel (ersten 3 LED in Binär-4. LED für 7. Zustand), Spieler, Referenz(auch RGB am board)
InterruptIn Button0(P0_1);
InterruptIn Button1(P1_16);
InterruptIn Button2(P0_23);
InterruptIn Button3(P0_10);
InterruptIn Button4(P0_15);
-
+BusIn btn(P1_16,P0_23,P0_10,P0_15,P0_1);
+//Dice
Timer Random;
Timer RandomDice;
Ticker DiceAnim;
-void DiceStart();
-void DiceStop();
void DiceRun();
void setDice(char number);
void DicePrint();
@@ -39,7 +36,7 @@
char diceTick = 0;
char diceNum = 0;
int16_t diceDecode [7]= {0x1,0x88,0x89,0xAA,0xAB,0x1BA,0x154};
-
+//Game
#define Feldgrose 10
#define Spieler 4
#define Steine 4
@@ -53,28 +50,111 @@
char moglich[Steine];
char selected; //der aktuell ausgewählte Zug
char Field[Spieler*Feldgrose]; //Enthält den Index für PlayPos (nur das 'normale' Spielfend)
-uint32_t Farben[Spieler]; //Berechnete Hellichkeiten der Speiler fertig zur Ausgabe...
-uint32_t Background = 0; //Hintergrund (Leerfeld)
-uint32_t DiseC = 0x00FF00; //Würfelfarbe
void FieldPrint(); //Ausgabe auf Com-Port
void FieldGenerate(); //Berechnung von PlayPos auf Start, Ziel, Field
void FeldPrint(); //Ausgabe von Field auf den Led-Streifen (Feld) der Farben
void GameCal();
-void moveNext();
-void moveLast();
Ticker MoveAnim;
void MoveRun();
char MoveShow;
-void MoveDo();
void ColorPrint(uint32_t color);
-
+//Animations
char AnimField[Spieler*Feldgrose];
char AnimStart[Spieler*Steine];
char AnimZiel[Spieler*Steine];
char AnimPos[Spieler*Steine];
char AnimDo; //Feld_Animieren,Start Animieren, Ziel Animierenw
void AnimCal();
+//Core Interactions
void reset();
+void MoveDo();
+void moveNext();
+void moveLast();
+void DiceStart();
+void DiceStop();
+//Button entprellung (funktioniert nicht...)
+void btn0();
+void btn1();
+void btn2();
+void btn3();
+void btn4();
+char btnLast;
+//Farben
+uint32_t Farben[Spieler]; //Berechnete Hellichkeiten der Speiler fertig zur Ausgabe...
+uint32_t Background = 0; //Hintergrund (Leerfeld)
+uint32_t DiseC = 0x00FF00; //Würfelfarbe
+void ColorPrint(uint32_t color); //vorher den Header senden (manuell...)
+
+
+void btn0()
+{
+ if((btnLast&0x10)==(btn&0x10))
+ return;
+ else
+ {
+ if((btn&0x10)>0)
+ reset();
+ else
+ /*DoNothing*/;
+ }
+ btnLast=(btnLast&(0x1F-0x10))|(btn&0x10);
+}
+
+void btn1()
+{
+ if((btnLast&0x01)==(btn&0x01))
+ return;
+ else
+ {
+ if((btn&0x01)>0)
+ DiceStart();
+ else
+ DiceStop();
+ }
+ btnLast=(btnLast&(0x1F-0x01))|(btn&0x01);
+}
+
+void btn2()
+{
+ if((btnLast&0x02)==(btn&0x02))
+ return;
+ else
+ {
+ if((btn&0x02)>0)
+ moveNext();
+ else
+ /*DoNothing*/;
+ }
+ btnLast=(btnLast&(0x1F-0x02))|(btn&0x02);
+}
+
+void btn3()
+{
+ if((btnLast&0x04)==(btn&0x04))
+ return;
+ else
+ {
+ if((btn&0x04)>0)
+ moveLast();
+ else
+ /*DoNothing*/;
+ }
+ btnLast=(btnLast&(0x1F-0x04))|(btn&0x04);
+}
+
+void btn4()
+{
+ if((btnLast&0x08)==(btn&0x08))
+ return;
+ else
+ {
+ if((btn&0x08)>0)
+ MoveDo();
+ else
+ /*DoNothing*/;
+ }
+ btnLast=(btnLast&(0x1F-0x08))|(btn&0x08);
+}
void reset()
{
@@ -94,85 +174,6 @@
FeldPrint();
}
-void btn2()
-{
- for(char i = 0;i<Spieler;i++)
- {
- PlayPos[i*Spieler]=Steine+Spieler*Feldgrose;
- PlayPos[i*Spieler+1]=Steine+Spieler*Feldgrose+1;
- PlayPos[i*Spieler+2]=Spieler*Feldgrose + 2;
- PlayPos[i*Spieler+3]=Steine+Spieler*Feldgrose+3;
- }
- FieldGenerate();
- FieldPrint();
- FeldPrint();
- /*
- for(char i = 0; i<Spieler;i++)
- for(char j = 0; j<Steine;j++)
- Start[(i<<2)|j] = ((i<<2)|j)+1;
- for(char i = 0; i<Spieler;i++)
- for(char j = 0; j<Steine;j++)
- Ziel[(i<<2)|j] = ((i<<2)|j)+1;
- FeldPrint();
- */
- /*
- Drann = 0;
- PlayPos[1]=Steine+Feldgrose*Spieler;
- //PlayPos[2]=Steine+Feldgrose*Spieler+1;
- PlayPos[3]=Steine+Feldgrose*Spieler+2;
- PlayPos[0]=Steine+Feldgrose*Spieler-1;
- FieldGenerate();
- FieldPrint();
- FeldPrint();
- */
-}
-
-void btn3()
-{
- /*
- diceNum=2;
- diceEn=2;
- Drann = 1;
- PlayPos[(1<<2)+0]=5;
- PlayPos[(1<<2)+1]=7;
- PlayPos[(1<<2)+2]=10;
- PlayPos[(1<<2)+3]=12;
- DicePrint();
- FieldGenerate();
- FieldPrint();
- FeldPrint();
- GameCal();
- */
- /*
- port.printf("W%c%c\n",27+0x3E,27+0x7);
- for(char i=0;i<Spieler;i++)
- {
- port.printf("w");
- ColorPrint(Farben[i]);
- wait(1);
- }
- */
- diceEn=5;
-}
-
-void btn4()
-{
- /*
- for(char i = 0;i<Spieler;i++)
- PlayPos[i<<2]=4;
- FieldGenerate();
- FieldPrint();
- */
- myled = 0;
- rgb.set(0,0,0);
- port.printf("LBtn 4 Pressed\n");
-}
-
-void btn4_()
-{
- port.printf("LBtn 4 Released\n");
-}
-
void Control()
{
while(port.readable ())
@@ -233,15 +234,23 @@
//.attach(&main,[sek]);
//.attach_us(&main,[micro-sec]);
//.detach();
+ Button0.mode(PullDown);
+ Button1.mode(PullDown);
+ Button2.mode(PullDown);
+ Button3.mode(PullDown);
+ Button4.mode(PullDown);
+
wait(0.01);
Button0.rise(&reset);
- Button1.rise(&DiceStart);
- Button1.fall(&DiceStop);
+ Button1.rise(&btn1);
+ Button1.fall(&btn1);
Button2.rise(&btn2);
+ Button2.fall(&btn2);
Button3.rise(&btn3);
+ Button3.fall(&btn3);
Button4.rise(&btn4);
- Button4.fall(&btn4_);
+ Button4.fall(&btn4);
//myled = 0xFFF;
port.baud(76800);
@@ -807,6 +816,11 @@
port.printf("LCount: %d\n",count);
}
}
+ else //Fahren nicht möglich,spieler am Feld & 6 gewürfelt
+ {
+ if(diceNum==6)
+ diceEn=0;
+ }
}
}
