mukhang ok naman, anong response nya nung tinest mo?yun bang line mo eh malapad?yung kaya nyang matakpan ang lahat ng sensors?kasi iba din approach kung manipis yung lines, yung most of the time eh gitnang line lang ang natatakpan?
kapag manipis imaginine nyo ano response?1.kapag gitnang line lang ang triggered, diretso lang ang takbo,2. kapag nasa kanan ang linya,titigil ang kanang motor(or turn right)3. kapag nasa kaliwa ang linya, titigil ang kaliwang motor(or turn right)in short ang sinesense ng unang scheme eh kung pumapasok sa linya ang left or right sensor, ang pangalawang scheme eh dinedetect naman kung lumabas sa linya ang left at right sensors,see the difference?
#define KUL_LINESENSOR_DEBOUNCE_MS 10unsigned long ulLineSensorDebounce;boolean blLineDetected;
sir.. wala na bang mas mahina sa LOWSPEED sa pbot library?.. masyadong mabilis ang takbo, na overline xa.. medyu nkasense na xa ng black line.. sa code ko cguro ito,Code: [Select]#define KUL_LINESENSOR_DEBOUNCE_MS 10unsigned long ulLineSensorDebounce;boolean blLineDetected;para san nga ba tong code nyu sa sumobot?..
pwede mo iset manually yung speed between 0 to 255 instead of using constants e.g. moveForward(100)yung 10ms is validation delay ng mga line sensors para masiguradong consistent ang input after 10mS, this is to eliminate false triggering due to noise. kung ako tatanungin medyo mild pa yang measure ko na yan, kung talagang noisy ang system dapat magprovide din ang programmer ng sariling routine.
ambilis pala naman eh, hehehemeron ng validation delay yan, kung gusto mo imodify pwede mo taasan pa value ng delay#define KUL_LINESENSOR_DEBOUNCE_MS 10
#include <PBot.h>PBotClass LineKeepDistance;void setup(){ LineKeepDistance.begin(LINETRACKING,WHITE,BLACK); }void loop(){ int LineState; LineState = LineKeepDistance.detectLine(); if(LINE_LEFT==LineState) { LineKeepDistance.turnLeft(100); } else if (LINE_LEFTCENTER==LineState) { LineKeepDistance.turnLeft(100); } else if (LINE_CENTER==LineState) { LineKeepDistance.moveForward(100); } else if(LINE_RIGHT==LineState) { LineKeepDistance.turnRight(100); } else if (LINE_RIGHTCENTER==LineState) { LineKeepDistance.turnRight(100); } else if(NO_LINE==LineState) { LineKeepDistance.stopMotors(); } }
#include <PBot.h>PBotClass LineKeepDistance;void setup(){ LineKeepDistance.begin(LINETRACKING,WHITE,BLACK); }void loop(){ int LineState; int ObjectState; LineState = LineKeepDistance.detectLine(); ObjectState = LineKeepDistance.detectObstacle(); if(LINE_LEFT == LineState) { LineKeepDistance.runRightMotor(100,FORWARD); LineKeepDistance.runLeftMotor (100,REVERSE);//turn right } else if(LINE_LEFTCENTER == LineState) { LineKeepDistance.runLeftMotor(75,REVERSE); LineKeepDistance.runRightMotor (150,FORWARD);//turn right } else if(LINE_RIGHT == LineState) { LineKeepDistance.runLeftMotor(100,FORWARD); LineKeepDistance.runRightMotor(100,REVERSE);//turn left } else if(LINE_RIGHTCENTER == LineState) { LineKeepDistance.runRightMotor(75, REVERSE); LineKeepDistance.runLeftMotor(150,FORWARD);//turn left } else if(LINE_CENTER == LineState || OVER_LINE == LineState) { LineKeepDistance.moveForward(75); } else if (NO_LINE == LineState) { LineKeepDistance.stopMotors(); } if (ObjectState != NO_OBSTACLE) { LineKeepDistance.stopMotors(); } }
const int Col_Sen[3] = {2,3,4};const int Lin_Sen[4] = {5,6,7};const int M1Dir = 8;const int M1Run = 9;const int M2Run = 10;const int M2Dir = 11;void setup(){ for(int i=0;i<3;i++) { pinMode(Col_Sen[i],INPUT); pinMode(Lin_Sen[i],INPUT); } pinMode(M1Run,OUTPUT); pinMode(M2Run,OUTPUT); pinMode(M1Dir,OUTPUT); pinMode(M2Dir,OUTPUT); digitalWrite(M1Run,HIGH); digitalWrite(M1Dir,HIGH);}void loop(){ if (digitalRead(Lin_Sen[0] == HIGH && Lin_Sen[1] == HIGH && Lin_Sen[2] == HIGH))//all sensors { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == LOW && Lin_Sen[1] == HIGH && Lin_Sen[2] == LOW))//center snesor { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == HIGH && Lin_Sen[1] == HIGH && Lin_Sen[2] == LOW))//left center snesor { analogWrite(M1Run,75); analogWrite(M2Run,150); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,LOW); } else if (digitalRead(Lin_Sen[0] == LOW && Lin_Sen[1] == HIGH && Lin_Sen[2] == HIGH))//right center snesor { analogWrite(M1Run,150); analogWrite(M2Run,75); digitalWrite(M1Dir,LOW); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == HIGH && Lin_Sen[1] == LOW && Lin_Sen[2] == LOW))//left snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,LOW); } else if (digitalRead(Lin_Sen[0] == LOW && Lin_Sen[1] == LOW && Lin_Sen[2] == HIGH))//right center snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,LOW); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == LOW && Lin_Sen[1] == LOW && Lin_Sen[2] == LOW))//no snesor { analogWrite(M1Run,0); analogWrite(M2Run,0); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); }}
if(digitalRead(Lin_Sen[0]) == HIGH && digitalRead(Lin_Sen[1]) == HIGH && digitalRead(Lin_Sen[2]) == HIGH)
const int Lin_Sen[4] = {5,6,7};
actually dapat siguro ganito yan...Code: [Select]if(digitalRead(Lin_Sen[0]) == HIGH && digitalRead(Lin_Sen[1]) == HIGH && digitalRead(Lin_Sen[2]) == HIGH)Ang nangyari kasi eh...Lin_Sen[0] == HIGH // false Lin_Sen[1] == HIGH // falseLin_Sen[2] == HIGH // falsefalse && false && false = false = 0digitalRead(0) ang kakalabsan ng expression.bakit 4 ang size ng array na to?Code: [Select]const int Lin_Sen[4] = {5,6,7};
isa pa, nacheck mo ba kung active high ang sensors kapag may line?
const int Col_Sen[3] = {2,3,4};const int Lin_Sen[3] = {5,6,7};const int M1Dir = 8;const int M1Run = 9;const int M2Run = 10;const int M2Dir = 11;void setup(){ for(int i=0;i<3;i++) { pinMode(Col_Sen[i],INPUT); pinMode(Lin_Sen[i],INPUT); } pinMode(M1Run,OUTPUT); pinMode(M2Run,OUTPUT); pinMode(M1Dir,OUTPUT); pinMode(M2Dir,OUTPUT); digitalWrite(M1Run,HIGH); digitalWrite(M1Dir,HIGH); digitalWrite(M2Run,HIGH); digitalWrite(M2Dir,HIGH);}void loop(){ if (digitalRead(Lin_Sen[0] == HIGH) && digitalRead (Lin_Sen[1] == HIGH) && digitalRead(Lin_Sen[2] == HIGH))//all sensors { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == LOW) && digitalRead(Lin_Sen[1] == HIGH) && digitalRead(Lin_Sen[2] == LOW))//center snesor { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == HIGH) && digitalRead(Lin_Sen[1] == HIGH) && digitalRead(Lin_Sen[2] == LOW))//left center snesor { analogWrite(M1Run,75); analogWrite(M2Run,150); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,LOW); } else if (digitalRead(Lin_Sen[0] == LOW) && digitalRead(Lin_Sen[1] == HIGH) && digitalRead(Lin_Sen[2] == HIGH))//right center snesor { analogWrite(M1Run,150); analogWrite(M2Run,75); digitalWrite(M1Dir,LOW); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == HIGH) && digitalRead(Lin_Sen[1] == LOW) && digitalRead(Lin_Sen[2] == LOW))//left snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,LOW); } else if (digitalRead(Lin_Sen[0] == LOW) && digitalRead(Lin_Sen[1] == LOW) && digitalRead(Lin_Sen[2] == HIGH))//right center snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,LOW); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0] == LOW) && digitalRead(Lin_Sen[1] == LOW) && digitalRead(Lin_Sen[2] == LOW))//no snesor { analogWrite(M1Run,0); analogWrite(M2Run,0); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); }}
digitalRead(Lin_Sen[0] == HIGH)
digitalRead(Lin_Sen[0]) == HIGH
(HIGH == digitalRead(Lin_Sen[0]))
(HIGH = digitalRead(Lin_Sen[0]))
at TS suggestion lang. baka mas madali pag gumawa ka na lang ng functions.
#include <PBot.h>PBotClass LineFollower;void setup(){ LineFollower.begin(LINETRACKING,WHITE,BLACK); }void loop(){ int LineState; int ObjectState; LineState = LineFollower.detectLine(); ObjectState = LineFollower.detectObstacle(); if(LINE_LEFT == LineState) { LineFollower.rotateLeft(100); } else if(LINE_LEFTCENTER == LineState) { LineFollower.rotateLeft(75); } else if(LINE_RIGHT == LineState) { LineFollower.rotateRight(100); } else if(LINE_RIGHTCENTER == LineState) { LineFollower.rotateRight(75); } else if((LINE_CENTER == LineState) || (OVER_LINE == LineState)) { LineFollower.moveForward(75); } else if (NO_LINE == LineState) { LineFollower.stopMotors(); } else { /* no response */ } if(ObjectState != NO_OBSTACLE) { LineFollower.stopMotors(); }}
ako po si TS, nyahahaha,