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:
- DoTTi
- Date:
- 2018-02-05
- Revision:
- 1:eddde0361c0a
- Parent:
- 0:425c87a33e63
File content as of revision 1:eddde0361c0a:
#include "mbed.h"
#include "BtnEventM0.h"
Serial pc(USBTX, USBRX);
// LSB MSB
BusOut lb(/*P1_13,P1_12,P1_7,*/P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
BtnEventM0 sw4(P1_16), sw3(P0_23), sw1(P0_10), sw2(P0_15);
// Zustandsangebe
BusOut stLED(P1_13,P1_12,P1_7);
const int st_run = 1;
const int st_editH = 2;
const int st_editM = 3;
const int st_editalarmH = 4;
const int st_editalarmM = 5;
int blinkIdx = 0;
int hh=0, mm=0;
int alarmhh=0, alarmmm=0;
bool alarm = false;
class Timmer
{
public:
void Init();
void Run();
void EditH();
void EditM();
void EditalarmH();
void EditalarmM();
public:
int state;
private:
Timer t1;
};
Timmer tim1;
int main()
{
pc.baud(500000);
sw4.Init(); // Switch state
sw3.Init(); // Count UP
sw1.Init(); // Count DOWN
sw2.Init(); // Set Alarm
tim1.Init();
while(1) {
if(tim1.state == st_run) {
tim1.Run();
blinkIdx = 0;
}
if(tim1.state == st_editH) {
tim1.EditH();
blinkIdx = 3;
}
if(tim1.state == st_editM) {
tim1.EditM();
blinkIdx = -1;
}
if(tim1.state == st_editalarmH) {
tim1.EditalarmH();
blinkIdx = 3;
}
if(tim1.state == st_editalarmM) {
tim1.EditalarmM();
blinkIdx = -1;
}
}
}
void Timmer::Init()
{
state= st_run;
t1.start();
}
void Timmer::Run()
{
// 1..in die erste Zeile schreiben
pc.printf("1 Clock running\n");
pc.printf("3 %d\n", blinkIdx);
stLED = 1;
while(1) {
if(sw4.CheckFlag()) {
state = st_editH;
return;
}
if(sw2.CheckFlag()) {
state = st_editalarmH;
alarm = true;
return;
}
if(t1.read_ms() > 50) { // Ausgabe mit 20Hz,aber dafür hate 1h 60min!!!
t1.reset();
mm++;
if(mm > 59) {
mm = 0;
hh++;
}
if(hh > 23) {
hh = 0;
}
// Alram
if(alarm == true) {
if(hh == alarmhh && mm == alarmmm) {
pc.printf("1 !!!ALARM!!!\n");
alarmhh=0;
alarmmm=0;
alarm = false;
}
}
pc.printf("2 %02d:%02d\n",hh,mm);
}
}
}
/*********** SET TIME **************/
void Timmer::EditH()
{
pc.printf("1 Edit hh\n");
pc.printf("2 %02d:%02d\n", hh, mm);
pc.printf("3 %d\n", blinkIdx);
stLED = 2;
while(1) {
if(sw4.CheckFlag()) {
state = st_editM;
return;
}
// Count UP
if(sw3.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
hh++;
if(hh > 23)
hh = 0;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(300);
if(sw3.CheckButton())
while(sw3.CheckButton()) {
// ContinousPress erkannt
hh++;
if(hh > 23)
hh = 0;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(100);
}
}
// Count DOWN
if(sw1.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
hh--;
if(hh < 0)
hh = 23;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(300);
if(sw1.CheckButton())
while(sw1.CheckButton()) {
// ContinousPress erkannt
hh--;
if(hh < 0)
hh = 23;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(100);
}
}
}
}
void Timmer::EditM()
{
pc.printf("1 Edit mm\n");
pc.printf("2 %02d:%02d\n", hh, mm);
pc.printf("3 %d\n", blinkIdx);
stLED = 3;
while(1) {
if(sw4.CheckFlag()) {
state = st_run;
return;
}
// Count UP
if(sw3.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
mm++;
if(mm > 59 )
mm = 0;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(300);
if(sw3.CheckButton())
while(sw3.CheckButton()) {
// ContinousPress erkannt
mm++;
if(mm > 59)
mm = 0;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(100);
}
}
// Count DOWN
if(sw1.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
mm--;
if(mm < 0)
mm = 59;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(300);
if(sw1.CheckButton())
while(sw1.CheckButton()) {
// ContinousPress erkannt
mm--;
if(mm < 0)
mm = 59;
pc.printf("2 %02d:%02d\n", hh, mm);
wait_ms(100);
}
}
}
}
/*********** SET ALARM **************/
void Timmer::EditalarmH()
{
pc.printf("1 Edit alarm hh\n");
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
pc.printf("3 %d\n", blinkIdx);
stLED = 4;
while(1) {
if(sw2.CheckFlag()) {
state = st_editalarmM;
return;
}
// Count UP
if(sw3.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
alarmhh++;
if(alarmhh > 23)
alarmhh = 0;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(300);
if(sw3.CheckButton())
while(sw3.CheckButton()) {
// ContinousPress erkannt
alarmhh++;
if(alarmhh > 23)
alarmhh = 0;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(100);
}
}
// Count DOWN
if(sw1.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
alarmhh--;
if(alarmhh < 0)
alarmhh = 23;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(300);
if(sw1.CheckButton())
while(sw1.CheckButton()) {
// ContinousPress erkannt
alarmhh--;
if(alarmhh < 0)
alarmhh = 23;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(100);
}
}
}
}
void Timmer::EditalarmM()
{
pc.printf("1 Edit alarm mm\n");
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
pc.printf("3 %d\n", blinkIdx);
stLED = 5;
while(1) {
if(sw2.CheckFlag()) {
state = st_run;
return;
}
// Count UP
if(sw3.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
alarmmm++;
if(alarmmm > 59 )
alarmmm = 0;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(300);
if(sw3.CheckButton())
while(sw3.CheckButton()) {
// ContinousPress erkannt
alarmmm++;
if(alarmmm > 59)
alarmmm = 0;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(100);
}
}
// Count DOWN
if(sw1.CheckFlag()) {
// Aktion für EinfachClick z.B. cnt++ ausführen
alarmmm--;
if(alarmmm < 0)
alarmmm = 59;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(300);
if(sw1.CheckButton())
while(sw1.CheckButton()) {
// ContinousPress erkannt
alarmmm--;
if(alarmmm < 0)
alarmmm = 59;
pc.printf("2 %02d:%02d\n", alarmhh, alarmmm);
wait_ms(100);
}
}
}
}