/* Joginder hobbyprojects 28-07-2020 Vibration_based_LED_POV_Display.ino */ #define Delay 1000 int sensor_pin = 8; int input_state; int val; int LED = 13; unsigned long n = 0; void setup() { DDRD = 0xFF; pinMode(sensor_pin, INPUT_PULLUP); pinMode(LED,OUTPUT); TIMSK2 = (TIMSK2 & B11111110) | 0x01; TCCR2B = (TCCR2B & B11111000) | 0x02; } void loop() { input_state = digitalRead(sensor_pin); while (input_state == HIGH) { input_state = digitalRead(sensor_pin); } delay2(); //delay2(); //delay2(); // display "ABC" // letter 'A' PORTD = 0x3f; // column data delay1(); // LED pixel width PORTD = 0x00; delay1(); // gap between columns PORTD = 0x44; delay1(); PORTD = 0x00; delay1(); PORTD = 0x44; delay1(); PORTD = 0x00; delay1(); PORTD = 0x44; delay1(); PORTD = 0x00; delay1(); PORTD = 0x3f; delay1(); PORTD = 0x00; delay1(); delay2(); // gap between letters // letter 'B' PORTD = 0x7f; delay1(); PORTD = 0x00; delay1(); PORTD = 0x49; delay1(); PORTD = 0x00; delay1(); PORTD = 0x49; delay1(); PORTD = 0x00; delay1(); PORTD = 0x49; delay1(); PORTD = 0x00; delay1(); PORTD = 0x36; delay1(); PORTD = 0x00; delay1(); delay2(); // letter 'C' PORTD = 0x3e; delay1(); PORTD = 0x00; delay1(); PORTD = 0x41; delay1(); PORTD = 0x00; delay1(); PORTD = 0x41; delay1(); PORTD = 0x00; delay1(); PORTD = 0x41; delay1(); PORTD = 0x00; delay1(); PORTD = 0x22; delay1(); PORTD = 0x00; delay1(); input_state = digitalRead(sensor_pin); while (input_state == LOW) { val = analogRead(A0); if(val < 50) val = 50; input_state = digitalRead(sensor_pin); } } void delay1() { delayMicroseconds(Delay); } void delay2() { delayMicroseconds(Delay*3); } ISR(TIMER2_OVF_vect) { n++; if(n >= val) { n = 0; digitalWrite(LED, !digitalRead(LED)); } }