Სარჩევი:

IR- დისტანციური ფერის გამოცნობის თამაში: 3 ნაბიჯი
IR- დისტანციური ფერის გამოცნობის თამაში: 3 ნაბიჯი

ვიდეო: IR- დისტანციური ფერის გამოცნობის თამაში: 3 ნაბიჯი

ვიდეო: IR- დისტანციური ფერის გამოცნობის თამაში: 3 ნაბიჯი
ვიდეო: ეკჰარტ ტოლე - "აწმყოს ძალა" - აუდიო წიგნი - Audible Read Along 2024, ნოემბერი
Anonim
IR- დისტანციური ფერის გამოცნობის თამაში
IR- დისტანციური ფერის გამოცნობის თამაში

ამ სასწავლო ინსტრუქციაში მე გაჩვენებთ თუ როგორ გააკონტროლოთ RGB led IR- დისტანციური მართვის საშუალებით და გააკეთეთ სახალისო თამაში მისგან!

ნაბიჯი 1: საჭირო ნაწილები

ნაწილები საჭიროა
ნაწილები საჭიროა

ამ პროექტისთვის დაგჭირდებათ ნაწილები:

- arduino one- RGB Led- IR- სენსორი

(led რაოდენობა დამოკიდებულია თამაშზე, სიცოცხლის რაოდენობაზე)- 2 მწვანე leds- 1 ყვითელი led- 1 ნარინჯისფერი led- 3 წითელი led

ნაბიჯი 2: კოდი

#ჩართეთ

int redPin = 10;

int greenPin = 6; int bluePin = 5;

int levensPin1 = 8;

int levensPin2 = 9; int levensPin3 = 12;

int დონეPin1 = 2;

int დონეPin2 = 3; int დონეPin3 = 4; int დონეPin4 = 7;

int RECV_PIN = 11;

IRrecv irrecv (RECV_PIN); decode_results results;

// შეყვანის ფერები

int შეყვანა = {-1, -1, -1}; int ფერი = {-1, -1, -1};

int indexNumber = 0;

int indexColor = 0;

int waarde = 0;

int rood = 0;

int groen = 0; int blauw = 0;

// ფერების გენერირება

int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;

// თამაშის ცვლადები

int diff = 200;

int დონეNumber = 1;

int დონე = {-1, -1, -1, -1};

int t = 0;

int დონე 1 = 255;

int დონე 2 = 0; int დონე 3 = 0; int დონე 4 = 0;

int სიცოცხლე = 3;

int levens1 = 255; int levens2 = 255; int levens3 = 255;

int roodGok = 0;

int groenGok = 0; int blauwGok = 0;

void setup () {

სერიული.დაწყება (9600); irrecv.enableIRIn (); // დაიწყეთ მიმღების pinMode (redPin, OUTPUT); pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT);

pinMode (levensPin1, OUTPUT);

pinMode (levensPin2, OUTPUT); pinMode (levensPin3, OUTPUT);

}

ბათილი მარყუჟი () {

თუ (irrecv.decode (& results)) // მიიღეთ სიგნალები დისტანციური {Serial.println (results.value, DEC); // თითოეული დაჭერილი ღილაკიდან მიღებული სიგნალების ჩვენება irrecv.resume (); // მიიღეთ მომდევნო სიგნალის გადამრთველი (results.value) {// გადააქციეთ სიგნალები ღილაკებზე არსებულ რიცხვებად და მიანიჭეთ მოქმედება ღილაკებს

საქმე 109562864:

addWaarde (1); შესვენება;

საქმე 109562824:

addWaarde (2); შესვენება;

საქმე 109562856:

addWaarde (3); შესვენება;

საქმე 109562872:

addWaarde (4); შესვენება;

საქმე 109562820:

addWaarde (5); შესვენება;

საქმე 109562852:

addWaarde (6); შესვენება;

საქმე 109562868:

addWaarde (7); შესვენება;

საქმე 109562828:

addWaarde (8); შესვენება;

საქმე 109562860:

addWaarde (9); შესვენება;

საქმე 109562876:

addWaarde (0); შესვენება;

საქმე 109562818: // oud ding enter/R CLK

handleInput (); შესვენება;

საქმე 109562816: // უდის დინგის ძალა

handleColor (); შესვენება; საქმე 109562878: // oud ding cancel/L CLK resetColor (); შესვენება;

საქმე 109562866: // lege knop midden

randomColor (); შესვენება;

საქმე 109562830: // pijltje naar rechts

ჩვენების ჩვენება ყველაფერი (); შესვენება; საქმე 109562838: // esc case 109562822: // AV წყარო resetEverything (); შესვენება; }

// დისტანციური მართვის ღილაკების დანიშვნა ფერის გასაკონტროლებლად: ამ გზით მოთამაშეებს შეუძლიათ დაინახონ როგორ გამოიყურება ფერები და როგორ აერთიანებს მათ, // თამაშის დაწყებამდე. გადართვა (results.value) {case 109562840: rood = 255; შესვენება;

საქმე 109562844:

groen = 255; შესვენება;

საქმე 109562850:

blauw = 255; შესვენება;

საქმე 109562836:

როდ = 0; groen = 0; blauw = 0; შესვენება; }

}

analogWrite (redPin, abs (255 - rood)); // RGB კონტროლის კონტროლი: საპირისპიროდ, რადგან ნაღმი საპირისპიროა.

analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));

// ცოცხალი ლიდერების კონტროლი

თუ (ცხოვრობს == 2) {levens1 = 0; } if (ცოცხლობს == 1) {levens2 = 0; } if (ცხოვრობს == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);

// დონის led- ების კონტროლი

