diff --git a/Accelerometer.cpp b/Accelerometer.cpp index 70d0fd3d7dcb3a1ef075bd2984257efb637221b7..c33aba1bcf907eafaabcc9acd63daa6259d72122 100644 --- a/Accelerometer.cpp +++ b/Accelerometer.cpp @@ -32,12 +32,6 @@ void Accelerometer :: Read_Accelerometer() { acc_val = analogRead(pin); } -void Accelerometer :: Set_Packet() { - pkt.pin = pin; - pkt.val = acc_val; +uint16_t Accelerometer :: Get_Accel() { + return acc_val; } - -int_packet Accelerometer :: Get_Packet() { - return pkt; -} - diff --git a/Accelerometer.h b/Accelerometer.h index 4394d4b931a5a8e1103dccc3d704cff1fed8e1d8..084cd4b923440a6fecd4c127b30b900f4263a52c 100644 --- a/Accelerometer.h +++ b/Accelerometer.h @@ -13,12 +13,10 @@ class Accelerometer { void Set_Pin(uint16_t _pin); uint16_t Get_Pin(); void Read_Accelerometer(); - void Set_Packet(); - int_packet Get_Packet(); + uint16_t Get_Accel(); private: uint16_t pin; uint16_t acc_val; - int_packet pkt; }; #endif diff --git a/Configuration.h b/Configuration.h index a5222a168251a46317ef6eaed5b3754a907a91e2..a6e10c8000f212f77e8439a4b3c0d36a0dfaeb8d 100644 --- a/Configuration.h +++ b/Configuration.h @@ -50,10 +50,13 @@ // Packed attribute specifies each member of the structure or union is placed // to minimize the memory required. -// Size: 4 bytes probably padded to 16bytes +// 1 byte is 16 bits +// Size: 8 bytes + header bytes(2) + chksum byte + end bytes(2) typedef struct { - uint16_t pin; // What pin from Arduino - uint16_t val; // What is the value read from this pin + uint16_t dip_val[3]; // dip switch val + uint16_t acc_val[3]; // accelerometer val + uint16_t pot_val; // potentiometer val + uint16_t vm_val; // vibration motor out } __attribute__((__packed__)) int_packet; #endif diff --git a/DIPSwitch.cpp b/DIPSwitch.cpp index 43a36e515318262a81d7eec6fc39064209e7bfd5..eaec6f7df3c7936e33293679cc6a30901d8ca700 100644 --- a/DIPSwitch.cpp +++ b/DIPSwitch.cpp @@ -7,8 +7,6 @@ DIPSwitch::~DIPSwitch() {} DIPSwitch::DIPSwitch(uint16_t _pin) { pin = _pin; pin_val = false; - pkt.pin = pin; - pkt.val = pin_val; } void DIPSwitch::Set_Pin(uint16_t _pin) { @@ -27,15 +25,7 @@ void DIPSwitch::Read_DIPSwitch() { pin_val = !digitalRead(pin); } -bool DIPSwitch::Get_Reading() { +bool DIPSwitch::Get_Val() { return pin_val; } -void DIPSwitch::Set_Packet() { - pkt.pin = pin; - pkt.val = pin_val; -} - -int_packet DIPSwitch::Get_Packet() { - return pkt; -} diff --git a/DIPSwitch.h b/DIPSwitch.h index 9a51c92bc6a3b59c09e965c9ca805ce632a77534..d6ff773590025db2ae7739389212b701a8b76b33 100644 --- a/DIPSwitch.h +++ b/DIPSwitch.h @@ -13,13 +13,10 @@ class DIPSwitch { uint16_t Get_Pin(); void Set_Pin_Mode(); void Read_DIPSwitch(); - bool Get_Reading(); - void Set_Packet(); - int_packet Get_Packet(); + bool Get_Val(); private: uint16_t pin; bool pin_val; - int_packet pkt; }; #endif diff --git a/Potentiometer.cpp b/Potentiometer.cpp index 14e5bd0710c6bbb9f3c1ca21bfccb77d23db3bf7..b8e894f628f3d7a1fb869f3a57615ee43368b2cd 100644 --- a/Potentiometer.cpp +++ b/Potentiometer.cpp @@ -3,15 +3,11 @@ Potentiometer::Potentiometer() { pin = POT0_PIN; pot_val = 0; - pkt.pin = pin; - pkt.val = pot_val; } Potentiometer::Potentiometer(uint16_t _pin) { pin = _pin; pot_val = 0; - pkt.pin = pin; - pkt.val = pot_val; } Potentiometer::~Potentiometer() {} @@ -32,15 +28,7 @@ void Potentiometer::Read_Potentiometer() { pot_val = analogRead(pin); } -int Potentiometer::Get_Reading() { +uint16_t Potentiometer::Get_Val() { return pot_val; } -void Potentiometer::Set_Packet() { - pkt.pin = pin; - pkt.val = pot_val; -} - -int_packet Potentiometer::Get_Packet() { - return pkt; -} diff --git a/Potentiometer.h b/Potentiometer.h index 0375615d06ab5cbd27338c9d07177705b3b4f8e2..76454a6b30f04d35a7abdcbc07a46709c958e92d 100644 --- a/Potentiometer.h +++ b/Potentiometer.h @@ -13,13 +13,10 @@ class Potentiometer { void Set_Pin_Mode(); uint16_t Get_Pin(); void Read_Potentiometer(); - int Get_Reading(); - void Set_Packet(); - int_packet Get_Packet(); + uint16_t Get_Val(); private: uint16_t pin; - int pot_val; - int_packet pkt; + uint16_t pot_val; }; diff --git a/SerialCommunication.cpp b/SerialCommunication.cpp index 4e45c8b46b474265bead8239ab4f50ee17ff3703..21fca3a4460ddc958e9a883844fd7c77e12b2b81 100644 --- a/SerialCommunication.cpp +++ b/SerialCommunication.cpp @@ -44,8 +44,22 @@ void SerialCommunication::Set_Update_Request(bool _update_request) { } void SerialCommunication::Reset_Buffer() { + /* + Serial.print("prior :: "); + Serial.print("pkt size: "); + Serial.print(packet_size); + Serial.print("\tptr: "); + Serial.print((unsigned int) ptr); + */ ptr -= packet_size; packet_size = 0; + /* + Serial.print("\tpost :: "); + Serial.print("pkt size: "); + Serial.print(packet_size); + Serial.print("\tptr: "); + Serial.println((unsigned int) ptr); + */ } bool SerialCommunication::Get_Update_Request() { @@ -85,17 +99,11 @@ int SerialCommunication::Set_Send_Pkt(int_packet packet_out) { int SerialCommunication::Send_Packet() { int bytesSent = 0; if (Serial.availableForWrite()) { - Serial.print((unsigned int) ptr); - Serial.print("\t"); - for (int i = 0; i < packet_size; i++ ) { - Serial.print(send_pkt[i], HEX); - Serial.print(" "); - } - Serial.println(); + bytesSent = Serial.write(send_pkt, packet_size); Serial.flush(); + Reset_Buffer(); } /* free(send_pkt); */ - Reset_Buffer(); /* Serial.println(); */ return bytesSent; } diff --git a/VibrationMotor.cpp b/VibrationMotor.cpp index c1965fc618fedec51bc1b11f682f8527462cc98a..40568fb2af9d17e6e1ab07e72842839266cfa66d 100644 --- a/VibrationMotor.cpp +++ b/VibrationMotor.cpp @@ -26,22 +26,13 @@ uint16_t VibrationMotor::Get_Pin() { void VibrationMotor::Set_Amplitude(int _adc) { // read in between 0 and 1023, analogWrite values from 0 to 255 - amplitude = _adc / 4; + amplitude = (uint16_t) _adc / 4; } -int VibrationMotor::Get_Amplitude() { +uint16_t VibrationMotor::Get_Amplitude() { return amplitude; } void VibrationMotor::Drive_Motor() { analogWrite(pin, amplitude); } - -void VibrationMotor::Set_Packet() { - pkt.pin = pin; - pkt.val = amplitude; -} - -int_packet VibrationMotor::Get_Packet() { - return pkt; -} diff --git a/VibrationMotor.h b/VibrationMotor.h index 77926668444b2fc0b13b70b48b3fd329c5d20b5a..3089460ba4918b810d9752dbbd0acbf61d9ae48b 100644 --- a/VibrationMotor.h +++ b/VibrationMotor.h @@ -13,14 +13,11 @@ class VibrationMotor { uint16_t Get_Pin(); void Set_Pin_Mode(); void Set_Amplitude(int _amplitude); - int Get_Amplitude(); + uint16_t Get_Amplitude(); void Drive_Motor(); - void Set_Packet(); - int_packet Get_Packet(); private: uint16_t pin; - int amplitude; - int_packet pkt; + uint16_t amplitude; }; diff --git a/multisensoryarduino.ino b/multisensoryarduino.ino index fff60c2377febed2db7a1d0ac49c9c7c1444d66a..1064100176a27015260100c382c1adbab3aa8c4c 100644 --- a/multisensoryarduino.ino +++ b/multisensoryarduino.ino @@ -14,8 +14,8 @@ using namespace std; bool update_request = false; int vibration_output = 0; int pot_val = 0; -int_packet ds_pkt_out; -int_packet acc_pkt_out; +int bytes_sent = 0; +int_packet pkt_out; VibrationMotor VibeMotor(LED_BUILTIN, 0); Potentiometer Pot(POT0_PIN); @@ -44,31 +44,23 @@ void loop() { Accel[i].Read_Accelerometer(); } Pot.Read_Potentiometer(); - pot_val = Pot.Get_Reading(); + pot_val = Pot.Get_Val(); VibeMotor.Set_Amplitude(pot_val); VibeMotor.Drive_Motor(); vibration_output = VibeMotor.Get_Amplitude(); for (int j = 0 ; j < 3; j++) { - DSwitch[j].Set_Packet(); - Accel[j].Set_Packet(); - ds_pkt_out = DSwitch[j].Get_Packet(); - acc_pkt_out = Accel[j].Get_Packet(); - SerCom.Set_Send_Pkt(ds_pkt_out); - SerCom.Set_Send_Pkt(acc_pkt_out); + pkt_out.dip_val[j] = (uint16_t)DSwitch[j].Get_Val(); + pkt_out.acc_val[j] = Accel[j].Get_Accel(); } - Pot.Set_Packet(); - VibeMotor.Set_Packet(); + pkt_out.pot_val = Pot.Get_Val(); + pkt_out.vm_val = VibeMotor.Get_Amplitude(); - int_packet pot_pkt_out = Pot.Get_Packet(); - int_packet vm_pkt_out = VibeMotor.Get_Packet(); - - SerCom.Set_Send_Pkt(pot_pkt_out); - SerCom.Set_Send_Pkt(vm_pkt_out); + SerCom.Set_Send_Pkt(pkt_out); if (update_request) { - SerCom.Send_Packet(); + bytes_sent = SerCom.Send_Packet(); } delay(DELAY);