###### 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 .