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.
Revision 0:04a5d18ab628, committed 2021-09-21
- Comitter:
- nzupcic
- Date:
- Tue Sep 21 16:45:59 2021 +0000
- Commit message:
- 1st commit
Changed in this revision
| Room.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Room.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Room.cpp Tue Sep 21 16:45:59 2021 +0000
@@ -0,0 +1,115 @@
+#include "Room.h"
+
+Room::Room(PinName pRoomLight, PinName pRotaryA, PinName pRotaryB,
+ PinName pSwitch, PinName pBtTx, PinName pBtRx,
+ PinName pHostTx, PinName pHostRx)
+ : roomLight(pRoomLight), re(pRotaryA, pRotaryB),
+ swButton(pSwitch), bt(pBtTx, pBtRx), pc(pHostTx, pHostRx){
+ Room::Loop();
+}
+
+void Room::Init(void){
+ Room::pc.Init(50.0);
+ Room::re.Init(50.0);
+ Room::Enable = false;
+ Room::re.LastState = 0;
+ Room::pc.LastState = 0;
+ Room::LastState = 0;
+ Room::debounce.start();
+ Room::timeout_pc.start();
+}
+
+void Room::Loop(void){
+ Room::Init();
+ Room::swButton.rise(this, &Room::SwitchStates);
+ Room::tickerEnable.attach(this, &Room::CheckEnables, 0.01);
+ Room::pc_thread.start(this, &Room::ListenHost);
+ while(1){
+ Refresh();
+ Thread::wait(500);
+ }
+}
+
+void Room::Refresh(){
+ float brightness = Room::SetBrightness();
+ if (brightness > 0 && brightness <= 100){
+ Room::roomLight = brightness;
+ if (Room::LastState != Room::roomLight){
+ if(Room::roomLight != 0.0 && Room::LastState == 0.0){
+ Room::pc.printf("\nLight is switched on!\n");
+ }
+ Room::Update();
+ }
+ Room::LastState = Room::roomLight;
+ }
+ else{
+ Room::roomLight = 0;
+ if (Room::roomLight == 0.0 && Room::LastState != 0.0){
+ Room::pc.printf("\nLight is switched off!\n");
+ }
+ Room::LastState = Room::roomLight;
+ }
+}
+
+void Room::Update(){
+ if (Room::LastState != Room::roomLight || 1){
+ float printValue = Room::roomLight;
+ Room::pc.printf("\nCurrent brightness is: %.2f[%%]\n", printValue*100);
+ }
+}
+
+float Room::SetBrightness(void){
+ float returnValue = 0;
+ bool enable = Room::Enable;
+ if(enable){
+ if(Room::re.Enable && !Room::pc.Enable){
+ returnValue = Room::re.Value/100;
+ Room::re.LastState = Room::re.Value;
+ };
+ if(Room::pc.Enable && !Room::re.Enable){
+ returnValue = Room::pc.Value/100;
+ Room::pc.LastState = Room::pc.Value;
+ };
+ }
+ return returnValue;
+}
+
+void Room::CheckEnables(void){
+ if (Room::re.Enable || Room::pc.Enable){
+ Room::Enable = true;
+ }
+ else {
+ Room::Enable = false;
+ };
+}
+
+void Room::ListenHost(void){
+ while(1){
+ Room::pc.printf("\nSet brightness [%%]: ");
+ float setValue = atof(Room::pc.GetInput().c_str());
+ if(setValue > 0 && setValue <=100){
+ Room::pc.Enable = true;
+ Room::pc.Value = setValue;
+ }
+ else if (setValue == 0){
+ Room::pc.Enable = false;
+ Room::pc.Value = 0.0;
+ }else if (setValue == 000){
+ //do nothing
+ Room::pc.printf("\nTimeout\n");
+ }
+ }
+}
+
+void Room::ListenHardware(void){
+}
+
+void Room::ListenBluetooth(void){
+}
+
+void Room::SwitchStates(void){
+ if(debounce.read_ms() > 200){
+ Room::re.Enable = !Room::re.Enable;
+ Room::debounce.reset();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Room.h Tue Sep 21 16:45:59 2021 +0000
@@ -0,0 +1,41 @@
+#ifndef ROOM_H
+#define ROOM_H
+
+#include "Host.h"
+#include "Bluetooth.h"
+#include "RotaryEncoder.h"
+#include "mbed.h"
+#include "rtos.h"
+
+class Room{
+ public:
+ Room(PinName pRoomLight, PinName pRotaryA, PinName pRotaryB,
+ PinName pSwitch, PinName pBtTx, PinName pBtRx, PinName pHostTx,
+ PinName pHostRx);
+ bool Enable;
+ float LastState;
+ private:
+ void Init();
+ void Loop();
+ float SetBrightness();
+ void CheckEnables();
+ void ListenHost();
+ void ListenHardware();
+ void ListenBluetooth();
+ void SwitchStates();
+ void Refresh();
+ void Update();
+ protected:
+ Thread pc_thread;
+ PwmOut roomLight;
+ Host pc;
+ Bluetooth bt;
+ RotaryEncoder re;
+ InterruptIn swButton;
+ Ticker tickerEnable;
+ Ticker updateValues;
+ Timer debounce;
+ Timer timeout_pc;
+};
+
+#endif
\ No newline at end of file