1int leds[] = {2, 3, 4, 5, 6};
2int numLEDs = 5;
3
4void setup() {
5 Serial.begin(9600);
6
7 for (int i = 0; i < numLEDs; i++) {
8 pinMode(leds[i], OUTPUT);
9 }
10}
11
12void loop() {
13 if (Serial.available() > 0) {
14 int fingerCount = Serial.parseInt();
15
16 // Turn OFF all LEDs first
17 for (int i = 0; i < numLEDs; i++) {
18 digitalWrite(leds[i], LOW);
19 }
20
21 // Turn ON LEDs based on finger count
22 for (int i = 0; i < fingerCount && i < numLEDs; i++) {
23 digitalWrite(leds[i], HIGH);
24 }
25 }
26}
27
28
29// Below is PYTHON code for controlling with hand
30import cv2
31import mediapipe as mp
32import serial
33import time
34
35# 🔌 Change COM port (IMPORTANT)
36arduino = serial.Serial('COM3', 9600) # Example: COM3 (Windows)
37time.sleep(2)
38
39mp_hands = mp.solutions.hands
40hands = mp_hands.Hands()
41mp_draw = mp.solutions.drawing_utils
42
43cap = cv2.VideoCapture(0)
44
45def count_fingers(hand_landmarks):
46 fingers = []
47
48 # Thumb
49 if hand_landmarks.landmark[4].x < hand_landmarks.landmark[3].x:
50 fingers.append(1)
51 else:
52 fingers.append(0)
53
54 # 4 Fingers
55 tips = [8, 12, 16, 20]
56 for tip in tips:
57 if hand_landmarks.landmark[tip].y < hand_landmarks.landmark[tip - 2].y:
58 fingers.append(1)
59 else:
60 fingers.append(0)
61
62 return sum(fingers)
63
64while True:
65 success, img = cap.read()
66 img = cv2.flip(img, 1)
67
68 rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
69 results = hands.process(rgb)
70
71 finger_count = 0
72
73 if results.multi_hand_landmarks:
74 for handLms in results.multi_hand_landmarks:
75 mp_draw.draw_landmarks(img, handLms, mp_hands.HAND_CONNECTIONS)
76 finger_count =