Last active
December 6, 2018 16:51
-
-
Save effedebe/e8f5af6186a2caf4a0f4c74a7af6dc6f to your computer and use it in GitHub Desktop.
Serial com arduino to processing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*ARDUINO*/ | |
| int b0, a1,a2,a3,a4,a5,a6; | |
| int smooth_a1,smooth_a2,smooth_a3,smooth_a4,smooth_a5,smooth_a6; | |
| int count[14]; | |
| void setup() | |
| { | |
| Serial.begin(9600); // Calculation of datas sent: 7 inputs x 24 bits (3 packages of 8bits) x 30hz (30 times / sec) = 5040 minimum; At 9600 baud, it is 57Hz | |
| Serial.println("Welcome to Serial Lab"); | |
| pinMode(4, OUTPUT); | |
| pinMode(5, OUTPUT); | |
| pinMode(6, OUTPUT); | |
| pinMode(7, OUTPUT); | |
| pinMode(8, OUTPUT); | |
| pinMode(9, OUTPUT); | |
| pinMode(10, INPUT); | |
| pinMode(13, OUTPUT); | |
| smooth_a1 = analogRead (A1); | |
| smooth_a2 = analogRead (A2); | |
| smooth_a3 = analogRead (A3); | |
| smooth_a4 = analogRead (A4); | |
| smooth_a5 = analogRead (A5); | |
| smooth_a6 = analogRead (A6); | |
| } | |
| void loop() | |
| { | |
| //Serial.flush(); | |
| b0 = digitalRead(10); | |
| a1 = analogRead (A1); | |
| a2 = analogRead (A2); | |
| a3 = analogRead (A3); | |
| a4 = analogRead (A4); | |
| a5 = analogRead (A5); | |
| a6 = analogRead (A6); | |
| smooth_a1 = smooth_data(a1, smooth_a1); | |
| smooth_a2 = smooth_data(a2, smooth_a2); | |
| smooth_a3 = smooth_data(a3, smooth_a3); | |
| smooth_a4 = smooth_data(a4, smooth_a4); | |
| smooth_a5 = smooth_data(a5, smooth_a5); | |
| smooth_a6 = smooth_data(a6, smooth_a6); | |
| Serial_send(0x80,b0); | |
| Serial_send(0x81,smooth_a1); | |
| Serial_send(0x82,smooth_a2); | |
| Serial_send(0x83,smooth_a3); | |
| Serial_send(0x84,smooth_a4); | |
| Serial_send(0x85,smooth_a5); | |
| Serial_send(0x86,smooth_a6); | |
| Serial_receive(); | |
| } | |
| /* | |
| * Send an int (limited to 14 bits) by 3 bytes of 8 bits: | |
| * 14 bits is a choice of precision, if more need, just add more bytes. | |
| * 1st byte: witch button / potentiometer (message from 128 to 255: 0x80 to 0xff). | |
| * 2nd byte: first part of data. It is int, split on 2 bytes. Each ones coded on 7bits. | |
| * 3nd byte: second part of data. | |
| */ | |
| void Serial_send(byte message, int value) | |
| { | |
| Serial.write( message ); // Message. Send init byte. Data send here is inclusive from 128 to 255. | |
| Serial.write((value >> 7) & 0x7f ); // Data1/2. Send first part. (127 on 7 bits). Shift int to store 7 first bits of 14 bits of int. Bitwise "and" (&) 0x7f, to filter 8bits an 7bits (B01111111) | |
| Serial.write( value & 0x7f ); // Data2/2. Send second part.(127 on 7 bits). Just bitwise on 7 bits. | |
| } | |
| void Serial_receive() | |
| { | |
| int value = -1; | |
| while (Serial.available() >= 2) | |
| { | |
| if (Serial.read() == 97) // if it is "a" | |
| { | |
| value = Serial.read(); | |
| } | |
| } | |
| switch (value) | |
| { | |
| case 48: Set_led(13); break; // case "0" | |
| case 49: Set_led(4); break; // case "1" | |
| case 50: Set_led(5); break; // case "2" | |
| case 51: Set_led(6); break; // case "3" | |
| case 52: Set_led(7); break; // case "4" | |
| case 53: Set_led(8); break; // case "5" | |
| case 54: Set_led(9); break; // case "6" | |
| case 55: Anim_led(); break; // case "7" | |
| } | |
| } | |
| int smooth_data(int data, int data_buffer) | |
| { | |
| return int(0.35 * data + 0.65 * data_buffer); | |
| } | |
| /* | |
| * Toggle led, pin numbers are: 13, 4, 5, 6, 7, 8, 9 | |
| */ | |
| void Set_led(byte pin) | |
| { | |
| count[pin] = !count[pin]; | |
| digitalWrite(pin,count[pin]); | |
| } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*PROCESSING (partial code)*/ | |
| // Determines the USB port used by index of list | |
| short portIndex = 1; | |
| import processing.serial.*; | |
| Serial port; // Create object from Serial class | |
| int b0 =-1, a1=-1, a2=-1, a3=-1, a4=-1, a5=-1, a6=-1; | |
| void serial_init() | |
| { | |
| String com[] = Serial.list(); | |
| for (int id=0; id<com.length; id++) | |
| println(com[id]); | |
| // Open the port of board is connected and use speed 9600 bps | |
| port = new Serial(this, com[portIndex], 9600); | |
| } | |
| void serial_read() | |
| { | |
| while (port.available() >= 3) | |
| { | |
| int msg = port.read(); | |
| if (msg >127) | |
| { | |
| int value = (port.read() << 7) | (port.read()); | |
| switch (msg) | |
| { | |
| case 128: b0 = value; break; | |
| case 129: a1 = value; break; | |
| case 130: a2 = value; break; | |
| case 131: a3 = value; break; | |
| case 132: a4 = value; break; | |
| case 133: a5 = value; break; | |
| case 134: a6 = value; break; | |
| } | |
| } | |
| } | |
| } | |
| void serial_write() | |
| { | |
| if (frame%10 == 1) port.write("a0"); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment