Commit be344bf4 authored by hackEns's avatar hackEns
Browse files

Code pour noel

parent 3d556206
/* Touchless tracking
* ==================
* This code takes as many measurements as it can at approximately
* 10Hz = 60 Hz / (2 full cycles * 3 sensors).
*
* The code takes as many measurements as possible on the period of two
* cycles of the main power frequency, in order to cancel out any potential
* coupling.
*
* Original code was found on instructables :
* http://www.instructables.com/id/DIY-3D-Controller/
*
* Code slightly modified and commented by Phyks for HackENS
*
* As I found the code on Instructables and I don't give a damn to the
* modifications I made, you may reuse it freely by writing where you
* found it.
*/
#define resolution 8
// Frequency of main power to avoid coupling
#define mains 50
// Time between measures
#define refresh 2 * 1000000 / mains
#define MAX_PINS 6
// Pins to use
// Must be between 8 and 13 to use this code without
// modifications (PORTB is for pins 8 to 13)
//
// Note : If you change pin numbers, you *must* change the mask.
// See arduino doc for more info.
int pins[MAX_PINS] = {8, 9, 10, 11, 12}
// Counter for the timer
extern volatile unsigned long timer0_overflow_count;
void startTimer() {
timer0_overflow_count = 0;
TCNT0 = 0; // Initialize counter value to 0
}
unsigned long checkTimer() {
return ((timer0_overflow_count << 8) + TCNT0) << 2;
}
long time(int pin, byte mask) {
unsigned long count = 0, total = 0;
while(checkTimer() < refresh) {
// Note : pinMode is about 6 times slower than assigning
// DDRB directly, but that pause is important
// Set pin as output and LOW, see arduino doc for info on PORTB
pinMode(pin, OUTPUT);
PORTB = 0;
// Set it as INPUT to take measure
pinMode(pin, INPUT);
// While PINB is low, increment counter
while((PINB & mask) == 0)
count++;
total++;
}
// Restart timer for next measurement
startTimer();
// Return the measurement result
return (count << resolution) / total;
}
void setup() {
// Initialize serial communication
Serial.begin(115200);
// INPUT on pins
pinMode(PIN_R, INPUT);
pinMode(PIN_G, INPUT);
pinMode(PIN_B, INPUT);
// Start timer
startTimer();
}
void loop() {
// Print output to serial in decimal
for(int i = 0; i < MAX_PINS; i++) {
Serial.print(time(PINS[i], i));
Serial.print(" ");
}
Serial.println();
}
......@@ -53,8 +53,8 @@ def play_wave(frequency=440, nb_secs=1.):
def read_serial(ser):
line = ser.readline()
line = line.decode().strip("\r\n")
line = ser.readline().decode()
print(line)
line = line.split(" ")
return [int(i or 0) for i in line]
......@@ -66,7 +66,7 @@ thresholds = []
measures = []
serial_port = "/dev/ttyACM0"
serial_speed = 115200
serial_speed = 9600
try:
opts, args = getopt.getopt(sys.argv[1:], "hs:S:", ["help", "serial=",
......@@ -81,7 +81,7 @@ try:
print("\t-h (--help) \t display this help message")
print("\t-s (--serial=) \t change serial port (default is " +
"/dev/tty/ACM0")
print("\t-S (--speed=) \t change serial speed (default is 115200)")
print("\t-S (--speed=) \t change serial speed (default is 9600)")
sys.exit(0)
elif opt in ("-s", "--serial"):
serial_port = arg
......@@ -111,6 +111,7 @@ for i in range(len(notes)):
print("Touch and release the key now... Will get 1k samples.")
for sample in range(1000):
print(sample)
measure = read_serial(ser)
measures[sample] = measure[i]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment