Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 2:373260769485
- Parent:
- 1:12ddbe69b6e6
- Child:
- 3:7530a7aca1ab
--- a/main.cpp Mon Nov 27 12:34:44 2017 +0000
+++ b/main.cpp Wed Dec 06 07:52:44 2017 +0000
@@ -1,7 +1,6 @@
/*** Thread: CAN ***
* Test CAN to controller
- *TODO
- *2 Ints samenvoegen zodat we naar het juiste register kunnen sturen, register is fixed, de waardes voor de controller zijn afhankelijk van een sensor.
+ *
*/
#include "mbed.h"
#include "CAN.h"
@@ -10,8 +9,11 @@
CAN can(PA_11, PA_12);
DigitalOut canEN(PA_10);
-/* Heartbeat */
-DigitalOut led(LED1);
+
+DigitalIn safety(PB_1);
+DigitalOut buzzer(PB_0);
+
+AnalogIn analog_value(PA_0);
/* Structures to help pack and unpack the 8 CAN data bytes */
typedef struct bytes_64 {
@@ -30,42 +32,61 @@
bytes_64 bytes;
} data_packed;
-
-/* main */
+long map(long x, long in_min, long in_max, long out_min, long out_max) //MAP functie voor verschalingen.
+{
+ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
+}
int main() {
printf("\r\n---Start---\r\n");
- data_packed send_data; //struct for send message
- data_packed receive_data; //struct for rcv message
- CANMessage msg; //message object for rcv
- int send_id = 513; //Id motorcontroller 0x201 -> 513
+ data_packed send_data; //struct for send message
+ data_packed receive_data; //struct for rcv message
+ CANMessage msg; //message object for rcv
+ int send_id = 513; //Id motorcontroller 0x201 -> 513
int send_status = 0;
+ /* int ADC_Torque_Filter[8];
+ int ADC_Torque_Value;
+ int i; */ //Voor moving average te berekenen
+ canEN = 0; //Voor de tranceiver
- canEN = 0; //Voor de tranceiver
-
- //send_data.data = 0x0CCD31; //0CCD snelheid motor, 31 register in controller. WERKT
+ //send_data.data = 0x0CCD31; //0CCD snelheid motor, 31 register in controller. WERKT
send_data.data = 0;
- can.frequency(1000000); //1m freq
+ can.frequency(1000000); //1m freq
can.mode(CAN::LocalTest);
- //can.mode(CAN::Normal); //1vd2 comment
- /* Loop */
- int x = 0x0CCD;
- int y = 0x31;
- /*/////////////////////////////////////////////////////////////
- int Result;
- Result = a[5];
- Result = Result << 8;
- Result = Result | b[2];
- *//////////////////////////////////////////////////////////////
-
- unsigned pow = 10;
- while(y >= pow)
- pow *= 10;
- send_data.data = x * pow + y;
-
+ //can.mode(CAN::Normal); //1vd2 comment
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ int speed = 0; //Snelheid naar de motor
+ int reg = 0x31; //register in de controller
+ float meas_r;
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
while (true) {
-
+ meas_r = analog_value.read() * 100;
+ speed = map(meas_r, 0, 100, 0, 0x7FFF); //waarde schommelt niet
+
+ /* for (i = 0; i < 7; i++)
+ {
+ ADC_Torque_Filter[i] = ADC_Torque_Filter[i+1];
+ //wait(0.005); //wacht 5 ms
+ }
+ ADC_Torque_Filter[7] = speed; //gas waarde berekenen via 8point moving average
+ ADC_Torque_Value = (( ADC_Torque_Filter[0]+
+ ADC_Torque_Filter[1]+
+ ADC_Torque_Filter[2]+
+ ADC_Torque_Filter[3]+
+ ADC_Torque_Filter[4]+
+ ADC_Torque_Filter[5]+
+ ADC_Torque_Filter[6]+
+ ADC_Torque_Filter[7]
+ ) / 8);
+ // for (i = 0; i < 7; i++) //data van array leegmaken
+ // {
+ // ADC_Torque_Filter[i] = 0;
+ //wait(0.005);
+ //}*/
+
+
+ send_data.data = (speed << 8) + reg; //shiften en optellen
send_status = can.write(CANMessage(send_id, (char*) &send_data, 3));
if (send_status == true) {
@@ -87,10 +108,6 @@
printf("Message received ID,Msg: %d, %llu\r\n", msg.id, receive_data.data);
}
-
- /* Heartbeat */
- led = !led;
-
wait(0.5);
- } //while
+ }
}
\ No newline at end of file