Videosublimation/HowTo/Arduino

Aus Wikiants

Wechseln zu: Navigation, Suche
/*
* Analog out starts increasing with digital in and decreasing over serial
* This prog is licensed under a Attribution-Noncommercial-Share Alike 2.0 Creative Commons License. 
*
* by patsch
*/

// Pins
int aOUT  = 9;  //   Analog Out,   connected to digital pin 9
int aIN   = 10; //   Analog In,    connected to digital pin 10
int dINup   = 8;  //   Digita In,    connected to digital pin 8
int dINdown = 7;
int dIN1 = 2; // Digital In, starts the analogout
int dIN2 = 3; // Ditital In, stops the analogout

// Program variables
int value = 0;  // 0 = GND / 128 = 2.5 Volt / 255 = 5 V
int speed = 108; // set Analog max. // 108 // 93
int check = 110; // auf keinem fall zu schnell!!!!
int speedvar = 0;
int incr = 0;
int decr = 0;
int decrr = 0;
int digiup = 0;
int digidown = 0;
int digistart = 0;
int digis = 0;
int digistop = 0;
int seriIN = 0;
int serival = 0;
int wait = 300; // 50ms (.05 second) delay; shorten for faster fades / 10
int stri = 0;

void setup()
{
  pinMode(aOUT,    OUTPUT);   // sets the pins as output
  pinMode(aIN,     INPUT);   
  pinMode(dINup,   INPUT); 
  pinMode(dINdown, INPUT);
  pinMode(dIN1, INPUT);
  pinMode(dIN2, INPUT);
  beginSerial(9600);          // begin sending over serial port
  }


// Main program
void loop()
{
  if (value > check)
     {
     analogWrite(aOUT, 0);
     Serial.print('0');
     }   


// ----------------- read serial ---------------- //
  seriIN = serialRead();
    if (seriIN != -1) 
    { 
      serival = seriIN; 
    }
    else 
    { 
      serival = 0 ; // reseting value
    }

  if (serival == 112) // stop | 112 = p | 65= ASCI for A | 66 = B | 27 = esc | 32 = space
     {
     if (decrr == 0)  
         {
         decr = 1;
         incr = 0;
         Serial.print('0');
         }
     }
     
  if (serival == 115)  // s | start
     {
     decr = 0;
     incr = 1;
     Serial.print('1');
     }

  if (serival == 65)  // A
     {
     speed += 1;
     speedvar = 1;
     }
     
  if (serival == 66)  // B
     {
     speed -= 1;
     speedvar = 1;
     }

    if (serival == 122)  // z
     {
     Serial.println(speed);
     }

// --------- read digital start - write serial --------- //
  if (digistart == 0)
    {
    if (decrr == 0)
      {
        digis = digitalRead(dIN2);  // start only, if it isn't decreasing
      }
        if (digis == 1)
           {
             digistart = 1;
           }
    }


    if (digistop == 0)
      {
      if (decrr == 0)
        {
        if (digistart == 1)
          {
          incr = 1;
          decr = 0;
//          Serial.print('1');
//          digistart = 0;
          }
        }
      }


// ------------ read digital stop - write serial ----------- //
  
    delay(50); // Pause for 50 milliseconds before resuming the loop

//    digistop = digitalRead(dIN1);
//    if (digistop == 1)
//      {
//     if (decrr == 0)
//        {
//        decr = 1;
//        incr = 0;
//        Serial.print('0');
//        Serial.print('r', BYTE);
//        }
//      }
    digistop = digitalRead(dIN1);        // din2 als start und stop funkt auch!!! : )
    if (digistop == 1)
      {
     if (decrr == 0)
        {
        decr = 1;
        incr = 0;
//        Serial.print('0');
        Serial.print('l', BYTE);
        }
      }                

// ------------------------------------------------------------ //

if (incr == 1)
{
   if (value < speed)  // check if the max. analog out is arrived
      {
        if (value == 0)
           {
           value = 60;
           }
         else
           {
           delay(wait);
           }
      value += 1;      // Increment counter
      decrr = 0;       // make active for stop
      Serial.print('1');
      }
    else 
     {
     digistart = 0;
     incr = 0;
     decrr = 0;
//     while (x == 0)
//       {

//       x = Serial.read();
//       }
//      x = 0;
//      Serial.print('mplayerstart');
     }

//   Serial.print(value, HEX); //  Serial.print("\t"); //  serialWrite(value);
   }

if (decr == 1)
   {     
   if (value > 0)  // check if the lowest possibility is arrived
      {
      value -= 1;  // Decrement counter
      decrr = 1;
      delay(200);
      Serial.print('0');
      }                        
   if (value == 60)
      {
      value = 0;
      digistart = 0;
      decr = 0;
      decrr = 0;
      incr = 0;
      Serial.print('0');
      }  
   }

if (speedvar == 1)
   {
      if (value < speed)  // check if the max. analog out is arrived
         {
         value += 1;      // Increment counter
         }
      else
         {
         value -= 1;
         }
      speedvar = 0;
//    Serial.print(value, HEX); //  Serial.print("\t"); //  serialWrite(value);
   }
//  Serial.println(ssend);
//  Serial.print("\t");
  analogWrite(aOUT, value);
}
Persönliche Werkzeuge