// Throttle manager with Parola display,4 distinct patterns, 3 Hall Sensors and 3 LEDs #define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW #define MAX_DEVICES 4 #define CLK_PIN 13 #define DATA_PIN 11 #define CS_PIN 10 #define SEGs 4 #define rnd random MD_MAX72XX p=MD_MAX72XX(MD_MAX72XX::PAROLA_HW,CS_PIN,SEGs); byte Cols[]={8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24}; byte star[]={24,36,0,36,0,66,8,66,0,8,129,0,8,129,0,137,24,36,0,36,0,66,8,66,0,8,129,0,8,129,0,137}; byte allc[]={24,25,26,27,28,29,30,31,16,17,18,19,20,21,22,23,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7}; byte dots[]={1,2,4,8,16,32,64,128}; int i,j,x=5,speed=0; void setup() {p.begin();p.control(MD_MAX72XX::INTENSITY,1); p.clear();delay(1000); pinMode(2,INPUT_PULLUP);pinMode(3,INPUT_PULLUP);pinMode(4,INPUT_PULLUP); // 3 Hall Sensors pinMode(5,OUTPUT);pinMode(6,OUTPUT);pinMode(7,OUTPUT); // 3 LEDs, one for each Hall Sensor for (j=1;j<7;j++){bars();p.clear();}} void loop() { for (j=2;j<5;j++){digitalWrite(j+3,LOW);if(digitalRead(j)==0){speed=j;}} digitalWrite(speed+3,HIGH); switch (speed) { case 4: warp(); break; case 3: stars(); break; case 2: scan(); break; default: break;}} void warp() {for(i=0;i<16;i++){p.clear();p.setColumn(Cols[i],star[i]); p.setColumn(Cols[i+16],star[i+16]); p.update();delay(15);}} void stars() {p.setColumn(rnd(32),dots[rnd(9)]); p.setPoint(rnd(9),rnd(32),rnd(100) > 90);p.update();delay(50);} void scan() {for (i=0;i<32;i++) {p.clear();p.setColumn(allc[i],255); p.update();if(digitalRead(2)){p.clear();return;}else{delay(50);}} for (i=31;i>-1;i--){p.clear();p.setColumn(allc[i],255); p.update();if(digitalRead(2)){p.clear();return;}else{delay(50);}}} void bars() {digitalWrite(x,HIGH); for (i=0;i<16;i++) {p.clear();p.setColumn(Cols[i],255); p.setColumn(Cols[i+16],255);p.update();delay(30);} digitalWrite(x,LOW); x++; if (x==8){x=5;} digitalWrite(x,HIGH); for (i=15;i>-1;i--){p.clear();p.setColumn(Cols[i],255); p.setColumn(Cols[i+16],255);p.update();delay(30);} digitalWrite(x,LOW); x++; if (x==8){x=5;} }