Решил задаться целью и сделать так, чтобы от оборотов и скорости соответствующие стрелки приборной панели, меняли цвет. Но вот незадача, код нужный был найден, но он написан для 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 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; //скидыаем счетчик
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));
В планах для каждой стрелки сделать тоже самое только на attiny13a, но вот как подогнать код для нее. Не хватает у меня знаний пока что для адаптации кода.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
При цене 2,5$ за разведенную плату с цепями тактирования, стабилизатором и мостом USB-com для отладки и заливки кода - весьма бюджетное решение. Да и скетч достаточно большой, в тини 13 не влезет. Получается, при стоимости тини 13 в 0,5$ Вы всю эту тему создали ради 2 $ ?
Serial.println(String(impulse)+" "+String(silence)); //выводим в СОМ
сконвертировать в ассемблер: https://www.youtube.com/watch?v=3ZgXSqfEZiw найти согласного шамана и подшаманить получившееся под тини13 скорее всего действительно шаману проще с нуля
Поставить аттини45/85 и светик серии ws2812. Тинька 85я вроде в какой-то миниатюрной ардуинке применяется...
13 тинька тоже умеет ws2812 светиками управлять, в интернете полно схем и прошивок.
Добавлено after 4 minutes 18 seconds: Всем спасибо за советы, буду использовать туже nano в связке с ws2812, только подсветка приборки будет плавно разжигаться, а стрелки менять цвет от оборотов и скорости. Позже выложу скетч, если не вылетит из усатой головы P.S. Большущий спасибмяу!
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения