mali pa rin kuya eh...Code: [Select]digitalRead(Lin_Sen[0] == HIGH)dapat ganitoCode: [Select]digitalRead(Lin_Sen[0]) == HIGHyung result ang ikocompare sa HIGH na constant...for some programmers it is safer to write it this way para maiwasan ang typo...Code: [Select](HIGH == digitalRead(Lin_Sen[0])) and enclosed palagi sa parenthesis kung ia-AND sa ibang conditions....rationale, example isang = lang ang nailagay moeto ay di magcocompile so mapupuna mo agad ang mali, dun sa isang case kapag isang = lang ang inilagay mo eh maaring issign nya ang HIGH na value sa variable at magcompile ng tama pero mali ang response.
digitalRead(Lin_Sen[0] == HIGH)
digitalRead(Lin_Sen[0]) == HIGH
(HIGH == digitalRead(Lin_Sen[0]))
ako po si TS, nyahahaha,Natry na ni sir nokia s using PBot library, baka nageexplore lang sya kung paano gawin sa low level, kahit ako kapag nagcocode ng madalian eh inilalagay ko muna sa surrogate function then kapag gumagana na eh saka ko inililipat sa sarili nyang function.
anong meaning ng TS?.. hehe
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);}void loop(){ if (digitalRead(Lin_Sen[0]) == LOW && digitalRead (Lin_Sen[1]) == LOW && digitalRead(Lin_Sen[2]) == LOW)//all sensors { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0]) == HIGH && digitalRead(Lin_Sen[1]) == LOW && digitalRead(Lin_Sen[2]) == HIGH)//center snesor { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0]) == LOW && digitalRead(Lin_Sen[1]) == LOW && digitalRead(Lin_Sen[2]) == HIGH)//left center snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,LOW); } else if (digitalRead(Lin_Sen[0]) == HIGH && digitalRead(Lin_Sen[1]) == LOW && digitalRead(Lin_Sen[2]) == LOW)//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]) == HIGH && digitalRead(Lin_Sen[2]) == HIGH)//left snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,LOW); } else if (digitalRead(Lin_Sen[0]) == HIGH && digitalRead(Lin_Sen[1]) == HIGH && digitalRead(Lin_Sen[2]) == LOW)//right center snesor { analogWrite(M1Run,100); analogWrite(M2Run,100); digitalWrite(M1Dir,LOW); digitalWrite(M2Dir,HIGH); } else if (digitalRead(Lin_Sen[0]) == HIGH && digitalRead(Lin_Sen[1]) == HIGH && digitalRead(Lin_Sen[2]) == HIGH)//no snesor { analogWrite(M1Run,0); analogWrite(M2Run,0); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } if (digitalRead(Col_Sen[0]) == LOW || digitalRead(Col_Sen[1]) == LOW || digitalRead(Col_Sen[2]) == LOW || digitalRead(Lin_Sen[0]) == LOW || digitalRead (Lin_Sen[1]) == LOW || digitalRead(Lin_Sen[2]) == LOW) //must correct the conflicts { analogWrite(M1Run,0); analogWrite(M2Run,0); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); } else { } }
eto hinala ko, nagfoforward sya ng saglit bago nagstop then sa next loop ganun na naman...
if (digitalRead(Col_Sen[0]) == LOW || digitalRead(Col_Sen[1]) == LOW || digitalRead(Col_Sen[2]) == LOW || digitalRead(Lin_Sen[0]) == LOW || digitalRead (Lin_Sen[1]) == LOW || digitalRead(Lin_Sen[2]) == LOW) //must correct the conflicts { analogWrite(M1Run,0); analogWrite(M2Run,0); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); }
if (digitalRead(Lin_Sen[0]) == LOW && digitalRead (Lin_Sen[1]) == LOW && digitalRead(Lin_Sen[2]) == LOW)//all line sensors { analogWrite(M1Run,75); analogWrite(M2Run,75); digitalWrite(M1Dir,HIGH); digitalWrite(M2Dir,HIGH); }
#include <PBot.h>PBotClass RoomRover;#define K_FULL_ROTATE_PERIOD 3000 // 3 Seconds#define K_BACKOFF_PERIOD 3000 // 3 Seconds#define K_MAXIDLDE_PERIOD 15000 // No Wall Detected for 15 Seconds, could stucked somewhereunsigned long ulIdlePeriod;void setup(){ RoomRover.begin(SUMO,WHITE,BLACK,0,9600); ulIdlePeriod = millis();}void loop(){ int iWallState; iWallState = RoomRover.detectObstacle(); if(iWallState == NO_OBSTACLE) { if((millis()-ulIdlePeriod) > K_MAXIDLDE_PERIOD) { ulIdlePeriod = millis(); PerformManeuver(); } else { //RoomRover.moveForward(FULLSPEED); RoomRover.turnLeft(20); // my bias kasi sa right ang PBot ko... } } else { ulIdlePeriod = millis(); /* Obstacle on left */ if(iWallState == OBJECT_LEFT) { RoomRover.turnRight(FULLSPEED); } /* Obstacle on right */ else if(iWallState == OBJECT_RIGHT) { RoomRover.turnLeft(FULLSPEED); } /* Obstacle on left-center */ else if(iWallState == OBJECT_LEFTCENTER) { RoomRover.rotateRight(FULLSPEED); } /* Obstacle on right-center */ else if(iWallState == OBJECT_RIGHTCENTER) { RoomRover.rotateLeft(FULLSPEED); } else { PerformManeuver(); } }}#define KBL_TURNLEFT false#define KBL_TURNRIGHT truevoid PerformManeuver(void){ bool blTurnDirection = KBL_TURNLEFT; unsigned long ulMotionTimer; ulMotionTimer = millis(); /* Move Backward for 3Sec */ while((millis()-ulMotionTimer) < K_BACKOFF_PERIOD) { RoomRover.moveBackward(FULLSPEED); } if(random(0, 255) < 128) { blTurnDirection = KBL_TURNLEFT; } else { blTurnDirection = KBL_TURNRIGHT; } ulMotionTimer = millis(); /* Rotate for 5Sec */ while((millis()-ulMotionTimer) < K_FULL_ROTATE_PERIOD) { if(KBL_TURNRIGHT == blTurnDirection) { RoomRover.rotateRight(FULLSPEED); } else { RoomRover.rotateLeft(FULLSPEED); } } ulIdlePeriod = millis();}
hindi magwowork yan, same pa rin ng dati, this time naooff muna bago magon,ilagay mo sya sa itaas as "if", then naka else yung rest...
Napagtripan ko lang...Code: [Select]#include <PBot.h>PBotClass RoomRover;#define K_FULL_ROTATE_PERIOD 3000 // 3 Seconds#define K_BACKOFF_PERIOD 3000 // 3 Seconds#define K_MAXIDLDE_PERIOD 15000 // No Wall Detected for 15 Seconds, could stucked somewhereunsigned long ulIdlePeriod;void setup(){ RoomRover.begin(SUMO,WHITE,BLACK,0,9600); ulIdlePeriod = millis();}void loop(){ int iWallState; iWallState = RoomRover.detectObstacle(); if(iWallState == NO_OBSTACLE) { if((millis()-ulIdlePeriod) > K_MAXIDLDE_PERIOD) { ulIdlePeriod = millis(); PerformManeuver(); } else { //RoomRover.moveForward(FULLSPEED); RoomRover.turnLeft(20); // my bias kasi sa right ang PBot ko... } } else { ulIdlePeriod = millis(); /* Obstacle on left */ if(iWallState == OBJECT_LEFT) { RoomRover.turnRight(FULLSPEED); } /* Obstacle on right */ else if(iWallState == OBJECT_RIGHT) { RoomRover.turnLeft(FULLSPEED); } /* Obstacle on left-center */ else if(iWallState == OBJECT_LEFTCENTER) { RoomRover.rotateRight(FULLSPEED); } /* Obstacle on right-center */ else if(iWallState == OBJECT_RIGHTCENTER) { RoomRover.rotateLeft(FULLSPEED); } else { PerformManeuver(); } }}#define KBL_TURNLEFT false#define KBL_TURNRIGHT truevoid PerformManeuver(void){ bool blTurnDirection = KBL_TURNLEFT; unsigned long ulMotionTimer; ulMotionTimer = millis(); /* Move Backward for 3Sec */ while((millis()-ulMotionTimer) < K_BACKOFF_PERIOD) { RoomRover.moveBackward(FULLSPEED); } if(random(0, 255) < 128) { blTurnDirection = KBL_TURNLEFT; } else { blTurnDirection = KBL_TURNRIGHT; } ulMotionTimer = millis(); /* Rotate for 5Sec */ while((millis()-ulMotionTimer) < K_FULL_ROTATE_PERIOD) { if(KBL_TURNRIGHT == blTurnDirection) { RoomRover.rotateRight(FULLSPEED); } else { RoomRover.rotateLeft(FULLSPEED); } } ulIdlePeriod = millis();}eto namamasyal si PBot sa kwarto ko,hehehe
paano madidifferentiate ng arduino kung wall sensor sa front wall sensor sa baba yung nasense nya?pwede siguro magdagdag ka na lang ng circuit para sa bakanteng input ng arduino.
pwede sigurong i-OR ang signal using diodes...
At first I'm worried about bus contention, pero nung check ko block diagram ng IR detectors, mukhang pwede naman, itest mo rin lang voltage level kapag na on yung isang sensor tapos nakaoff yung isa....