└── SevSeg_Counter.ino.ino /SevSeg_Counter.ino.ino: -------------------------------------------------------------------------------- 1 | #include "SevSeg.h" 2 | #define ECHOPIN 2 3 | #define TRIGPIN 3 4 | #define ECHOPIND 4 5 | #define TRIGPIND 5 6 | #define ECHOPINT 6 7 | #define TRIGPINT 7 8 | 9 | SevSeg sevseg,sevseg1,sevseg2; 10 | byte numDigits = 2; 11 | byte digitPins[] = {8,9}; 12 | byte digitPins1[] = {10,11}; 13 | byte digitPins2[] = {12,13}; 14 | byte segmentPins[] = {22,23,24,25,26,27,28,29}; 15 | byte segmentPins1[] = {30,31,32,33,34,35,36,37}; 16 | byte segmentPins2[] = {38,39,40,41,42,43,44,45}; 17 | bool resistorsOnSegments = false; 18 | byte hardwareConfig = COMMON_ANODE; 19 | bool updateWithDelays = false; 20 | bool leadingZeros = true; 21 | int waktuS,waktuD,waktuT; 22 | int senS,senD,senT; 23 | bool Status1 = false,Status2 = false,Status3 = false; 24 | 25 | 26 | void setup() { 27 | pinMode(ECHOPIN, INPUT); 28 | pinMode(TRIGPIN, OUTPUT); 29 | pinMode(ECHOPIND, INPUT); 30 | pinMode(TRIGPIND, OUTPUT); 31 | pinMode(ECHOPINT, INPUT); 32 | pinMode(TRIGPINT, OUTPUT); 33 | for(int i = 46; i<= 53; i++){ 34 | pinMode(i, OUTPUT); 35 | } 36 | pinMode(A15, OUTPUT); 37 | 38 | sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,resistorsOnSegments, updateWithDelays, leadingZeros); 39 | sevseg1.begin(hardwareConfig, numDigits, digitPins1, segmentPins1,resistorsOnSegments, updateWithDelays, leadingZeros); 40 | sevseg2.begin(hardwareConfig, numDigits, digitPins2, segmentPins2,resistorsOnSegments, updateWithDelays, leadingZeros); 41 | Serial.begin(9600); 42 | } 43 | int sensor1(){ 44 | digitalWrite(TRIGPIN, LOW); 45 | digitalWrite(TRIGPIN, HIGH); 46 | digitalWrite(TRIGPIN, LOW); 47 | int distance = pulseIn(ECHOPIN, HIGH); 48 | distance= distance/58; 49 | if(distance <= 5){ 50 | return true; 51 | } 52 | else{ 53 | return false; 54 | } 55 | } 56 | int sensor2(){ 57 | digitalWrite(TRIGPIND, LOW); 58 | digitalWrite(TRIGPIND, HIGH); 59 | digitalWrite(TRIGPIND, LOW); 60 | int distance = pulseIn(ECHOPIND, HIGH); 61 | distance= distance/58; 62 | if(distance <= 5){ 63 | return true; 64 | } 65 | else{ 66 | return false; 67 | } 68 | } 69 | int sensor3(){ 70 | digitalWrite(TRIGPINT, LOW); 71 | digitalWrite(TRIGPINT, HIGH); 72 | digitalWrite(TRIGPINT, LOW); 73 | int distance = pulseIn(ECHOPINT, HIGH); 74 | distance= distance/58; 75 | if(distance <= 5){ 76 | return true; 77 | } 78 | else{ 79 | return false; 80 | } 81 | } 82 | void loop() { 83 | static unsigned long timer = millis(); 84 | if (millis() - timer >= 1000) { 85 | if(sensor1()){ 86 | senS++; 87 | 88 | if(senS >= 4){ // 5 detik 89 | senS = 0; 90 | } 91 | } 92 | else{ 93 | senS = 0; 94 | } 95 | if(sensor2()){ 96 | senD++; 97 | if(senD >= 4){ // 5 detik 98 | senD = 0; 99 | } 100 | } 101 | else{ 102 | senD = 0; 103 | } 104 | if(sensor3()){ 105 | senT++; 106 | if(senT >= 4){ // 5 detik 107 | senT = 0; 108 | } 109 | } 110 | else{ 111 | senT = 0; 112 | } 113 | 114 | normal(); 115 | 116 | timer += 1000; 117 | waktuS--; 118 | waktuD--; 119 | waktuT--; 120 | } 121 | sevseg.refreshDisplay(); 122 | sevseg1.refreshDisplay(); 123 | sevseg2.refreshDisplay(); 124 | LampNormal(); 125 | } 126 | 127 | 128 | void LampNormal(){ 129 | if(waktuS != 0){ 130 | if(waktuS >= 5){ 131 | Lampu(1,1); 132 | } 133 | else if(waktuS ==4 || waktuS ==3 || waktuS ==2 || waktuS == 1){ 134 | Lampu(1,2); 135 | } 136 | else if(waktuD ==4 || waktuD ==3 ){ 137 | Lampu(1,2); 138 | } 139 | else if(waktuD ==2 || waktuD ==1 || waktuD ==0 ){ 140 | Lampu(1,1); 141 | } 142 | else{ 143 | Lampu(1,3); 144 | if(!Status1){ 145 | if(senS >=3){ 146 | waktuD =waktuD + 5; 147 | waktuT =waktuT + 5; 148 | Status1 = true; 149 | Status2 = false; 150 | Status3 = false; 151 | } 152 | } 153 | } 154 | } 155 | if(waktuD != 0){ 156 | if(waktuD >= 5){ 157 | Lampu(2,1); 158 | } 159 | else if(waktuD ==4 || waktuD ==3 || waktuD ==2 || waktuD == 1){ 160 | Lampu(2,2); 161 | } 162 | else if(waktuT ==4 || waktuT ==3 ){ 163 | Lampu(2,2); 164 | } 165 | else if(waktuT == 2 || waktuT == 1 || waktuT == 0 ){ 166 | Lampu(2,1); 167 | } 168 | else{ 169 | Lampu(2,3); 170 | if(!Status2){ 171 | if(senD >=3){ 172 | waktuS =waktuS + 5; 173 | waktuT =waktuT + 5; 174 | Status2 = true; 175 | Status1 = false; 176 | Status3 = false; 177 | } 178 | } 179 | } 180 | } 181 | if(waktuT != 0){ 182 | if(waktuT >= 5){ 183 | Lampu(3,1);// 184 | } 185 | else if(waktuT ==4 || waktuT ==3 || waktuT ==2 || waktuT == 1){ 186 | Lampu(3,2); 187 | } 188 | else if(waktuS ==4 || waktuS ==3){ 189 | Lampu(3,2); 190 | } 191 | else if(waktuS == 2 ||waktuS == 1 || waktuS == 0){ 192 | Lampu(3,1); 193 | } 194 | else{ 195 | Lampu(3,3); 196 | if(!Status3){ // kalau false 197 | if(senT >=3){ // ketika sensor terhalang 4 detik 198 | waktuD =waktuD + 5; // penambahan waktu 5 detik 199 | waktuS =waktuS + 5; 200 | Status3 = true; 201 | Status2 = false; 202 | Status1 = false; 203 | } 204 | } 205 | } 206 | } 207 | } 208 | void Lampu (int simpang, int warna){ 209 | // warna 1: merah, 2:kuning, 3 : hijau 210 | if(simpang == 1 && warna == 1){ 211 | digitalWrite(46,HIGH); 212 | digitalWrite(47,LOW); 213 | digitalWrite(48,LOW); 214 | } 215 | else if(simpang == 1 && warna == 2){ 216 | digitalWrite(46,LOW); 217 | digitalWrite(47,HIGH); 218 | digitalWrite(48,LOW); 219 | } 220 | else if(simpang == 1 && warna == 3){ 221 | digitalWrite(46,LOW); 222 | digitalWrite(47,LOW); 223 | digitalWrite(48,HIGH); 224 | } 225 | else if(simpang == 2 && warna == 1){ 226 | digitalWrite(49,HIGH); 227 | digitalWrite(50,LOW); 228 | digitalWrite(51,LOW); 229 | } 230 | else if(simpang == 2 && warna == 2){ 231 | digitalWrite(49,LOW); 232 | digitalWrite(50,HIGH); 233 | digitalWrite(51,LOW); 234 | } 235 | else if(simpang == 2 && warna == 3){ 236 | digitalWrite(49,LOW); 237 | digitalWrite(50,LOW); 238 | digitalWrite(51,HIGH); 239 | } 240 | else if(simpang == 3 && warna == 1){ 241 | digitalWrite(52,HIGH); 242 | digitalWrite(53,LOW); 243 | digitalWrite(A15,LOW); 244 | } 245 | else if(simpang == 3 && warna == 2){ 246 | digitalWrite(52,LOW); 247 | digitalWrite(53,HIGH); 248 | digitalWrite(A15,LOW); 249 | } 250 | else if(simpang == 3 && warna == 3){ 251 | digitalWrite(52,LOW); 252 | digitalWrite(53,LOW); 253 | digitalWrite(A15,HIGH); 254 | } 255 | 256 | } 257 | void normal(){ 258 | if(waktuS == 0){ 259 | waktuD = 15; 260 | waktuT = 30; 261 | }else if(waktuD == 0){ 262 | waktuT = 15; 263 | waktuS = 30; 264 | }else if(waktuT == 0){ 265 | waktuS = 15; 266 | waktuD = 30; 267 | } 268 | if(waktuS != 0){ 269 | if(waktuS > 0){ 270 | sevseg.setNumber(waktuS); 271 | } 272 | else{ 273 | sevseg.setNumber(waktuD); 274 | } 275 | } 276 | if(waktuD != 0){ 277 | if(waktuD > 0){ 278 | sevseg1.setNumber(waktuD); 279 | } 280 | else{ 281 | sevseg1.setNumber(waktuT); 282 | } 283 | } 284 | if(waktuT != 0){ 285 | if(waktuT > 0){ 286 | sevseg2.setNumber(waktuT); 287 | } 288 | else{ 289 | sevseg2.setNumber(waktuS); 290 | } 291 | } 292 | } 293 | 294 | --------------------------------------------------------------------------------