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.
main.cpp
- Committer:
- philipp19961
- Date:
- 2014-09-29
- Revision:
- 0:05d73097e319
- Child:
- 1:c5769cd78933
File content as of revision 0:05d73097e319:
#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;
}