Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "MicroBit.h"
- #include <string>
- #include <vector>
- #include "btree.hpp"
- MicroBit uBit;
- MicroBitImage tick= MicroBitImage("0,0,0,0,0\n0,0,0,0,1\n0,0,0,1,0\n1,0,1,0,0\n0,1,0,0,0\n");
- MicroBitImage dotImg= MicroBitImage("0,0,0,0,0\n0,0,0,0,0\n0,0,1,0,0\n");
- MicroBitImage dashImg= MicroBitImage("0,0,0,0,0\n0,0,0,0,0\n1,1,1,1,1\n");
- MicroBitImage antenna("255,0,255,0,255\n 0,255,255,255,0\n 0,0,255,0,0\n 0,0,255,0,0\n 0,0,255,0,0\n");
- btree morsetree;
- using namespace std;
- // Sender microBit
- bool sender = false;
- // Reciever microBit
- bool receiver = false;
- // Bool to show if the program is already running or not.
- bool running = false;
- // If the button has been pressed or not (state).
- bool pressed = false;
- // overall program elapsed time.
- uint64_t currentTime = system_timer_current_time();
- // How long button A has been pressed for
- uint64_t difference = 0;
- //store in string
- std::string message = "" ;
- std::string sequence = "";
- //declare dot and dash as char
- char dot = '.';
- char dash = '-';
- void sending()
- {
- uBit.display.scroll("Sender"); //You are S (Sender)
- bool pressed = false;
- bool transmit = false;
- while (1)
- {
- uint64_t reading = system_timer_current_time();
- while(!uBit.buttonA.isPressed())
- {
- uint64_t wait = system_timer_current_time() - reading;
- // Space between inputted chars based on morse
- if(wait > 750 && transmit == true)
- {
- uBit.display.print(antenna);
- // Digital Value set to 1 to send pulse over wire
- //uBit.sleep(1700);
- uBit.radio.datagram.send("3");
- uBit.display.clear();
- // Set to 0 to stop sending pulse over wire
- transmit = false;
- break;
- }
- }
- reading = system_timer_current_time();
- while (uBit.buttonA.isPressed())
- {
- pressed = true;
- }
- // Delta is assigned loop time - reading
- uint64_t delta = system_timer_current_time() - reading;
- if (pressed)
- {
- if (delta < 500)
- {
- uBit.display.print(".");
- uBit.radio.datagram.send("1");
- uBit.sleep(250);
- transmit = true;
- }
- else if (delta > 500 && delta < 1500)
- {
- uBit.display.print("-");
- uBit.radio.datagram.send("2");
- uBit.sleep(500);
- transmit = true;
- }
- else if (uBit.buttonB.isPressed)
- {
- uBit.display.scroll("Sent");
- uBit.radio.datagram.send("3");
- uBit.sleep(750);
- break;
- }
- pressed = false;
- uBit.display.clear();
- }
- }
- }
- void onData(MicroBitEvent)
- {
- ManagedString s = uBit.radio.datagram.recv();
- if (s == "1"){
- uBit.display.print(dotImg);
- message += dot ;
- uBit.sleep(300);
- }
- else if (s == "2"){
- uBit.display.print(dashImg);
- message += dash;
- uBit.sleep(300);
- }
- else if (s == "3"){
- char temp = morsetree.code(message.c_str());
- sequence += temp;
- message.clear();
- uBit.display.scroll(sequence.c_str());
- uBit.sleep(1000);
- }
- uBit.display.clear();
- }
- void Son(){
- uBit.messageBus.listen(MICROBIT_ID_RADIO, MICROBIT_RADIO_EVT_DATAGRAM, onData);
- uBit.display.clear();
- }
- int main()
- {
- uBit.init();
- uBit.radio.enable();
- // If the program is being started up depict microBits to sender / reciever
- while (!running) {
- if (uBit.buttonA.isPressed() || uBit.buttonB.isPressed()) {
- // If button A has been pressed, assign it to be Dad.
- sender = uBit.buttonA.isPressed() ? true : false;
- // If button B has been pressed, assign it to be Son.
- receiver = uBit.buttonB.isPressed() ? true : false;
- // Prints out S or R on the sender (Dad) / reciever (Son) microBit.
- uBit.display.print(sender ? "S" : "R");
- uBit.sleep(1000);
- running = true;
- }
- }
- if(receiver){
- Son();
- }
- if(sender){
- Dad();
- }
- release_fiber();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement