Começar a trabalhar com sensores Mindstorms, mais concretamente Touch Sensores. Tenho duas versões: NXT e EV3.
Adicionei touch sensor (NXT) no porto #2. O sistema operativo detecta o acontecimento:
root@ev3dev:~# dmesg ... msensor sensor0: Mindstorms sensor registered. touch-sensor in2:nxt-analog-sensor: Touch sensor connected to port in2
Alguma informação útil na wiki do projecto ev3dev:
De acordo com a wiki, os sensores Mindstorms são mapeados em “/sys/class/msensor”:
root@ev3dev:~# ls /sys/class/msensor sensor0
Confirma-se a presença de um sensor “sensor0”. Que podemos saber acerca dele?
root@ev3dev:~# ls /sys/class/msensor/sensor0 bin_data dp num_values subsystem units value2 value5 bin_data_format mode port_name type_id value0 value3 value6 device modes power uevent value1 value4 value7
Muita informação, alguma apenas genérica. Fiquemos por “mode” e “value0”:
root@ev3dev:~# cat /sys/class/msensor/sensor0/mode TOUCH
Sim, é um Touch Sensor. E como saber o estado?
root@ev3dev:~# cat /sys/class/msensor/sensor0/value0 0
O sensor estava em repouso. Vamos repetir enquanto premimos o sensor:
root@ev3dev:~# cat /sys/class/msensor/sensor0/value0 1
Então e se trocarmos por um sensor EV3?
root@ev3dev:~# dmesg ... msensor sensor0: Mindstorms sensor unregistered. msensor sensor1: Mindstorms sensor registered. touch-sensor in2:ev3-analog-sensor: Touch sensor connected to port in2
E qual é o device?
root@ev3dev:~# ls /sys/class/msensor/ sensor1
Agora é ‘sensor1’ em vez de ‘sensor0’. Talvez a troca tenha sido demasiado rápida ou talvez o sistema operativo nunca liberte os mapeamentos efectuados [até ao próximo boot].
A informação disponível é semelhante:
root@ev3dev:~# ls /sys/class/msensor/sensor1 bin_data dp num_values subsystem units value2 value5 bin_data_format mode port_name type_id value0 value3 value6 device modes power uevent value1 value4 value7
root@ev3dev:~# cat /sys/class/msensor/sensor1/mode TOUCH
E a leitura do estado do sensor funciona da mesma maneira através de ‘value0’.
Este forma do sistema operativo mapear todos os dispositivos no file system dá-nos uma enorme flexibilidade – todas as linguagens de programação permitem aceder a ficheiros… até a própria shell! Eis shell script que se limita a esperar que o sensor seja premido:
#!/bin/bash BOTAO=0 while [ $BOTAO -ne "1" ]; do BOTAO=$(cat /sys/class/msensor/sensor0/value0) done echo "Ouch!" > /dev/tty0
se o ficheiro contendo este script se chamar ’touch.sh’ e tiver permissões de execução podemos invocá-lo directamente da linha de comando:
root@ev3dev:~# chmod +x touch.sh root@ev3dev:~# ./touch.sh
ou de dentro de outros scripts.
Nota: usei aqui ‘sensor0’, assumo que há apenas um sensor e excepto na situação acima em que retirei um sensor e adicionei outro que por isso ficou ‘sensor1’, será sempre ‘sensor0’.