“黑马程序员"交通灯管理系统学习日志

天问block-STC8G1K08A-LED 一、器材 STC8G1K08A LED灯 天问51:天问Block 二、接线 STC8 LED灯 VCC VCC GND GND P54 IN 三、程序 代码 #define _STC8 #include <STC8HX.h> uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数 #include "lib/twen_board.h" #include "lib/de. 阅读详情

    ----------------- android培训、java培训、期待与您交流! ----------------------


交通路线分析:

总共有12条b路线,为了统一编程模型,可以假设每条路线都有一个红绿灯对其进行控制,右转弯的4条路线的控制灯可以假设称为常绿状态,另外,其他的8条路线是两两成对的,可以归为4组,所以,程序只需考虑途中标注了数字号的4条路线的控制灯的切换顺序,这4条路线相反方向的路线的控制灯跟随的控制灯跟随这4条路线切换,不必额外考虑



面向对象的思想:

例如:两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子,一下是设计的思路:

StoneKnife=KnifeFactory.createKnife(stone)

Store 

mateial=StoneKnife.cut(tree)

tree

Chair=ChairFactory.makeChair(material)

material

chair

每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还要每秒钟减少一辆车。

   1.设计一个Road类来表示路线,每个Road对象代表一条路线,总过有12条 路线,即系统中总共要产生12个Road实例对象。

    2.每条路线上随机增加新的车辆,增加到一个集合中保存。

    3.每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口

 

 每条路线每隔一秒都会检查控制本路线的灯是否为绿,一个灯由绿变红时,应该将下一个方向的灯变绿。

   1.设计一个Lamp类来表示一个交通灯,每个交通灯都维护一个状态:绿或红,每个交通等要有变量和变黑的方法,并且能返回自己的亮黑状态。

   2.总共有12条路线,所以,系统中总共要产生12个交通灯,右拐弯的路线本来不受等的控制,但是为了让程序采用统一的处理方式,故假设出有四个右拐弯的等灯,只是这些灯为常亮状态,即永远不变黑。

    3.出了右拐弯方向的其他8条路线的灯,它们是两两成对的,可以归为4组,所以,在编程处理时,只要从这4组中各取出一个灯,对这4个灯依次轮询变亮,与这4个灯方向对应的灯则随着一同变化,因此Lamp类中要有一个变量记住自己相反方向的灯,在一个Lamp对象的变亮和变黑中,将对应方向的灯也变亮和变黑,每个灯变黑时,都伴随着下个灯的变亮,Lamp类中还有一个变量来记住自己的下一个灯

    4.无论在程序的什么地方去获得某个方向的灯时,每次获得的都是同一个实例对象,所以Lamp类改用枚举来做显然具有很大的方便性,永远都只有代表12个方向的灯的实例对象。

    5.设计一个LampController类,它定时让当前的绿灯变红。

下面是路线代码实现:

public class Road{

  //该路线的车辆数集合

         private     List<String> vechicles=new ArrayList<String>();

 //路线名  ,可以通过该路线名获取相应的灯

          private String name=null;

          public Road(String name){{

                    this.name=name;

//定义一个线程池,里面只有一个线程,每隔一秒以内(随机的)向集合中增加一辆车

                     ExecutorService pool=Executors.newSingleThreadExecutor();

                      pool.execute(new Runnable(){

                         public void run(){

                                 for(int i=1;i<1000;i++){

                                  try{

                                       Thread.sleep((new Random().nexInt(10)+1)*1000);

                                        vechicles.add(Road.this.name+"-"+i);

                                       }

                                   catch(Exception e){

                                         e.printstack();

                                    }

                            }

                   }

         });

  //定时器,当灯为绿色时,每隔一秒钟从车的集合中取走第一辆车

         ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);

         timer.scheduleAtFixedRate(

                new Runnable(){
                         public void run(){
                             if(vechicles.size()>0){

                                boolean lighted=lLamp.valueOf(name);

                                 if(lighted=true){

                                    System.out.println(vechicles.remove(0)+"is traversing!");

                                    }

                      }

          }),1,1,TimeUnit.SECONDS);

              }

      }

}

下面代码是灯的实现:

因为灯都是唯一的,因此这里用枚举来定义

public enum Lamp{

   //定义各个路线的灯,通过构造方法将各个灯所对应的灯和下一个灯关联起来

           S2N("N2S","S2W",false) ,S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N"","S2N",false),

           N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),

           S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);

          private Lamp(Sring opposite,String next,boolean lighted){

            this.next=next;

              this.opposite=opposite;

            this.lighted=lighted;

         }

          private Lamp(){

        }

           private boolean lighted;

           private String opposite;

           private String next;

