Stellaris Launchpad. 5. Energia - всему голова

Apr 28, 2013 18:12


Похоже, лавры ардуины не дают покоя разработчикам разных МК. Десйтвительно - ардуина, осонованная на микроконтроллере, будем смотреть правде в глаза, отжившем свой век и медленно умирающем, радостно подсчитывает заработанное, да еще и так, что даже разным производителям клонов тоже на хлеб с маслом хватает. А в это время всякие Launcpadы и STM Discovery, рвущие по характеристикам и фаршу ардуину как тузик грелку, остаются уделом отдельных гиков.
Итак, команда энтузиастов сделала форк Arduino IDE для работы с ланчпадами TI. Покак что они поддерживают четыре различных поатформы, среди которых и стеларис.
Пр этом сами парни из техасских инструментов старательно делают вид, что они тут ни при делах, и все произошедшее - исключительно инициатива снизу. При все своей убогости среды, Energia (как впрочем и ардуино иде) поражают простотой использования.
Вот, например, для моргания светодиодом:

void setup() {
pinMode(RED_LED, OUTPUT);
}
void loop() {
digitalWrite(RED_LED, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(RED_LED, LOW); // set the LED off
delay(1000); // wait for a second
}

Сравните это с кучей телодвижений, которыми сопровоздалось моргание в прошлый раз
Под эту систему медленно появляется в народе какое-то количество библиотек, впрочем, с помощью напильника, наверное и ардуиновские можно будет прикрутить.
Естетсвенно, за простоту приходится расплачиваться убогостью функционала, но в качестве платформы для быстрого прототипирования energia годится на ура.
Вот, нипример, код который заставляет внутренний светодиод переливаться разными цветами радуги (ниписан за 5 минут)

#define RED_TIME 9
#define BLUE_TIME 13
#define GREEN_TIME 23
int fadeAmount[3] = {1, 1, 1};
int lastTime[3] = {0, 0, 0};
byte brightness[3] = {0, 0, 0};

void setup ()
{
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
}

void loop()
{
analogWrite(RED_LED, brightness[0]);
analogWrite(GREEN_LED, brightness[1]);
analogWrite(BLUE_LED, brightness[2]);

int time = millis();

if(time - lastTime[0] >= RED_TIME || time < lastTime[0]) //пора переключить красный диод
{
lastTime[0] = time;
brightness[0] += fadeAmount[0];
if(brightness[0] == 0 || brightness[0] == 255)
{
fadeAmount[0] = -fadeAmount[0];
}
}

if(time - lastTime[1] >= GREEN_TIME || time < lastTime[1] ) //пора переключить зеленый диод
{
lastTime[1] = time;
brightness[1] += fadeAmount[1];
if(brightness[1] == 0 || brightness[1] == 255)
{
fadeAmount[1] = -fadeAmount[1];
}
}

if(time - lastTime[2] >= BLUE_TIME || time < lastTime[2] ) //пора переключить синий диод
{
lastTime[2] = time;
brightness[2] += fadeAmount[2];
if(brightness[2] == 0 || brightness[2] == 255)
{
fadeAmount[2] = -fadeAmount[2];
}
}
delay(1);
}

Previous post Next post
Up