Cotxe Mblock MRanger
Completion requirements
Connexions
- Ultrasons tri : 10
- IR: 9
Funcions

Programa

Link projecte mblock
Llibreria Arduino:
Per poder utilitzar les llibreries del MRanger a la IDE oficial d'Arduino cal importar les llibreries de MBlock d'aquest repositori: https://github.com/Makeblock-official/Makeblock-Libraries seguint aquestes isntruccions:
-
Descarregar el programari des de https://codeload.github.com/Makeblock-official/Makeblock-Libraries/zip/master
-
A l'Arduino IDE: "Sketch-> Include Library-> Add .ZIP Library-> select the downloaded file-> Open"
Arduino code:
/ generated by mBlock5 for mBot Ranger
// codes make you happy
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MeAuriga.h>
MeLineFollower linefollower_9(9);
MeEncoderOnBoard Encoder_1(SLOT1);
MeEncoderOnBoard Encoder_2(SLOT2);
MeUltrasonicSensor ultrasonic_10(10);
MeLightSensor lightsensor_12(12);
float infraroig_esquerra = 0;
float infraroig_dret = 0;
float distancia = 0;
float infraroig = 0;
void llegir_infraroig_dret(){
if((linefollower_9.readSensors() == 0.000000) || (linefollower_9.readSensors() == 2.000000)){
infraroig_dret = 0;
}
if((linefollower_9.readSensors() == 1.000000) || (linefollower_9.readSensors() == 3.000000)){
infraroig_dret = 1;
}
}
void isr_process_encoder1(void)
{
if(digitalRead(Encoder_1.getPortB()) == 0){
Encoder_1.pulsePosMinus();
}else{
Encoder_1.pulsePosPlus();
}
}
void isr_process_encoder2(void)
{
if(digitalRead(Encoder_2.getPortB()) == 0){
Encoder_2.pulsePosMinus();
}else{
Encoder_2.pulsePosPlus();
}
}
void parat(){
Encoder_1.setTarPWM(0);
Encoder_2.setTarPWM(0);
_delay(0.5);
}
void move(int direction, int speed)
{
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1){
leftSpeed = -speed;
rightSpeed = speed;
}else if(direction == 2){
leftSpeed = speed;
rightSpeed = -speed;
}else if(direction == 3){
leftSpeed = -speed;
rightSpeed = -speed;
}else if(direction == 4){
leftSpeed = speed;
rightSpeed = speed;
}
Encoder_1.setTarPWM(leftSpeed);
Encoder_2.setTarPWM(rightSpeed);
}
void endavant(){
move(1, 50 / 100.0 * 255);
}
void marxa_enrrera(){
move(2, 50 / 100.0 * 255);
}
void llegir_infraroig_esquerra(){
if((linefollower_9.readSensors() == 0.000000) || (linefollower_9.readSensors() == 1.000000)){
infraroig_esquerra = 0;
}
if((linefollower_9.readSensors() == 2.000000) || (linefollower_9.readSensors() == 3.000000)){
infraroig_esquerra = 1;
}
}
void gira_dreta(){
move(4, 50 / 100.0 * 255);
}
void gira_esquerra(){
move(3, 50 / 100.0 * 255);
}
void llegir_ultrasons(){
distancia = ultrasonic_10.distanceCm();
}
void _delay(float seconds) {
if(seconds < 0.0){
seconds = 0.0;
}
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
TCCR1A = _BV(WGM10);
TCCR1B = _BV(CS11) | _BV(WGM12);
TCCR2A = _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS21);
attachInterrupt(Encoder_1.getIntNum(), isr_process_encoder1, RISING);
attachInterrupt(Encoder_2.getIntNum(), isr_process_encoder2, RISING);
randomSeed((unsigned long)(lightsensor_12.read() * 123456));
while(1) {
parat();
_delay(1);
endavant();
_delay(1);
gira_dreta();
_delay(1);
gira_esquerra();
_delay(1);
marxa_enrrera();
_loop();
}
}
void _loop() {
Encoder_1.loop();
Encoder_2.loop();
}
void loop() {
_loop();
}
Last modified: Friday, 11 March 2022, 1:30 AM