iot_smart_hedgehog_home
Dependencies: 4DGL-uLCD-SE LCD_fonts PinDetect Servo mbed-rtos mbed wave_player
main.cpp@0:87d9eb921232, 2017-11-29 (annotated)
- Committer:
- albertoli
- Date:
- Wed Nov 29 06:17:30 2017 +0000
- Revision:
- 0:87d9eb921232
first_commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
albertoli | 0:87d9eb921232 | 1 | #include "mbed.h" |
albertoli | 0:87d9eb921232 | 2 | #include "Servo.h" |
albertoli | 0:87d9eb921232 | 3 | #include "rtos.h" |
albertoli | 0:87d9eb921232 | 4 | #include "SDFileSystem.h" |
albertoli | 0:87d9eb921232 | 5 | #include "wave_player.h" |
albertoli | 0:87d9eb921232 | 6 | RawSerial pi(USBTX, USBRX); |
albertoli | 0:87d9eb921232 | 7 | Mutex serial_mutex; |
albertoli | 0:87d9eb921232 | 8 | |
albertoli | 0:87d9eb921232 | 9 | Servo myservo(p21); |
albertoli | 0:87d9eb921232 | 10 | AnalogIn LM61(p15); |
albertoli | 0:87d9eb921232 | 11 | |
albertoli | 0:87d9eb921232 | 12 | SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board |
albertoli | 0:87d9eb921232 | 13 | AnalogOut DACout(p18); |
albertoli | 0:87d9eb921232 | 14 | //On Board Speaker |
albertoli | 0:87d9eb921232 | 15 | //PwmOut PWMout(p25); |
albertoli | 0:87d9eb921232 | 16 | wave_player waver(&DACout); |
albertoli | 0:87d9eb921232 | 17 | |
albertoli | 0:87d9eb921232 | 18 | volatile float temp_out; |
albertoli | 0:87d9eb921232 | 19 | volatile float rpm_out; |
albertoli | 0:87d9eb921232 | 20 | volatile float wheel_speed_out; |
albertoli | 0:87d9eb921232 | 21 | volatile int treat = 0; |
albertoli | 0:87d9eb921232 | 22 | volatile int music = 0; |
albertoli | 0:87d9eb921232 | 23 | volatile bool x; |
albertoli | 0:87d9eb921232 | 24 | |
albertoli | 0:87d9eb921232 | 25 | DigitalOut myled1(LED1); |
albertoli | 0:87d9eb921232 | 26 | DigitalOut myled2(LED2); |
albertoli | 0:87d9eb921232 | 27 | DigitalOut myled3(LED3); |
albertoli | 0:87d9eb921232 | 28 | |
albertoli | 0:87d9eb921232 | 29 | volatile long int count; |
albertoli | 0:87d9eb921232 | 30 | |
albertoli | 0:87d9eb921232 | 31 | Serial pc(USBTX, USBRX); |
albertoli | 0:87d9eb921232 | 32 | Timer t; |
albertoli | 0:87d9eb921232 | 33 | InterruptIn risingEdge(p11); |
albertoli | 0:87d9eb921232 | 34 | |
albertoli | 0:87d9eb921232 | 35 | void dev_recv() |
albertoli | 0:87d9eb921232 | 36 | { while(1){ |
albertoli | 0:87d9eb921232 | 37 | char temp = 0; |
albertoli | 0:87d9eb921232 | 38 | while(pi.readable()) { |
albertoli | 0:87d9eb921232 | 39 | myled3 = !myled3; |
albertoli | 0:87d9eb921232 | 40 | serial_mutex.lock(); |
albertoli | 0:87d9eb921232 | 41 | temp = pi.getc(); |
albertoli | 0:87d9eb921232 | 42 | if (temp=='t'){ |
albertoli | 0:87d9eb921232 | 43 | myled2=1; |
albertoli | 0:87d9eb921232 | 44 | treat=1; |
albertoli | 0:87d9eb921232 | 45 | } |
albertoli | 0:87d9eb921232 | 46 | if (temp=='m'){ |
albertoli | 0:87d9eb921232 | 47 | myled1=1; |
albertoli | 0:87d9eb921232 | 48 | music=1; |
albertoli | 0:87d9eb921232 | 49 | } |
albertoli | 0:87d9eb921232 | 50 | serial_mutex.unlock(); |
albertoli | 0:87d9eb921232 | 51 | } |
albertoli | 0:87d9eb921232 | 52 | } |
albertoli | 0:87d9eb921232 | 53 | } |
albertoli | 0:87d9eb921232 | 54 | |
albertoli | 0:87d9eb921232 | 55 | void check_temp() { |
albertoli | 0:87d9eb921232 | 56 | float tempC, tempF; |
albertoli | 0:87d9eb921232 | 57 | while (1) { |
albertoli | 0:87d9eb921232 | 58 | //conversion to degrees C - from sensor output voltage per LM61 data sheet |
albertoli | 0:87d9eb921232 | 59 | tempC = ((LM61*3.3) - 0.600)*100.0; |
albertoli | 0:87d9eb921232 | 60 | //convert to degrees F |
albertoli | 0:87d9eb921232 | 61 | tempF = (9.0*tempC) / 5.0 + 32.0; |
albertoli | 0:87d9eb921232 | 62 | temp_out = tempF + 16.7; |
albertoli | 0:87d9eb921232 | 63 | //print current temp |
albertoli | 0:87d9eb921232 | 64 | Thread::wait(500); |
albertoli | 0:87d9eb921232 | 65 | } |
albertoli | 0:87d9eb921232 | 66 | } |
albertoli | 0:87d9eb921232 | 67 | |
albertoli | 0:87d9eb921232 | 68 | void deliver_snack() |
albertoli | 0:87d9eb921232 | 69 | { while(1){ |
albertoli | 0:87d9eb921232 | 70 | if (treat == 1) { |
albertoli | 0:87d9eb921232 | 71 | myservo = 1; //closed position |
albertoli | 0:87d9eb921232 | 72 | Thread::wait(1000); |
albertoli | 0:87d9eb921232 | 73 | myservo = .7; //open position |
albertoli | 0:87d9eb921232 | 74 | Thread::wait(200); // open for .2 secs delivers half a small tupperware |
albertoli | 0:87d9eb921232 | 75 | myservo = 1; |
albertoli | 0:87d9eb921232 | 76 | Thread::wait(500); |
albertoli | 0:87d9eb921232 | 77 | treat = 0; |
albertoli | 0:87d9eb921232 | 78 | myled2=0; |
albertoli | 0:87d9eb921232 | 79 | } |
albertoli | 0:87d9eb921232 | 80 | Thread::yield(); |
albertoli | 0:87d9eb921232 | 81 | } |
albertoli | 0:87d9eb921232 | 82 | } |
albertoli | 0:87d9eb921232 | 83 | |
albertoli | 0:87d9eb921232 | 84 | |
albertoli | 0:87d9eb921232 | 85 | |
albertoli | 0:87d9eb921232 | 86 | |
albertoli | 0:87d9eb921232 | 87 | char* getOut() |
albertoli | 0:87d9eb921232 | 88 | { |
albertoli | 0:87d9eb921232 | 89 | char output[22]; |
albertoli | 0:87d9eb921232 | 90 | |
albertoli | 0:87d9eb921232 | 91 | snprintf(output, 22, "%3.1f, %4.0f, %1.5f \n", temp_out, rpm_out, wheel_speed_out); |
albertoli | 0:87d9eb921232 | 92 | return output; |
albertoli | 0:87d9eb921232 | 93 | } |
albertoli | 0:87d9eb921232 | 94 | |
albertoli | 0:87d9eb921232 | 95 | void send_data() { |
albertoli | 0:87d9eb921232 | 96 | while(1) |
albertoli | 0:87d9eb921232 | 97 | { |
albertoli | 0:87d9eb921232 | 98 | serial_mutex.lock(); |
albertoli | 0:87d9eb921232 | 99 | pi.puts(getOut()); |
albertoli | 0:87d9eb921232 | 100 | serial_mutex.unlock(); |
albertoli | 0:87d9eb921232 | 101 | Thread::wait(5000); |
albertoli | 0:87d9eb921232 | 102 | |
albertoli | 0:87d9eb921232 | 103 | } |
albertoli | 0:87d9eb921232 | 104 | } |
albertoli | 0:87d9eb921232 | 105 | |
albertoli | 0:87d9eb921232 | 106 | void pulses() { |
albertoli | 0:87d9eb921232 | 107 | count++; |
albertoli | 0:87d9eb921232 | 108 | } |
albertoli | 0:87d9eb921232 | 109 | |
albertoli | 0:87d9eb921232 | 110 | void check_wheel() { |
albertoli | 0:87d9eb921232 | 111 | double rpm = 0; |
albertoli | 0:87d9eb921232 | 112 | double speed = 0; |
albertoli | 0:87d9eb921232 | 113 | double circumference = 0.266 * 3.1416; // 26. cm wheel diameter * pi |
albertoli | 0:87d9eb921232 | 114 | risingEdge.rise(&pulses); |
albertoli | 0:87d9eb921232 | 115 | long int temp = count; |
albertoli | 0:87d9eb921232 | 116 | while (1) { |
albertoli | 0:87d9eb921232 | 117 | count = 0; |
albertoli | 0:87d9eb921232 | 118 | t.reset(); |
albertoli | 0:87d9eb921232 | 119 | t.start(); |
albertoli | 0:87d9eb921232 | 120 | while (t.read_ms() < 2001) { |
albertoli | 0:87d9eb921232 | 121 | ; |
albertoli | 0:87d9eb921232 | 122 | } |
albertoli | 0:87d9eb921232 | 123 | t.stop(); |
albertoli | 0:87d9eb921232 | 124 | temp=count; |
albertoli | 0:87d9eb921232 | 125 | double rev = (double)temp; |
albertoli | 0:87d9eb921232 | 126 | double rpm = rev * 30; |
albertoli | 0:87d9eb921232 | 127 | double speed = circumference * rev; |
albertoli | 0:87d9eb921232 | 128 | rpm_out = (float)rpm; |
albertoli | 0:87d9eb921232 | 129 | wheel_speed_out = (float)speed; |
albertoli | 0:87d9eb921232 | 130 | } |
albertoli | 0:87d9eb921232 | 131 | } |
albertoli | 0:87d9eb921232 | 132 | |
albertoli | 0:87d9eb921232 | 133 | |
albertoli | 0:87d9eb921232 | 134 | int main() { |
albertoli | 0:87d9eb921232 | 135 | //printf("Hello, in Main"); |
albertoli | 0:87d9eb921232 | 136 | Thread t1(check_temp); |
albertoli | 0:87d9eb921232 | 137 | Thread t2(send_data); |
albertoli | 0:87d9eb921232 | 138 | Thread t3(check_wheel); |
albertoli | 0:87d9eb921232 | 139 | Thread t4(dev_recv); |
albertoli | 0:87d9eb921232 | 140 | Thread t5(deliver_snack); |
albertoli | 0:87d9eb921232 | 141 | |
albertoli | 0:87d9eb921232 | 142 | while (1) { |
albertoli | 0:87d9eb921232 | 143 | if (music == 1) { |
albertoli | 0:87d9eb921232 | 144 | FILE *wave_file = fopen("/sd/wavfiles/crickets.wav", "r"); |
albertoli | 0:87d9eb921232 | 145 | waver.play(wave_file); |
albertoli | 0:87d9eb921232 | 146 | fclose(wave_file); |
albertoli | 0:87d9eb921232 | 147 | Thread::wait(1000); |
albertoli | 0:87d9eb921232 | 148 | music = 0; |
albertoli | 0:87d9eb921232 | 149 | myled2=0; |
albertoli | 0:87d9eb921232 | 150 | } |
albertoli | 0:87d9eb921232 | 151 | } |
albertoli | 0:87d9eb921232 | 152 | } |