helper.h (2067B)
1 #ifndef __HELPER_H_ 2 #define __HELPER_H_ 3 #include <Servo.h> 4 #include <stdint.h> 5 6 #define GREEN_LED 7 7 #define YELLOW_LED 12 8 #define RED_LED 13 9 10 #define BUTTONA 4 11 #define BUTTONB 2 12 13 #define SERVOA_PIN 6 14 #define SERVOB_PIN 5 15 16 #define LDRA A2 17 #define LDRB A1 18 #define LDRC A0 19 20 uint8_t SERVOA_ZERO = 83; 21 uint8_t SERVOB_ZERO = 85; 22 uint8_t SPEEDA = 10; 23 uint8_t SPEEDB = 10; 24 25 #define ANALOG_MAX 1023 26 27 #define IRTRANSMITTER 3 28 #define IRRECEVIER 2 29 30 #define IRFREQ 38000 31 32 #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) 33 34 uint16_t LDRA_SWITCH = 0; 35 uint16_t LDRB_SWITCH = 0; 36 uint16_t LDRC_SWITCH = 0; 37 38 enum DIRECTIONS { 39 FWD = 1, 40 BWD = -1, 41 LFT = -2, 42 RGT = 2 43 }; 44 45 Servo servoA; 46 Servo servoB; 47 48 void 49 setupRobot() { 50 Serial.begin(9600); 51 pinMode(GREEN_LED, OUTPUT); 52 pinMode(YELLOW_LED, OUTPUT); 53 pinMode(RED_LED, OUTPUT); 54 pinMode(BUTTONA, INPUT); 55 pinMode(BUTTONB, INPUT); 56 pinMode(SERVOA_PIN, OUTPUT); 57 pinMode(SERVOB_PIN, OUTPUT); 58 pinMode(LDRA, INPUT); 59 pinMode(LDRB, INPUT); 60 pinMode(LDRC, INPUT); 61 pinMode(IRTRANSMITTER, OUTPUT); 62 pinMode(IRRECEVIER, INPUT); 63 servoA.attach(SERVOA_PIN); 64 servoB.attach(SERVOB_PIN); 65 servoA.write(SERVOA_ZERO); 66 servoB.write(SERVOB_ZERO); 67 } 68 69 void 70 SEprintf(const char *fmt, ...) { 71 char sbuf[256] = { 0 }; 72 va_list ap; 73 74 va_start(ap, fmt); 75 vsnprintf(sbuf, 256, fmt, ap); 76 va_end(ap); 77 78 Serial.print(sbuf); 79 } 80 81 82 bool 83 isObstacle() { 84 tone(IRTRANSMITTER, IRFREQ); 85 delay(5); 86 bool ret = (digitalRead(IRRECEVIER) == LOW); 87 noTone(IRTRANSMITTER); 88 return ret; 89 } 90 91 bool 92 isLDRBright(int pin) { 93 int v = analogRead(pin); 94 switch (pin) { 95 case LDRA: 96 return (v > LDRA_SWITCH); 97 case LDRB: 98 return (v > LDRB_SWITCH); 99 case LDRC: 100 return (v > LDRC_SWITCH); 101 } 102 } 103 104 void 105 setLEDs(int g, int y, int r) { 106 digitalWrite(GREEN_LED, g); 107 digitalWrite(YELLOW_LED, y); 108 digitalWrite(RED_LED, r); 109 } 110 111 void 112 waitButton(int pin, int state) { 113 while (digitalRead(pin) != !state) ; 114 delay(50); 115 while (digitalRead(pin) != state) ; 116 delay(50); 117 } 118 bool 119 isButtonAPressed() { 120 return !digitalRead(BUTTONA); 121 } 122 123 bool 124 isButtonBPressed() { 125 return !digitalRead(BUTTONB); 126 } 127 #endif