Wednesday, June 7, 2017

PWM Motor Drive






CODE FOR PWM DRIVE

int motor = 9;
int speed = 0;

void setup() {
  pinMode(motor, OUTPUT);
}

void loop() {
  analogWrite(motor, speed);

  speed = speed + 31;
 
  if (speed > 250)
  {
    speed = 255;
  }

  delay(4000);
 
  if (speed > 250)
  {
    speed = 0;
  }

}

Monday, June 5, 2017

Seven Segment Display Numbers






Code for driving segment display. To drive a common cathode the NOT operator ! must be removed from the front of the array in the highlighted part of the code.

// make an array to save Sev Seg pin configuration of numbers

int num_array[10][7] = {  { 1,1,1,1,1,1,0 },    // 0
                          { 0,1,1,0,0,0,0 },    // 1
                          { 1,1,0,1,1,0,1 },    // 2
                          { 1,1,1,1,0,0,1 },    // 3
                          { 0,1,1,0,0,1,1 },    // 4
                          { 1,0,1,1,0,1,1 },    // 5
                          { 1,0,1,1,1,1,1 },    // 6
                          { 1,1,1,0,0,0,0 },    // 7
                          { 1,1,1,1,1,1,1 },    // 8
                          { 1,1,1,0,0,1,1 }};   // 9
                                      
//function header
void Num_Write(int);

void setup()
{
  // set pin modes
  pinMode(6, OUTPUT);  
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 
 }

void loop()
{

  for (int counter = 10; counter > 0; --counter)
  {
   delay(1000);
   Num_Write(counter-1);
  }
  delay(5000);
}

// this functions writes values to the sev seg pins 
void Num_Write(int number)
{
  int pin= 6;
  for (int j=0; j < 7; j++) {
   digitalWrite(pin, !num_array[number][j]); //Inverted array value due to Common Anode display
   pin++;
  }

}

Common Anode Seven-Segment Display Test







// 7 Segment test

void setup()
{
  // define pin modes
 
 pinMode(6,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 pinMode(10,OUTPUT);
 pinMode(11,OUTPUT);
 pinMode(12,OUTPUT);

}

void loop()
{
 
  for(int i=6;i<13;i++) //Clear LEDs since the outputs start LOW (LED ON)
  {
    digitalWrite(i,HIGH);
    delay(1);
  }
  // loop to turn leds segments ON by sinking them (taking pins to GND)
 
  for(int i=6;i<13;i++)
  {
    digitalWrite(i,LOW);
    delay(600);
  }
 
  // loop to turn leds segnemts OFF by taking the pins to V+
  for(int i=6;i<13;i++)
  {
    digitalWrite(i,HIGH);
    delay(600);
  }
 
 
  delay(1000);

}