How do i make a case where the RPM (defined as S1 and S2 for the 2 motors) of the motors increases by 10 like in the code
Please edit your post to remove the image, and post the code as text, using code tags.
Always post all the code.
calm
int M1_FW = 7;
int M1_BW = 6;
int M2_FW = 5;
int M2_BW = 4;
int buzz = 2;
int echo = 12;
int trig = 11;
char data = 'x';
boolean c = Serial.available();
void setup() {
pinMode(M1_FW, OUTPUT);
pinMode(M1_BW, OUTPUT);
pinMode(M2_FW, OUTPUT);
pinMode(M2_BW, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzz, OUTPUT);
Serial.begin(9600);
c = 0;
}
void loop() {
long duration, distance;
digitalWrite(trig, HIGH);
delayMicroseconds(1000);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2)/29.1;
boolean state1 = (distance <= 6);
boolean state2 = (distance > 6);
boolean s = (distance <= 6);
if (s==true) {
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
}
else
{
if(c > 0){
if( s == true)
data = 's';
switch(data) {
case 'a' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'b' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);break;
}
case 'c' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'd' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0;break;
}
case 'e' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, HIGH);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, HIGH);break;
}
case 's' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0; break;
}
default: break;
}
}
}
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
c = 1;
data = Serial.read();// Reads the data from the serial port
char old_data = data;
if( s == true)
data = 's';
else
data = old_data;
switch(data) {
case 'a' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'b' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);break;
}
case 'c' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'd' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0;break;
}
case 'e' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, HIGH);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, HIGH);break;
}
case 's' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0; break;
}
default: break;
}
}
}
Thanks, now add the code tags.
Instructions are given in the "How to get the best out of this forum" post.
Why three times?
Please remember to use code tags when posting code.
How many characters do you expect to be available before you've initialise the serial interface?
'
int M1_FW = 7;
int M1_BW = 6;
int M2_FW = 5;
int M2_BW = 4;
int buzz = 2;
int echo = 12;
int trig = 11;
char data = 'x';
boolean c = Serial.available();
void setup() {
pinMode(M1_FW, OUTPUT);
pinMode(M1_BW, OUTPUT);
pinMode(M2_FW, OUTPUT);
pinMode(M2_BW, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(buzz, OUTPUT);
Serial.begin(9600);
c = 0;
}
void loop() {
long duration, distance;
digitalWrite(trig, HIGH);
delayMicroseconds(1000);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2)/29.1;
boolean state1 = (distance <= 6);
boolean state2 = (distance > 6);
boolean s = (distance <= 6);
if (s==true) {
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
}
else
{
if(c > 0){
if( s == true)
data = 's';
switch(data) {
case 'a' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'b' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);break;
}
case 'c' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'd' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0;break;
}
case 'e' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, HIGH);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, HIGH);break;
}
case 's' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0; break;
}
default: break;
}
}
}
'
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
c = 1;
data = Serial.read();// Reads the data from the serial port
char old_data = data;
if( s == true)
data = 's';
else
data = old_data;
switch(data) {
case 'a' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'b' :{
digitalWrite(M1_FW, HIGH);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);break;
}
case 'c' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, HIGH);
digitalWrite(M2_BW, LOW);break;
}
case 'd' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0;break;
}
case 'e' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, HIGH);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, HIGH);break;
}
case 's' :{
digitalWrite(M1_FW, LOW);
digitalWrite(M1_BW, LOW);
digitalWrite(M2_FW, LOW);
digitalWrite(M2_BW, LOW);
c = 0; break;
}
default: break;
}
}
}
Not sure if this works
It looks like the same code, still missing code tags.
not too sure what that means, am new to this.
how do i set the current RPM as a variable and add 10 onto it given a certain input.
Motor RPM depends on the applied voltage and the load on the motor shaft, so it can't be arbitrarily set to a particular value by analogWrite(). Also, the motor response to analogWrite() is not linear, which means doubling the analogWrite value does not double the RPMs.
In order to control RPM accurately, you need to measure it. Most people use shaft encoders to measure it and a feedback loop to set it.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