//判断灯是否为绿

            public boolean isLighted(){

                return lighted;

              }

//让灯变绿,同样也要判断对应的灯是否存在

             public void light(){

                     if(opposite!=null){

                     Lamp.valueOf(opposite).ligth();

                     //opposite.light();

                   }

                      this.lighted=true;

      }

//让灯变红,需要判断对应的灯是否存在,否则会陷入死循环,当前的灯变红时,下一个灯会变绿

           public Lamp  blackOut(){

                   this.lighted=false;

                    if(opposit!=null){

                               Lamp.valueOf(opposite).blackOut();

                     }

                    Lamp nextLamp=Lamp.valueOf(next);

                      if(next!=null){

                         nextLamp.light();

                     }

                       return nextLamp;

            }

  }

注意:以上 是交通的关键代码,然后添加一个控制器,里面定义一个时间线程去控制灯的变换


 ---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.youkuaiyun.com/heima




基于天问block编译环境下ASRPRO语音芯片程序编写教程(三)串口通信,多线程模块,ADC篇 在天问block软件环境下ASRPRO语音芯片的程序编写教程,本教程将介绍如何使用该芯片实现串口通信,多线程模块运用和ADC输入检测功能。 阅读详情

相关推荐

实战:如何通过修改VTS和HTS调整GC4653 sensor帧率(附完整计算步骤)

本文以GC4653图像传感器为例,详细解析了通过修改VTS和HTS寄存器来精确调整输出帧率的完整流程。文章深入剖析了帧率计算公式FPS = PCLK / (VTS × HTS)的核心原理,并提供了从获取寄存器参数、计算目标VTS值到系统验证的实战步骤,帮助工程师掌握独立优化Sensor性能、提升低照度画质的关键技能。

gin88的博客 338

TWEN-ASR ONE 语音识别系列教程(3)--- 软件定时器和串口使用

TWEN-ASR ONE 语音识别系列教程(3)— 软件定时器和串口使用 提示:作者使用 TWEN-ASR ONE V1.0开发板进行开发学习。 文章目录前言一、软件定时器的使用与测试1.1软件定时器使用说明1.2软件定时器代码编写1.3软件定时器代码分析1.4软件定时器运行测试1.5软件定时器小结二、串口的使用与测试2.1串口使用说明2.2串口代码编写2.3串口代码分析2.4串口运行测试2.5串口小结 三、总结 前言     在程序设计里,往往离不开与时间有关的程序编写,如前面文章《TWEN-ASR

初五霸的博客 4732

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程

本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。

k9l0m1的博客 481

基于江科大的桌面宠物项目

基于刚学完江科大stm32练手小项目:语音控制桌面小狗

a1748605495的博客 2285

宽带波束形成

介绍了宽带波束形成器的时域滤波结构,以及波束响应的计算公式,宽带波束形成器的波束响应可表示为权重向量和方向向量的积

... 2490

squidpy 教程 1:在 AnnData 和 Squidpy 中导入空间数据

这些是 10x Genomics Visium 的 Space Ranger 输出提供的 keys,因此是第一个被采用的 keys。在这种情况下,我们假设空间坐标与像素具有相同的比例,因此我们将该值设置为 1。为此,我们将使用模拟数据集,并通过示例展示您应该注意的重要细节,以便利用 AnnData-Scanpy-Squidpy 生态系统的全部功能。并不是绝对必要的,但会节省您大量的输入,因为它是 Squidpy 和 Scanpy 的默认值。正如你所看到的,空间坐标被缩小了,图像被“放大”了。

🧑‍🎓 博士研究生在读 🔬 分享生物信息学、神经生物学方面的知识 💬 合作请在后台留言 2255

【天问Block】STC15F2K60S2串口输出和led闪烁

【天问Block】STC15F2K60S2串口输出和led闪烁

perseverance51博客 3100

时序基础模型Timer-S1:十亿参数如何革新时间序列预测

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势。其原理在于捕捉数据中的趋势、周期性和季节性等时序依赖关系。这项技术的价值在于赋能业务决策,广泛应用于金融风控、能源管理、物联网监控和供应链优化等关键场景。传统方法依赖针对特定任务的专用模型,面临泛化能力弱和开发成本高的挑战。本文聚焦的时序基础模型,通过在海量跨领域数据上进行预训练,学习时序通用模式,并结合十亿级参数带来的强大容量,实现了性能的显著突破。这种范式转变,使得模型能够像“全科医生”一样,通过少量数据微调即可快速适应新任务,

weixin_29164843的博客 269

“黑马程序员”学习笔记二 交通灯管理系统日志

