helper.h (2138B)
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 = 84; 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 int readings = 0; 85 tone(IRTRANSMITTER, IRFREQ); 86 delay(5); 87 for (int i = 0; i < 100; i++) { 88 if (digitalRead(IRRECEVIER) == LOW) readings++; 89 } 90 noTone(IRTRANSMITTER); 91 return (readings >= 80); 92 } 93 94 bool 95 isLDRBright(int pin) { 96 int v = analogRead(pin); 97 switch (pin) { 98 case LDRA: 99 return (v > LDRA_SWITCH); 100 case LDRB: 101 return (v > LDRB_SWITCH); 102 case LDRC: 103 return (v > LDRC_SWITCH); 104 } 105 } 106 107 void 108 setLEDs(int g, int y, int r) { 109 digitalWrite(GREEN_LED, g); 110 digitalWrite(YELLOW_LED, y); 111 digitalWrite(RED_LED, r); 112 } 113 114 void 115 waitButton(int pin, int state) { 116 while (digitalRead(pin) != !state) ; 117 delay(50); 118 while (digitalRead(pin) != state) ; 119 delay(50); 120 } 121 bool 122 isButtonAPressed() { 123 return !digitalRead(BUTTONA); 124 } 125 126 bool 127 isButtonBPressed() { 128 return !digitalRead(BUTTONB); 129 } 130 #endif