if (levelNumber == 1) {level1 = 255; } if (levelNumber == 2) {level1 = 255; დონე 2 = 255; } if (levelNumber == 3) {level1 = 255; დონე 2 = 255; დონე 3 = 255; } if (levelNumber == 4) {level1 = 255; დონე 2 = 255; დონე 3 = 255; დონე 4 = 255; } analogWrite (levelPin1, level1); analogWrite (დონეPin2, დონე 2); analogWrite (დონეPin3, დონე 3); analogWrite (დონეPin4, დონე 4);

}

void addWaarde (int მნიშვნელობა) {// დაამატეთ დაპრესილი მნიშვნელობა სიაში

if (indexNumber == 3) {

დაბრუნების; }

if (შეყვანა [indexNumber] == -1) {

შეყვანა [indexNumber] = მნიშვნელობა; ინდექსი ნომერი ++; }}

void handleInput () {// გააკეთეთ 'waarde' (მნიშვნელობა) სიიდან

waarde = abs (შეყვანა [0] * 100 + შეყვანა [1] * 10 + შეყვანა [2]); შეყვანა [0] = -1; // აღადგინეთ სიგნალის შეყვანა [1] = -1; შეყვანა [2] = -1;

ინდექსი ნომერი = 0;

Serial.print ("waarde opgeslagen:"); Serial.println (waarde); addColor (ვარდი); }

void addColor (int waarde) {// დაამატეთ 3 ციფრიანი 'waarde' სიას

თუ (indexColor == 3) {

დაბრუნების; }

თუ (ფერი [indexColor] == -1) {

ფერი [indexColor] = უორდე; if (ფერი [indexColor]> 255) {ფერი [indexColor] = 255; } indexColor ++; }

}

void randomColor () {// გახადეთ შუქი შემთხვევითი ფერი და შეინახეთ იგი ცვლადებში

roodRandom = შემთხვევითი (0, 255);

groenRandom = შემთხვევითი (0, 255);

blauwRandom = შემთხვევითი (0, 255);

rood = rood შემთხვევითი;

groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (შემთხვევითი); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

}

void handleColor () {// გადააქციე 'waarde' სიიდან 'Gok' (გამოიცანი) ცვლადებად

roodGok = ფერი [0]; groenGok = ფერი [1]; blauwGok = ფერი [2]; // შეამოწმეთ თუ არა Gok ცვლადები ძალიან განსხვავდება რეალური შემთხვევითი ფერისგან: თუ ასეა, აჩვენეთ ვარაუდი სამი წამის განმავლობაში, მწვანე მოციმციმე და კვლავ შეცვალეთ ფერი, დაამატეთ დონე abd და ნებადართული სხვაობა უფრო მცირე გახადეთ // თუ არა, აჩვენეთ გამოიცანი სამი წამი, დახუჭე წითელი და გამოაკელი სიცოცხლეს // თუ სიცოცხლე არ გაქვს, თამაში კვლავ იწყება თუ (აბს ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= განსხვავ) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); დაგვიანება (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); დაგვიანება (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); დაგვიანება (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (300);

Serial.print ("roodGok =");

Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); randomColor (); დონე ნომერი ++; განსხვავება -= 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); დაგვიანება (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);

resetColor ();

ცხოვრობს--; } if (ცოცხლობს == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); დაგვიანება (100); გადატვირთვა ყველაფერი (); }

}

void resetColor () {// გამოიყენეთ მნიშვნელობების გადატვირთვისთვის, არასწორი დაჭერისთვის ან ყოველი ახალი გამოცნობისთვის (მხოლოდ დარწმუნებისთვის)

ფერი [0] = -1; ფერი [1] = -1; ფერი [2] = -1;

ინდექსი ნომერი = 0;

indexColor = 0; }

void resetEverything () {// გადატვირთეთ თამაში

ფერი [0] = -1; ფერი [1] = -1; ფერი [2] = -1;

ინდექსი ნომერი = 0;

indexColor = 0;

ცხოვრობს = 3;

როდ = 0; groen = 0; blauw = 0;

roodRandom = 0;

groenRandom = 0; blauwRandom = 0;

levens1 = 255;

levens2 = 255; levens3 = 255;

დონე 1 = 255;

დონე 2 = 0; დონე 3 = 0; დონე 4 = 0;

დონეNumber = 1;

t = 0;

}

void displayEverything () {// გამოიყენეთ ეს სერიული მონიტორის მნიშვნელოვანი ინფორმაციის საჩვენებლად

Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); Serial.print ("roodRandom ="); Serial.println (შემთხვევითი); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);

Serial.print ("rood =");

სერიული. ბეჭდვა (როდ); Serial.print ("groen ="); სერიული.პრინტლნი (გროენი); Serial.print ("blauw ="); Serial.println (blauw);

Serial.print ("waarde opgeslagen:");

Serial.println (ვაარდე); }

ნაბიჯი 3: აშენება

აშენება
აშენება
აშენება
აშენება
აშენება
აშენება
აშენება
აშენება

თქვენ აშკარად გსურთ ლამაზი მშენებლობა ამ პროექტისთვის. ეს ნაწილი საკმაოდ ღიაა ინტერპრეტაციისთვის, მაგრამ არსებობს რამდენიმე რამ, რაც უნდა გახსოვდეთ: - შეინახეთ წინა პანელი თხელი, ასე რომ თქვენ კვლავ შეგიძლიათ შეინარჩუნოთ თქვენი leds მასში და IR მიმღები მაინც მუშაობს

- შეინახეთ საკმარისი ადგილი შენობაში არდუინოსა და დასაკრავი დაფისთვის

- დარწმუნდით, რომ უკანა ნაწილში არის არდუინოს სიმძლავრე

მე დავამატე გაყვანილობის უხეში სქემა.

Წარმატებები და გაერთე!

გირჩევთ: