
Code for Arduino Nano
// Arduino Nano with 7 segment LED
//
// 15th October 2018
//
// This version counts up to 9
// Rotary encoder on Pins 2, 3 and GND not used in this sketch
// Solenoid for bell on Pin 8
// Motor on Pin 13
// Start button on Pin 10
//
// http://www.buxtronix.net/2011/10/rotary-encoders-done-properly.html
#include
Rotary rotary = Rotary(2, 3);
int segmentPins[]={6, 7, 9, 11, 12, 5, 4};
int buzzerPin=8;
int buttonPin=10;
int motorPin=13;
int counter = 0;
byte digits[10][8]={
{1, 1, 1, 1, 1, 1, 0, 0},
{0, 1, 1, 0, 0, 0, 0, 0},
{1, 1, 0, 1, 1, 0, 1, 0},
{1, 1, 1, 1, 0, 0, 1, 0},
{0, 1, 1, 0, 0, 1, 1, 0},
{1, 0, 1, 1, 0, 1, 1, 0},
{1, 0, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 0, 1, 1, 0}
};
void setup(){
Serial.begin(57600);
attachInterrupt(0, rotate, CHANGE);
attachInterrupt(1, rotate, CHANGE);
for (int i=0; i<8; i++){
pinMode(segmentPins[i], OUTPUT);
}
pinMode(buzzerPin, OUTPUT);
pinMode(motorPin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(motorPin, LOW);
digitalWrite(buzzerPin, LOW);
updateDisplay(0);
}
void loop()
{
if (digitalRead(buttonPin) == HIGH)
{
static int value;
for (int i=0; i<10; i++) {updateDisplay(i);delay(1000);}
motor(1000);
digitalWrite(motorPin, LOW);
delay(10000);
bell(100);
updateDisplay(0);
}
}
void bell (int ding){
digitalWrite(buzzerPin, HIGH);
delay(ding);
digitalWrite(buzzerPin, LOW);
}
void rotate(){
unsigned char result = rotary.process();
if (result == DIR_CW) {
counter++;
if (counter > 9)
{counter = 9;
}
Serial.println(counter);
} else if (result == DIR_CCW) {
counter–;
if (counter < 0)
{counter = 0;
}
Serial.println(counter);
}
}
void motor(int duration){
digitalWrite(motorPin, HIGH);
delay(duration);
digitalWrite(motorPin, LOW);
delay(10);
}
void updateDisplay(int value){
setSegments(value);delay(5);
}
void setSegments(int n){
for (int i=0; i<8; i++) {digitalWrite(segmentPins[i], ! digits[n][i]);}
}