Решил задаться целью и сделать так, чтобы от оборотов и скорости соответствующие стрелки приборной панели, меняли цвет. Но вот незадача, код нужный был найден, но он написан для arduino nano, но для таких целей ее использовать просто глупо. В планах для каждой стрелки сделать тоже самое только на attiny13a, но вот как подогнать код для нее. Не хватает у меня знаний пока что для адаптации кода. Помогите пожалуйста необразованному в этих делах коту
Скетч ардуинки прикладываю
Спойлер
/*
* Abramov Konstantin
* 2016
*/
int pin = 8;
long micro_prev=0; //счетчики времени
long micro_now=0;
long razn;
long impulse; //длительность +
long silence; //длительность 0
const int RED_PIN = 9; //пины ног светодиода
const int GREEN_PIN = 10;
const int BLUE_PIN = 11;
int k;
int r; //значения для яркости диодов которые нужно устарновить
int g;
int b;
int r_current=0; //значения для яркости диодов которые установлены в настоящий момент
int g_current=0;
int b_current=0;
long obr_v_min; // оборотов в минуту
long obr_v_min_prev; // Предыдущее значение оборотов в минуту для проверки на ошибки
int error=0; //счетчик ошибок
String string;
int a=0;
volatile int state = LOW;
int first_loop=1;
void setup()
{
Serial.begin(115200);
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE );
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
}
void loop()
{
if(first_loop==1){ //плавно зажигаем подстветку при первом включении
int i;
for(i=0;i<255;i++){
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, i);
delay(5);
}
b_current=255;
r_current=0;
g_current=0;
delay(500);
first_loop=0;
}
}
void blink()
{
micro_now=micros(); //текущее время от запуска
razn=micro_now-micro_prev; //разница с прошлым значением
a++;
if(digitalRead(2)==LOW){ //если на пине 0, значит пишет разницу в длинну +, если нет, значит мы измерили время когда на пине ничего нет.
impulse=razn;
} else {
silence=razn;
}
if(a==2){ //если мы измерили уже два раза, то может чтонибудь делать с этими данными
Serial.println(String(impulse)+" "+String(silence)); //выводим в СОМ
obr_v_min=30000000/(impulse+silence); //считаем обороты в минуту.
a=0; //скидыаем счетчик
if((impulse>3000) && (silence>3000) && (abs(obr_v_min_prev-obr_v_min)<1000) && first_loop==0){
if(obr_v_min<800){
r=0;
g=150 ;
b=255 ;
k = go_to_color(r,g,b);
Serial.println("blue"+String(obr_v_min));
}
if(obr_v_min>=800 and obr_v_min<1300){
g=0.21*obr_v_min-18;
b=-0.51*obr_v_min+663 ;
r=0;
Serial.println("green_blue"+String(obr_v_min));
k = go_to_color(r,g,b);
}
if(obr_v_min>=1300 and obr_v_min<2500){
g=255;
b=0;
r=0;
Serial.println("green"+String(obr_v_min));
k = go_to_color(r,g,b);
}
if(obr_v_min>=2500 and obr_v_min<3000){
g=255;
b=0;
r=(-637500+255*obr_v_min)/500;
Serial.println("green_yellow"+String(obr_v_min));
k = go_to_color(r,g,b);
}
if(obr_v_min>=3000 and obr_v_min<3500){
g=(862500-245*obr_v_min)/500;
b=0;
r=255;
Serial.println("yellow"+String(obr_v_min));
k = go_to_color(r,g,b);
}
if(obr_v_min>=3500){
g=10;
b=0;
r=255;
Serial.println("red"+String(obr_v_min));
k = go_to_color(r,g,b);
}
error=0;
} else {
//если нет сигнала
if(first_loop==0){
error++;
if(error>=100){ //если больше 100 подряд идущих ошибок, то уходим в статичный цвет. При появлени данных возвращаемся в работу
k = go_to_color(0,255,255);
}
}
}
obr_v_min_prev=obr_v_min;
micro_prev=micro_now;
}
}
int go_to_color(int r, int g, int b){
a=-2;
while(r_current!=r || g_current!=g || b_current!=b) //если текущие значения не совпадают с теми котоыре нужно установить то начинаем работу
{
//Serial.println(String(r_current)+" "+String(b_current)+" "+String(g_current)+"___ "+String(r)+" "+String(b)+" "+String(g));
if(r_current>r){
r_current=r_current-1;
}
if(r_current<r){
r_current=r_current+1;
}
if(g_current>g){
g_current=g_current-1;
}
if(g_current<g){
g_current=g_current+1;
}
if(b_current>b){
b_current=b_current-1;
}
if(b_current<b){
b_current=b_current+1;
}
delay(100);
analogWrite(RED_PIN, r_current);
analogWrite(GREEN_PIN, g_current);
analogWrite(BLUE_PIN, b_current);
}
int result;
return result;
}Заранее извиняюсь перед автором кода, не помню где взял ваш код, ногами прошу не бить