Extension on RotaryEncoder.h, Host.h... Represesnts a room with PWM LED lightning
Room.cpp
- Committer:
- nzupcic
- Date:
- 2021-09-21
- Revision:
- 0:04a5d18ab628
File content as of revision 0:04a5d18ab628:
#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(); } }