------- http://www.itheima.com" target="blank">android培训、http://www.itheima.com" target="blank">java培训、期待与您交流! ---------- import java.util.concurrent.Executors; import java.util.concurrent.ExecutorS

gbdnf的专栏 796

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

QGIS004:【05矢量属性表】-保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段

摘要:QGIS矢量属性表工具箱包括保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段等选项,本文介绍各选项的基本操作。

qq_31762031的博客 2311

黑马程序员:交通灯管理系统

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。 本项目中用到的新知识: 1,JDK1.5使用线程的新方法——线程池 线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来

伊斯之深の生死簿 1067

小红书urlscheme和Activity

本文档详细介绍了小红书App的Deeplink跳转规范,涵盖了多个功能模块的跳转协议。主要内容包括:主页各Tab(关注、发现、购买)的跳转方式;不同类型笔记(图文/视频/长笔记)的详情页跳转参数;用户相关页面(主页/绑定/资料/消息等)的跳转协议;搜索功能(输入页/结果页)的跳转方式;以及话题、标签、专辑、H5页面等特殊场景的跳转实现。文档还提供了各跳转协议所需的参数说明,包括参数类型、默认值、是否必填等详细信息,并标注了不同版本和平台的兼容性要求。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 786

黑马程序员-----交通灯管理系统学习日志

--------------------- android培训、java培训、期待与您交流! ----------------------      关于交通灯管理系统设计的思考:   一、需求: 1、异步随机生成按照各个路线行驶的车辆。 2、信号灯忽略黄灯,只考虑红灯和绿灯。 3、应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。 4、具体信号灯控制逻辑与现实生活中普通交通灯控

imabra的专栏 385

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

黑马程序员_交通灯管理系统

交通灯管理系统 业务需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: Ø 异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆        由东向而来去往南向的车辆 ---- 左转车辆        。。。 Ø 信号灯忽略黄灯,只考虑红灯和绿灯

QingLiZhan的专栏 758

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

黑马程序员---交通灯管理系统

交通灯管理系统 ------- android培训    java培训期待与您交流! ---------- 一、交通灯管理项目需求 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转

ztx123456ztx的专栏 645

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

黑马程序员————交通灯管理系统

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Justdoit_IT的专栏 508

黑马程序员——交通灯管理系统

------- android培训、java培训、期待与您交流! ---------- 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下 交通灯管理系统的项目需求 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的

回头浪子心的专栏 485

黑马程序员_java交通灯系统

------- android培训、java培训、期待与您交流! ----------       在交通灯管理系统中,要模拟实现十字路口的交通管理系统逻辑,具体去求如下: 一 异步随机生成按照各个路线行驶的车辆。      例如:              由南而来往北去的车辆……直行车辆              由南而来往西去的车辆……左转车辆              由南而来

jason123_45的专栏 369

黑马程序员_源自梦想 交通灯管理系统

------- android培训、java培训、期待与您交流! ---------- 一、项目需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1、异步随机生成按照各个路线行驶的车辆。 例如:       由南向而来去往北向的车辆 ----直行车辆       由西向而来去往南向的车辆---- 右转车辆       由东向而来去往南向的车辆---- 左转车辆

kangwen23的专栏 1016

黑马程序员——黑马学习日志之二十五 交通灯管理系统

------- android培训、java培训、期待与您交流! ---------- 黑马学习日志之二十五 交通灯管理系统 交通灯管理系统 项目需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: (1)异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆

s7643的专栏 475

黑马程序员总结文档汇总

这篇日志,是这些日子以来观看传智播客视频写的一篇汇总文档,蓝色标识的超链接是doc类型的文档,绿色标识的超链接是思维导图类型的文档,同时两种类型的文档中每篇都提供了文档下载链接,详细内容如下:   黑马程序员 01 Java基础教学 - 01 - 认识Java                                黑马程序员 02 Java基础教学 - 02 - 走进Java

kongbeily的专栏 2143

黑马程序员_交通灯系统的设计、分析与实现

一、需求分析         模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:          异步随机生成按照各个路线行驶的车辆。          例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆        由东向而来去往南向的车辆 ---- 左转车辆  信号灯忽略黄灯,只考虑

besidescrazy的专栏 1051

黑马程序员java笔记之九-----交通灯信号管理系统

----------------------android培训、java培训、期待与您交流! --------------------- 一、交通灯管理系统的业务和需求分析      模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:     1.异步随机生成按照各个路线行驶的车辆。 例如:      由南而来去北向的车辆……直行车辆      由西而来去南向的车辆…

小虫 836
上一篇: "黑马程序员"IO流学习笔记02
下一篇: "黑马程序员”银行业务调度系统学习日志
tangjinjava
博客等级 码龄16年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值