###### tags: `程式組工筆 ` # 20220410 ~ 20220416 # 20220412 ## Aslan ### Work Progress Today, most of out time were spent on listening to Albert's turorial Below is what I learned today * Knowing what Java works and some common knowledge ( ? 1. How to definition a variable correctly. 2. Create a object 3. Difference between calling object in self subfunction and global * Realized more useful progamming skill and some common misunderstandings about motors <br>➨ Most of the motors have... 1. Shafts 2. Bearings 3. Brush Assemblies ➨ Motors can be brush or brushless * About some controller thory 1. Official function about PID Control ( Using ) ### About Homework From Albert Below is my answer about homework :::spoiler Code ```java= // Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. package frc.robot; import edu.wpi.first.wpilibj.Joystick; import edu.wpi.first.wpilibj.TimedRobot; import edu.wpi.first.wpilibj.motorcontrol.Spark; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.CommandScheduler; /** * The VM is configured to automatically run this class, and to call the functions corresponding to * each mode, as described in the TimedRobot documentation. If you change the name of this class or * the package after creating this project, you must also update the build.gradle file in the * project. */ public class Robot extends TimedRobot { private Command m_autonomousCommand; private RobotContainer m_robotContainer; Joystick joystick; Spark LFront, LRear, RFront, RRear; double xSpeed, ySpeed, zRotation; /** * This function is run when the robot is first started up and should be used for any * initialization code. */ @Override public void robotInit() { // Instantiate our RobotContainer. This will perform all our button bindings, and put our // autonomous chooser on the dashboard. m_robotContainer = new RobotContainer(); joystick = new Joystick(0); LFront = new Spark(1); LRear = new Spark(2); RFront = new Spark(3); RRear = new Spark(4); xSpeed = joystick.getRawAxis(0); ySpeed = joystick.getRawAxis(1); zRotation = joystick.getRawAxis(4); } /** * This function is called every robot packet, no matter the mode. Use this for items like * diagnostics that you want ran during disabled, autonomous, teleoperated and test. * * <p>This runs after the mode specific periodic functions, but before LiveWindow and * SmartDashboard integrated updating. */ @Override public void robotPeriodic() { // Runs the Scheduler. This is responsible for polling buttons, adding newly-scheduled // commands, running already-scheduled commands, removing finished or interrupted commands, // and running subsystem periodic() methods. This must be called from the robot's periodic // block in order for anything in the Command-based framework to work. CommandScheduler.getInstance().run(); } /** This function is called once each time the robot enters Disabled mode. */ @Override public void disabledInit() {} @Override public void disabledPeriodic() {} /** This autonomous runs the autonomous command selected by your {@link RobotContainer} class. */ @Override public void autonomousInit() { m_autonomousCommand = m_robotContainer.getAutonomousCommand(); // schedule the autonomous command (example) if (m_autonomousCommand != null) { m_autonomousCommand.schedule(); } } /** This function is called periodically during autonomous. */ @Override public void autonomousPeriodic() {} @Override public void teleopInit() { // This makes sure that the autonomous stops running when // teleop starts running. If you want the autonomous to // continue until interrupted by another command, remove // this line or comment it out. if (m_autonomousCommand != null) { m_autonomousCommand.cancel(); } } /** This function is called periodically during operator control. */ @Override public void teleopPeriodic() { // MecanumDrive LFront.set(xSpeed + ySpeed + zRotation); RFront.set(ySpeed - xSpeed - zRotation); RFront.set(ySpeed - xSpeed + zRotation); RRear.set(ySpeed + xSpeed - zRotation); } @Override public void testInit() { // Cancels all running commands at the start of test mode. CommandScheduler.getInstance().cancelAll(); } /** This function is called periodically during test mode. */ @Override public void testPeriodic() {} /** This function is called once when the robot is first started up. */ @Override public void simulationInit() {} /** This function is called periodically whilst in simulation. */ @Override public void simulationPeriodic() {} } ``` ::: ## Summarize Today I learned a lot of knowledge about hoe to progamming more smooth and concise. Alought I'm not as smart as other team memeber, but I will try my best to understand and follow what we are going on. ## 吳玠廷 今天聽Albert學長講Java程式語言特別的部分,像是定義、創object、呼叫物件的位置都有所不同、呼叫各種馬達寫進程式的寫法不同以及解釋設定馬達電壓(速度一直增加)與直接設定馬達百分比速度,也講解了PID的函示庫之後聽了基礎的控制器理論,最後講微動開關(碰到為false)。 ## 謝亞諺 ### working process * Writing tutorial * Listen to Albert's tutorial ## 林俊彥 Albert intro us to basic control thoery and programing The most impressive i remember is about the difference between creating an object , defining an object and initializing the whole project quite hard to me # 20220414 # Aslan Due to Albert wasn't comming today and I have a very urgent homework have to hand out tmr, I work on my homework today ♪(´▽`) BUT I still work on our schedule, which is motor control, this week. I read some online course about Object Oriented Programming to understand deeper principle about Java. This is all I do this week. ## 林俊彥 Today Albert took a day off so i decided to complete my homework i didn't hand in on time after i understand how the homework that Albert gave .