找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 10798|回复: 18

单光电巡线程序

[复制链接]
发表于 2015-12-12 22:56:33 | 显示全部楼层 |阅读模式
过直角弯已经没有问题,目前就是速度还不行,有空改进算法,争取高速过弯
程序代码见下:

package ev3;
import lejos.hardware.Button;
import lejos.hardware.Key;
import lejos.hardware.KeyListener;
import lejos.hardware.Sound;
import lejos.hardware.lcd.LCD;
import lejos.hardware.motor.Motor;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.*;

public class LineFollower {
        static int status = 0;
        static int Power = 100;
        static float Gain = 5;
        static EV3ColorSensor cs = new EV3ColorSensor(SensorPort.S1);
        static float Light = 0;
        static float LineMin = 1;
        static float LineMax = 0;
        static float LineMid = 0;

        public static void main(String[] args) {
                Thread T = new Thread(new Runnable() {
                        @Override
                        public void run() {
                                while (true) {
                                        // 光线强度
                                        SensorMode mode=cs.getRedMode();
                                        float[] samples=new float[mode.sampleSize()];
                                        mode.fetchSample(samples, 0);
                                        for(float v:samples)
                                                Light=v;
                                        // 初始化最大值和最小值
                                        if (status == 1) {
                                                if (LineMax < Light) {
                                                        LineMax = Light;
                                                } else if (LineMin > Light) {
                                                                LineMin = Light;
                                                }
                                                LineMid = (float) (LineMax + LineMin) / 2;
                                        }
                                        LCD.drawString("Light="+Light, 0, 0);
                                        LCD.drawString("LineMid="+LineMid,0, 1);
                                        LCD.drawString("LineMin="+LineMin, 0, 2);
                                        LCD.drawString("LineMax="+LineMax, 0, 3);
                                }
                        }
                });


                Button.ESCAPE.addKeyListener(new KeyListener() {
                        @Override
                        public void keyPressed(Key k) {
                                // TODO 自动生成的方法存根
                                
                        }

                        @Override
                        public void keyReleased(Key k) {
                                // TODO 自动生成的方法存根
                                System.exit(0);
                        }
                });
               
                // 启动监控线程
                t1.start();

                // 显示欢迎信息
                LCD.clear();
                LCD.drawString("LineFollower", 0, 0);
                LCD.drawString("WellCome", 0, 1);
        Button.waitForAnyPress();

                cs.setFloodlight(true);
                status = 1;
                Motor.B.setSpeed(120);// 左轮
                Motor.C.setSpeed(120);// 右轮
                Motor.B.rotateTo(720, true);
                Motor.C.rotateTo(-720);
                Motor.B.stop();
                Motor.C.stop();

                status = 2;

                Motor.B.backward();
                Motor.C.forward();
                while ((Light-LineMid)/LineMid>0.1) {
                }
                Motor.B.stop(true);
                Motor.C.stop();
                Sound.beepSequenceUp();
                Motor.B.setSpeed(1);
                Motor.C.setSpeed(1);
                Motor.B.forward();
                Motor.C.forward();
                float Range = LineMax - LineMin;
                while (true) {
                        LCD.drawString("PowerGain="+10*((Light - LineMid) * Gain) / Range, 0,5);
                        float PowerGain = 30*((Light - LineMid) * Gain) / Range;
                        Motor.B.setSpeed(Power - PowerGain);
                        Motor.C.setSpeed(Power + PowerGain);
                }
        }
}


如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2015-12-12 23:12:49 | 显示全部楼层
支持起来~
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-12 23:14:45 | 显示全部楼层
welcome?单词写错?

不是很明白楼主这个程序的原理,为什么要一直打擂台?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-12 23:39:04 | 显示全部楼层
///
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-12 23:47:54 | 显示全部楼层
看看
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 00:06:22 | 显示全部楼层
学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 05:38:09 | 显示全部楼层
欣赏、学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 08:36:15 | 显示全部楼层
看看谢谢分享
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 08:37:26 | 显示全部楼层
不知道什么意思了。。。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 09:03:45 | 显示全部楼层
进来学习一下
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 10:09:41 | 显示全部楼层
谢谢分享
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 10:51:34 来自手机 | 显示全部楼层
看看
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 11:16:05 | 显示全部楼层
学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 11:24:08 | 显示全部楼层
看看大神的思路
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2015-12-13 11:37:19 | 显示全部楼层
学习下
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-4-24 14:55 , Processed in 0.093866 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表