Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ankovsh
Created December 22, 2015 19:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ankovsh/68f772de39103ba69e33 to your computer and use it in GitHub Desktop.
Save ankovsh/68f772de39103ba69e33 to your computer and use it in GitHub Desktop.
RGB-ночник на базе Arduino
#include <IRremote.h>
const int rTriggerPin = 8;
const int rEchoPin = 7;
const int gTriggerPin = 10;
const int gEchoPin = 9;
const int bTriggerPin = 12;
const int bEchoPin = 11;
const int receiverPin = 4;
const int rLedPin = 3;
const int gLedPin = 5;
const int bLedPin = 6;
int on = 0;
IRrecv irrecv(receiverPin);
decode_results results;
void checkColor(int triggerPin, int echoPin, int ledPin, char* color) {
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
int distance = pulseIn(echoPin, HIGH);
int sm = distance/29/2;
if (sm >= 0 && sm <= 30) {
if (sm > 25)
analogWrite(ledPin, 0);
else
analogWrite(ledPin, 255 - (sm*10));
Serial.println(color);
Serial.println(sm);
}
}
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(rTriggerPin, OUTPUT);
pinMode(rEchoPin, INPUT);
pinMode(gTriggerPin, OUTPUT);
pinMode(gEchoPin, INPUT);
pinMode(bTriggerPin, OUTPUT);
pinMode(bEchoPin, INPUT);
pinMode(rLedPin, OUTPUT);
pinMode(gLedPin, OUTPUT);
pinMode(bLedPin, OUTPUT);
}
void loop() {
checkColor(rTriggerPin, rEchoPin, rLedPin, "red");
checkColor(gTriggerPin, gEchoPin, gLedPin, "green");
checkColor(bTriggerPin, bEchoPin, bLedPin, "blue");
if (irrecv.decode(&results)) {
switch (results.value) {
case 16724175: {
analogWrite(rLedPin, 255);
analogWrite(gLedPin, 0);
analogWrite(bLedPin, 0);
break;
}
case 16718055: {
analogWrite(rLedPin, 0);
analogWrite(gLedPin, 255);
analogWrite(bLedPin, 0);
break;
}
case 16743045: {
analogWrite(rLedPin, 0);
analogWrite(gLedPin, 0);
analogWrite(bLedPin, 255);
break;
}
case 16736925: {
if(on) {
analogWrite(rLedPin, 0);
analogWrite(gLedPin, 0);
analogWrite(bLedPin, 0);
on = 0;
}
else {
analogWrite(rLedPin, 255);
analogWrite(gLedPin, 255);
analogWrite(bLedPin, 255);
on = 1;
}
break;
}
case 16738455: {
int r = 0, g = 0, b = 255;
analogWrite(bLedPin, b);
analogWrite(gLedPin, g);
analogWrite(rLedPin, r);
delay(500);
for(r = 0; r < 255; r++) {
analogWrite(bLedPin, b);
analogWrite(gLedPin, g);
analogWrite(rLedPin, r);
Serial.println(r);
Serial.println(g);
Serial.println(b);
delay(100);
}
for(b = 0; b < 255; b++) {
analogWrite(bLedPin, 255 - b);
analogWrite(rLedPin, r);
analogWrite(gLedPin, g);
Serial.println(r);
Serial.println(g);
Serial.println(b);
delay(100);
}
b = 0;
for(g = 0; g < 255; g++) {
analogWrite(bLedPin, b);
analogWrite(gLedPin, g);
analogWrite(rLedPin, r);
Serial.println(r);
Serial.println(g);
Serial.println(b);
delay(100);
}
for(r = 0; r < 255; r++) {
analogWrite(rLedPin, 255 - r);
analogWrite(gLedPin, g);
analogWrite(bLedPin, b);
Serial.println(r);
Serial.println(g);
Serial.println(b);
delay(100);
}
r = 0;
for(b = 0; b < 255; b++) {
analogWrite(bLedPin, b);
analogWrite(gLedPin, g);
analogWrite(rLedPin, r);
Serial.println(r);
Serial.println(g);
Serial.println(b);
delay(100);
}
for(g = 0; g < 255; g++) {
analogWrite(gLedPin, 255 - g);
analogWrite(bLedPin, b);
analogWrite(rLedPin, r);
Serial.println(r);
Serial.println(g);
Serial.println(b);
delay(100);
}
g = 0;
break;
}
}
Serial.println(results.value);
irrecv.resume();
}
delay(100);
}
@0a113ef6b61820daa5611c870ed8d5ee

У вас в статье на хабре ошибка в расчете сопротивления, вы выбрали ток базы 5мА, а в формулу подставили в 0.5мА. И еще, по схеме - у вас обозначения резисторов дублированы (R1, R2, ... встречается несколько раз). Между базой и эмиттером транзисторов нужны резисторы, иначе - пока микроконтроллер не инициализирован, транзистор будет работать в режиме с оборванной базой. Но, конечно, если курсовой приняли то это всё уже не важно :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment