Go Down

Topic: metro liberay + Serial.read + 7 motors (Read 453 times) previous topic - next topic

I am trying to run multiple 12V motors from my arduino through the serialport - and would, as a start, like to be able to turn them on individually.
i have no problem with writing messages to the arduino through the serialport ( using max/msp), but Im having trouble with the metro.
hereĀ“s my code: (from the example on the website)

#include <Metro.h>
/*
instead of blinking an led I wil use it to turn RELAYS off and ON to control the motors speed
*/

// Instanciate a metro object and set the interval to 250 milliseconds (0.25 seconds).
int val = 0; // reading data from the seral port
Metro ledPin02_metro = Metro(250);
int ledPin02 = 2;                // here i attached my RELAY 01
Metro ledPin03_metro = Metro(250);
int ledPin03 = 3;                // here i attached my RELAY 02
void setup()
{
 pinMode(ledPin02,OUTPUT);
 pinMode(ledPin03,OUTPUT);
 Serial.begin(9600);
}
void loop()
{
 val = Serial.read();
if(val == '1'){ // if the number 1 is recieved from the serial port
   if (ledPin02_metro.check() == 1) { // check if the metro has passed it's interval .
     digitalWrite(ledPin02,!digitalRead(ledPin02)); // change the state of pin 3.
     if (digitalRead(ledPin02)==HIGH)  {
       ledPin02_metro.interval(250); // if the pin is HIGH, set the interval to 0.25 seconds.
     }
   }
}
if(val == '2'){ // if the number 1 is recieved from the serial port
   
   if (ledPin03_metro.check() == 1) { // check if the metro has passed it's interval .
     digitalWrite(ledPin03,!digitalRead(ledPin03)); // change the state of pin 3.
     if (digitalRead(ledPin03)==HIGH)  {
       ledPin02_metro.interval(250); // if the pin is HIGH, set the interval to 0.25 seconds.
     }
   }
}
 
}

Im running version 0006 on my arduino is that an issue ?

before i tried the metro solution my code looked like this:

int count01 = 0;  
int count02 = 0;              
int ledPin02 = 2;                 // RELAY connected to digital pin 2
int ledPin03 = 3;                 // RELAY connected to digital pin 3

int val = 0;                     // variable to recieve data from the serialport


void setup()
{
 pinMode(ledPin02, OUTPUT);      // sets the digital pin as output
 pinMode(ledPin03,OUTPUT);

 Serial.begin(9600);
}
void loop(){
 val = Serial.read();
 switch (val) {
 case 1:
   for(int count01 = 0; count01 <= 10; count01++){
     digitalWrite(debugFix,HIGH);
     digitalWrite(ledPin02,HIGH);
     delay(20);
   
     digitalWrite(ledPin02,LOW);
     delay(20);
   }
 break;
 case 2:
   for(int count02 = 0; count02 <= 10; count02++){
     digitalWrite(debugFix,HIGH);
     digitalWrite(ledPin03,HIGH);
     delay(100);
   
     digitalWrite(ledPin03,LOW);
     delay(100);
   }
 break;
 default:
   digitalWrite(ledPin02,LOW);
   digitalWrite(ledPin03,LOW);
   

 }
}

but in this exhample i think i get trouble with the delay()

my aim is to control a PWM-like pulse on  7 relays from the serialport -- if there is anyone on the forum that knows how to solve my problem then i would be wery greatfull to hear from you
best regards
martin







Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy