Как можно менять цвет от зеленого к красному, имея на входе только число 0-40?
Почитайте про модель цвета не в RGB а в HSV.
ru.wikipedia.org/wiki/HSV_(%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C)

Если в кратце, то у вас будет 
0 -> H = 120 S = 100 V =100
20 -> H = 60 S = 100 V =100
40 -> H = 0 S = 100 V =100
Спасибо всем, особенно Yavanosta за наводку на HSV — узнал много нового.
Решилось все тем, что нашел две функции, которые конвертили hsv>rgb и rgb>hex соответственно, слил все в одну, и вышло что-то такое: pastebin.com/AGq7yjam
Вышло монстроузно, но работает весьма быстро.