RISC-V指令架构现在非常热,大有未来全球标准指令集之势。Hifive1是Sifive公司推出第一个商用RISC-V开发板,里面预装了一个三色发光二极管的颜色渐变的演示程序,但没有提供源代码,所以本人就仿照Hifive1开发板的演示效果,使用Arduino IDE写了这样一个模仿原效果的演示程序,如下供参考:
const int Interval = 50; //ms {1+}
const int MaxColorValue = 80; //{1..255}
const int PinCount = 3;
const int PinGreen = 3, PinBlue = 5, PinRed = 6;
const int ColorPin[PinCount] = {PinRed, PinGreen, PinBlue};
int CurPinNo = 0; //{0..2};
int ColorValue[PinCount] = {0, 0, 0};
int LastPinNo;
boolean Checked = false;
void setup() {
for (int i=0; i<PinCount; i++) {pinMode(ColorPin[i], OUTPUT);}
ColorValue[CurPinNo] = MaxColorValue;
LastPinNo = CurPinNo - 1;
if (LastPinNo < 0) {LastPinNo += PinCount;}
Serial.begin(115200);
for (int i=1; i<=4; i++) {
if (Serial) {break;}
delay(5);
}
Serial.println("");
Serial.println(" SIFIVE, INC.");
Serial.println("");
Serial.println(" 5555555555555555555555555");
Serial.println(" 5555 5555");
Serial.println(" 5555 5555");
Serial.println(" 5555 5555");
Serial.println(" 5555 5555555555555555555555");
Serial.println(" 5555 555555555555555555555555");
Serial.println(" 5555 5555");
Serial.println(" 5555 5555");
Serial.println(" 5555 5555");
Serial.println("5555555555555555555555555555 55555");
Serial.println(" 55555 555555555 55555");
Serial.println(" 55555 55555 55555");
Serial.println(" 55555 5 55555");
Serial.println(" 55555 55555");
Serial.println(" 55555 55555");
Serial.println(" 55555 55555");
Serial.println(" 55555 55555");
Serial.println(" 55555 55555");
Serial.println(" 555555555");
Serial.println(" 55555");
Serial.println(" 5");
Serial.println("");
Serial.println(" 'led_fade' Demo");
Serial.println("");
Serial.println("55555555555555555555555555555555555555555555555");
Serial.println("5555555 Are the LEDs Changing? [y/n] 555555555");
Serial.println("55555555555555555555555555555555555555555555555");
}
void loop() {
for (int i=0; i<PinCount; i++) {
analogWrite(ColorPin[i], 255 - ColorValue[i]);
} //0=Brightest, 255=Darkest;
if (ColorValue[CurPinNo]== MaxColorValue) {
if (++CurPinNo >= PinCount) {CurPinNo = 0;}
if (++LastPinNo >= PinCount) {LastPinNo = 0;}
}
--ColorValue[LastPinNo];
++ColorValue[CurPinNo ];
String Input = "";
while (Serial.available() > 0){
Input += (char) Serial.read();
delay(5);
}
if (!Checked) {
Input.toLowerCase();
if (Input == "y") {
Serial.println(Input);
Serial.println("PASS");
Checked = true;
}
if (Input == "n") {
Serial.println(Input);
Serial.println("FAIL");
Checked = true;
}
}
delay(Interval);
}