tes ir atas semua
Dependencies: mbed ADS1115 StepperMotor SRF05 TPA81new
main.cpp
- Committer:
- hisyamfs
- Date:
- 2019-03-06
- Revision:
- 49:d23d76689933
- Parent:
- 48:c8c9c624d46d
File content as of revision 49:d23d76689933:
#include "mbed.h" #include "TPA81new.h" #include "SRF05.h" #include "Uvtron.h" #include "Stepper.h" #include "AMG8833.h" #include "Adafruit_ADS1015.h" // Konstanta #define WAIT_TIME 0.02 // infrared #define a_depan 5000000 #define b_depan 1.229 #define a_ads 500000 #define b_ads 1.184 #define I2C_ADDR 0xC0 Serial pc(USBTX,USBRX, 115200); // AMG Adafruit_AMG88xx amg(PB_3, PB_10); // sda, scl float pixels[AMG88xx_PIXEL_ARRAY_SIZE]; DigitalOut relay(PB_2); Uvtron uv(PC_12); DigitalIn sound(PA_9); AnalogIn line(PC_1); // Infrared // atas AnalogIn ira1(PC_5); AnalogIn ira2(PA_5); AnalogIn ira3(PC_2); AnalogIn ira4(PC_3); AnalogIn ira5(PC_4); AnalogIn ira6(PB_1); AnalogIn ira7(PA_7); AnalogIn ira8(PA_6); // bawah AnalogIn irb1(PA_0); AnalogIn irb2(PA_1); AnalogIn irb3(PA_4); AnalogIn irb4(PB_0); // ADC I2C ads_i2c(PB_9, PB_8); // sda, scl Adafruit_ADS1015 ads(&ads_i2c); // kompas I2C cmps12(PB_4, PA_8); //sda, scl // stepper(PinName _en, PinName ms1, PinName ms2, PinName ms3, PinName _stepPin, PinName dir); stepper s(PC_8, PC_6, PA_12, PA_11, PB_12, PC_7); // sound //DigitalIn sound(PA_9); DigitalOut led_api(PB_6); DigitalOut led_sound(PH_1); float call_depan(uint16_t x) { float side_distance = a_depan/pow(x,b_depan)+1; return side_distance; } float call_ads(uint16_t ir) { float voltage = ir * 6.2676 * 10e-5; // ubah ke mV uint16_t x = (voltage/3.3f) * 0xFFFF; // ubah ke uint16_t sesuai max nucleo float dist = a_ads/pow(x, b_ads)+1; return dist; } int main() { uint16_t ads_raw[4] = {}; int status = amg.begin(AMG88xx_ADDRESS); amg.setMovingAverageMode(1); if (!status) { pc.printf("Could not find a valid AMG88xx sensor, check wiring! \n"); while (1); } relay = 1; wait_ms(100); while (sound.read() == 1){ wait_ms(100); }; pc.printf("Sound detected\n"); while (1) { led_sound = 1; // IR for (uint8_t i=0; i < 4; i++) { ads_raw[i] = ads.readADC_SingleEnded(i); wait_ms(10); }; uint16_t raw_a1 = ira1.read_u16(); uint16_t raw_a2 = ira2.read_u16(); uint16_t raw_a3 = ira3.read_u16(); uint16_t raw_a4 = ira4.read_u16(); uint16_t raw_a5 = ira5.read_u16(); uint16_t raw_a6 = ira6.read_u16(); uint16_t raw_a7 = ira7.read_u16(); uint16_t raw_a8 = ira8.read_u16(); uint16_t raw_b1 = irb1.read_u16(); uint16_t raw_b2 = irb2.read_u16(); uint16_t raw_b3 = irb3.read_u16(); uint16_t raw_b4 = irb4.read_u16(); float dist_a1 = call_depan(raw_a1); float dist_a2 = call_depan(raw_a2); float dist_a3 = call_depan(raw_a3); float dist_a4 = call_depan(raw_a4); float dist_a5 = call_depan(raw_a5); float dist_a6 = call_depan(raw_a6); float dist_a7 = call_depan(raw_a7); float dist_a8 = call_depan(raw_a8); float dist_a9 = call_ads(ads_raw[1]); float dist_a10 = call_ads(ads_raw[3]); float dist_a11 = call_ads(ads_raw[2]); float dist_a12 = call_ads(ads_raw[0]); float dist_b1 = call_depan(raw_b1); float dist_b2 = call_depan(raw_b2); float dist_b3 = call_depan(raw_b3); float dist_b4 = call_depan(raw_b4); pc.printf("ir atas\n"); pc.printf("%.2f %.2f %.2f %.2f\n", dist_a9, dist_a10, dist_a11, dist_a12); pc.printf("%.2f %.2f\n", dist_a3, dist_a1); pc.printf("%.2f %.2f\n", dist_a4, dist_a6); pc.printf("%.2f %.2f %.2f %.2f\n", dist_a2, dist_a8, dist_a7, dist_a5); pc.printf("ir bawah\n"); pc.printf(" %.2f\n", dist_b1); pc.printf("%.2f %.2f\n", dist_b2, dist_b3); pc.printf(" %.2f\n", dist_b4); // baca amg float therm_temp = amg.readThermistor(); amg.readPixels(pixels); pc.printf("%.2f\n", therm_temp); float max_temp = pixels[0]; int max_i = 0; float sum_temp = 0; for (int i = 1; i <= AMG88xx_PIXEL_ARRAY_SIZE; i++) { // pc.printf("%.2f ", pixels[i-1]); // if (i % 8 == 0) pc.printf("\n"); if (pixels[i-1] > max_temp) { max_temp = pixels[i-1]; max_i = i; } sum_temp += pixels[i-1]; } // uvtron uv.Read(); int read = uv.Flag; if (read) pc.printf("FIRE DETECTED\n"); else pc.printf("NOT DETECTED\n"); pc.printf("temp max= %.2f at %d\n", max_temp, max_i); pc.printf("temp rata2 = %.2f\n", sum_temp/AMG88xx_PIXEL_ARRAY_SIZE); // baca kompas char data[2] = {0x1, 0xFF}; int nack; nack = cmps12.write(I2C_ADDR, data, 1); nack = cmps12.read(I2C_ADDR, data+1, 1); pc.printf("Bearing kompas = %.2f\n", (float) data[1]/255*360); // stepper pc.printf("Stepper \n"); for (int i = 0; i < 50; i++) { s.step(1, 1, 1/WAIT_TIME); // CCW } for (int i = 0; i < 50; i++) { s.step(1, 0, 1/WAIT_TIME); // CW } // pompa relay = 0; // active low pc.printf("Pompa on!\n"); wait(1); relay = 1; pc.printf("Pompa off\n"); wait(1); wait_ms(200); pc.printf("\033[2J\033[H"); } }