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.
Diff: main.cpp
- Revision:
- 0:05d73097e319
- Child:
- 1:c5769cd78933
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Sep 29 12:05:03 2014 +0000
@@ -0,0 +1,153 @@
+#include "mbed.h"
+
+Ticker tick;
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+InterruptIn button(p12);
+
+// Zum Schalten: 1 Taster PINA PA0
+// 1. Funktion
+// Start-Taste 1x betätigen:
+// Dauerlicht aller 4 LEDs
+// 2. Funktion
+// Start-Taste ein 2.mal betätigen:
+// LEDs blinken im ca. 400 Millisekunden-Takt; 200 msec Ein, 200 msec Aus
+// Ausschalten des Rücklichts
+// Die Start-Taste ein 3.mal betätigen:
+// Alle LEDs aus.
+
+
+//volatile uint8_t count;
+volatile unsigned int count;
+volatile unsigned int newEvent =0;
+volatile unsigned int event=0, state=0;
+
+/* Prototypen der Funktionen */
+int no_fu();
+int ledsEin();
+int msec300TimerOn();
+int ledsAusTimerOff();
+int ledsTogglen();
+
+unsigned char nextstate_tab[2][3]=
+//present state 0 1 2
+//------------------------
+/* event 0 */{{ 1, 2, 0 }, // next
+/* event 1 */ { 0, 1, 2 }}; // state
+// state=nextstate_tab[event][state]; // gehe auf naechsten Zustand
+
+/*************************************************************/
+/* Tabelle fuer Aktionsroutinen fuer die Zustaende bei Input */
+/*************************************************************/
+// p r e s e n t s t a t e
+int(*action[2][3])()= // 0 1 2
+/* event 0 */ {{ ledsEin, msec300TimerOn, ledsAusTimerOff },
+/* event 1 */ { no_fu, no_fu, ledsTogglen }};
+// (*action[event][state])(); // suche in Tabelle nach Funktion
+
+
+/* Aktionsroutinen, functions */
+int no_fu() // keine function - tue nichts
+{
+ return(0);
+}
+
+int msec300TimerOn()
+{
+ __enable_irq();
+ return(1);
+}
+
+int ledsAusTimerOff()
+{
+ led1 = 0;
+ led2 = 0;
+ led3 = 0;
+ led4 = 0;
+ __disable_irq();
+ return(2);
+}
+
+int ledsTogglen()
+{
+ led1 = !led1;
+ led2 = !led2;
+ led3 = !led3;
+ led4 = !led4;
+ return(3);
+}
+
+int ledsEin()
+{
+ led1 = 1;
+ led2 = 1;
+ led3 = 1;
+ led4 = 1;
+ return(4);
+}
+
+// interrupt SR
+void timertick()
+{
+ ledsTogglen();
+}
+
+// functions
+void initTimer()
+{
+ tick.attach(&timertick, 0.2);
+}
+
+void debounce(PinName name, unsigned char samples)
+{
+ DigitalIn joystick(name);
+
+ for(unsigned char j = 0; j < samples; j++)
+ {
+ if(joystick == 1)
+ j++;
+ else
+ j = 0;
+
+ if(j == samples)
+ break;
+ }
+}
+
+void buttonpress()
+{
+ debounce(p12, 8);
+
+ event =0;
+ newEvent =1;
+
+ if (newEvent)
+ {
+ __disable_irq();
+ newEvent =0;
+ (*action[event][state])(); // suche in Tabelle nach Funktion
+ state=nextstate_tab[event][state]; // gehe auf naechsten Zustand
+ __enable_irq();
+ }
+}
+
+int main()
+{
+
+ button.rise(&buttonpress);
+ led1 = 0;
+ led2 = 0;
+ led3 = 0;
+ led4 = 0;
+
+ initTimer();
+
+ newEvent = 0;
+ state=0;
+ event=0;
+}
+
+