# Comms
Code for **wired** communication from Slave Arduinos to Master Arduino, and then Master Arduino to Raspberry Pi.
### Code Description
- `RPi/` is working code for the Raspberry Pi
- `RPICOM.py` is the main python file that should be run on the Raspberry Pi.
- `offsets.txt` is the text file for the IMU offsets. This is not present in this repo but will be auto-generated by the `RPICOM.py` file. If the robot is interrupted and needs to be resumed, the IMUs will start at their default position; however, the offsets file allows the IMUs to use the position they last stopped at. Each line starts at 1.00 0.00 0.00 0.00 as these are the base quaternion values.
- `log.txt` is the log file of what the RPi recieved. This is not present in this repo but will be auto-generated by the `RPICOM.py` file.
- `Arduino/` is working code for the master and slave Arduinos.
- `MasterCode/MasterCode.ino` is the code for the Master Arduino
- `SlaveCode/SlaveCode.ino` is the code for the Slave Arduinos, which reads actual IMU data.
- `SlaveFakeCode/SlaveFakeCode.ino` is Slave Arduino code which generates fake IMU data, but in the real format to be sent to the Master Arduino.
- `blank/blank.ino` is blank code for the Arduinos needed to reset during setup.
- `Prev/` is previous code used for testing systems and debugging errors (not final code, and may be unstable)
### Setup and Run
**Make sure you install python beforehand**
1. Open terminal and clone the `engine-software` if not cloned already
```
git clone https://github.com/PotentiaRobotics/engine-software.git
```
2. `Cd` into this directory
```
cd engine-software/comms/
```
3. Plug in Master and Slave Arduinos and identify which one is master, and which one(s) are slaves.
4. Allow permission to flash code
```
chmod 777 /dev/ttyACM*
```
5. Open Arduino IDE and upload `blank/blank.ino` to all Arduinos.
**Do not open serial monitor until steps 6-8 are done**
6. Upload `SlaveCode/SlaveCode.ino` or `SlaveFakeCode/SlaveFakeCode.ino` to the Slave Arduinos in Arduino IDE
7. `Cd` into `RPi/`
```
cd RPi/
```
8. Install pyserial
```
pip3 install pyserial
```
9. Upload `MasterCode/MasterCode.ino` to the Master Arduino in Arduino IDE
10. Run the python code.
```
python3 RPICOM.py
```