FourTen > ExempleInterrupteurEtDEL
Contents (hide)
/* Description ============= Exemple de l'utilisation du protocole FourTen, pour recuperer l'etat d'un interrupteur et controler une DEL a partir de l'ordinateur. Circuit ============= * une DEL a la broche numerique 3; * un interrupteur a la broche numerique 7. FourTen ============= Vers carte: Canal Fonction 1 Allume ou eteint la DEL Vers ordinateur: Canal Fonction 1 Indique l'etat de l'interrupteur */ int previousButtonState; void setup() { Serial.begin(57600); // Initialiser la communication serie. pinMode(7,INPUT); // Configurer interrupteur. pinMode(3,OUTPUT); // Configurer DEL. } void loop() { // Est-ce qu'il y a un message FourTen de disponible? if ( fourTenAvailable() ) { int channel = fourTenReadChannel(); // Lire le canal. int data = fourTenReadData(); // Lire la donnee. // Si le canal == 1, appliquer la donnee a l'etat de la DEL. if ( channel == 1 ) digitalWrite(3,data); } int currentButtonState = digitalRead(7); // Lire l'etat de l'interrupteur. // Verifier si l'etat de l'interrupteur change if ( previousButtonState != currentButtonState ) { // Envoyer un message FourTen sur le canal 1 avec comme // donnee l'etat de l'interrupteur. fourTenWrite(1,currentButtonState); // Emmagasiner la valeur de l'interrupteur. previousButtonState = currentButtonState; } } //fourTenStart /* ______ _______ | ____| |__ __| | |__ ___ _ _ _ __| | ___ _ __ | __/ _ \| | | | '__| |/ _ \ '_ \ | | | (_) | |_| | | | | __/ | | | |_| \___/ \__,_|_| |_|\___|_| |_| par Thomas Ouellet Fredericks tof@t-o-f.info Creative Commons Attribution-ShareAlike 3.0 Unported Description ============= FourTen est un protocole de communication tres simple et tres rapide. Il permet d'envoyer des données dont la valeur se situe entre 0 et 1023 (10 bits) sur 16 canaux numerotes de 0 a 15 (4 bits). Installation ============= Pour utiliser le protocole dans Arduino ou Wiring, copier tout ce qui se trouve entre //fourTenStart et //fourTenEnd et l'ajouter a la fin de votre sketch. Utilisation ============= # fourTenWrite(int canal, int donnee) Permet d'envoyer un message fourTen. # fourTenAvailable() Retourne 1 si un message FourTen est disponible. Retourne 0 sinon. # int fourTenReadChannel() Retourne le canal d'un message FourTen recu. # int fourTenReadData() Retourne la donnee d'un message FourTen recu. Details du protocol FourTen ============= Chaque message est construit a partir de deux octets: | octet 1 octet 2 | | bit 7 6 5 4 3 2 1 0 - 7 6 5 4 3 2 1 0 | | fonction 1 C C C C D D D 0 D D D D D D D | C: canal D: donnee octet 1: bit 7 = 1 bits 6-3 = canal bits 2-0 = bits 9-7 de la donnee octet 2: bit 7 = 0 bits 6-0 = bits 6-0 de la donnee Le bit 7 de chaque octet sert a identifier si c'est l'octet 1 ou 2. En excluant ces deux bits, il reste donc 14 bits qui se subdivisent ainsi: 4 bits (canal) suivis de 10 bits (donnee) Le canal peut avoir une valeur entre 0-15. La donnee peut avoir une valeur entre 0-1023. */ void fourTenWrite(int channel, int data) { Serial.write( ( channel << 3 | ( ( data >> 7) & 0x07 ) ) | 0x80); Serial.write( data & 0x7F); } int fourTenBuffer; int fourTenAvailable( ) { while ( Serial.available() ) { int data = Serial.read(); if ( data & 0x80 ) { fourTenBuffer = data & 0x7F; } else { fourTenBuffer = ( fourTenBuffer << 7 ) | ( data & 0x7F ); return 1; } } return 0; } int fourTenReadChannel() { return fourTenBuffer>>10; } int fourTenReadData() { return fourTenBuffer & 0x3FF; } //fourTenEnd
import processing.serial.*; /* * * ___ __ __ ___ ___ ___ _____ _ _ _ _____ * |_ _| \/ | _ \/ _ \| _ \_ _/_\ | \| |_ _| * | || |\/| | _/ (_) | / | |/ _ \| .` | | | * |___|_| |_|_| \___/|_|_\ |_/_/ \_\_|\_| |_| * * Lorsque vous demarrez ce code, les noms de tous les ports series * sont affichés dans les messages de debogage de la fenetre Processing. * Vous devez changer la valeur de la variable "portName" * pour qu'elle corresponde au nom du port serie de l'Arduino. */ // Choisir le port serie. String portName = "/dev/tty.usbserial-dfrobot"; // Declarer une instance de la classe Serial: Serial serial; // Declarer une instance de FourTen: FourTen fourTen; // Declarer une variable qui correspondra // a l'etat de l'interrupteur. int interrupteur; void setup() { size(256, 256); smooth(); println(Serial.list()); // Affiche les noms des ports. // Creer une instance de la classe Serial avec // un baud de 57600 et le port choisi. serial = new Serial(this, portName, 57600); // Creer une instance de la classe FourTen // et la lier à l'instance serial. fourTen = new FourTen(serial); } void draw() { while ( fourTen.available() ) { int channel = fourTen.readChannel(); // Lire le canal. int data = fourTen.readData(); // Lire la donnee. // Si le canal == 1, appliquer la donnee a l'etat de la DEL. if ( channel == 1 ) interrupteur = data; } if ( interrupteur == 0 ) { background(0); } else { background(255); } } void mousePressed() { fourTen.write(1, 1); } void mouseReleased() { fourTen.write(1, 0); } //fourTenProcessingStart /* * ______ _______ _____ _ * | ____| |__ __| | __ \ (_) * | |__ ___ _ _ _ __| | ___ _ __ | |__) | __ ___ ___ ___ ___ ___ _ _ __ __ _ * | __/ _ \| | | | '__| |/ _ \ '_ \ | ___/ '__/ _ \ / __/ _ \/ __/ __| | '_ \ / _` | * | | | (_) | |_| | | | | __/ | | | | | | | | (_) | (_| __/\__ \__ \ | | | | (_| | * |_| \___/ \__,_|_| |_|\___|_| |_| |_| |_| \___/ \___\___||___/___/_|_| |_|\__, | * __/ | * par Thomas Ouellet Fredericks tof@t-o-f.info Creative Commons Attribution-ShareAlike 3.0 Unported Description ============= FourTen est un protocole de communication tres simple et tres rapide. Il permet d'envoyer des données dont la valeur se situe entre 0 et 1023 (10 bits) sur 16 canaux numerotes de 0 a 15 (4 bits). Installation ============= Pour utiliser le protocole dans Processing, copier tout ce qui se trouve entre //fourTenProcessingStart et //fourTenProcessingEnd et l'ajouter a la fin de votre sketch. Utilisation ============= # FourTen( Serial serial ) Creer une instance de la classe et la lier au gestionnaire de la communication serie de Processing. # <FourTen>.write(int canal, int donnee) Permet d'envoyer un message fourTen. # boolean <FourTen>.available() Retourne true si un message FourTen est disponible. Retourne false sinon. # int <FourTen>.readChannel() Retourne le canal d'un message FourTen reçu. # int <FourTen>.readData() Retourne la donnee d'un message FourTen reçu. Details du protocol FourTen ============= Chaque message est construit a partir de deux octets: | octet 1 octet 2 | | bit 7 6 5 4 3 2 1 0 - 7 6 5 4 3 2 1 0 | | fonction 1 C C C C D D D 0 D D D D D D D | C: canal D: donnee octet 1: bit 7 = 1 bits 6-3 = canal bits 2-0 = bits 9-7 de la donnee octet 2: bit 7 = 0 bits 6-0 = bits 6-0 de la donnee Le bit 7 de chaque octet sert a identifier si c'est l'octet 1 ou 2. En excluant ces deux bits, il reste donc 14 bits qui se subdivisent ainsi: 4 bits (canal) suivis de 10 bits (donnee) Le canal peut avoir une valeur entre 0-15. La donnee peut avoir une valeur entre 0-1023. */ class FourTen { Serial serial; int fourTenBuffer; FourTen( Serial serial) { this.serial = serial; } void write(int channel, int data) { serial.write( ( channel << 3 | ( ( data >> 7) & 0x07 ) ) | 0x80); serial.write( data & 0x7F); } boolean available() { while ( serial.available () > 0 ) { int data = serial.read(); if ( (data & 0x80) == 0x80 ) { fourTenBuffer = data & 0x7F; } else { fourTenBuffer = ( fourTenBuffer << 7 ) | ( data & 0x7F ); return true; } } return false; } int readChannel() { return fourTenBuffer>>10; } int readData() { return fourTenBuffer & 0x3FF; } } //fourTenProcessingEnd
----------begin_max5_patcher---------- 2914.3oc6cssaiaiF9ZmmBBgtEyflDHRczKBB1Y21KJPawfs6cyTDHKw3nVY IsRzooa29.0tOB8tYdwVRQJYIacf1wVlZPtH1w53O+zO+Oye8qWLSaQxS3bM veE7NvrY+5EylUrI1FlI98LsUdO4G4kWbXZ9IqVgiIZWx2GA+DoX6ecLAmks NkfWmUty6ShI4g+GL6.fnq0EaNd8pv3HLo3BBKO1rkKX+Vu5vR8H9ODFu7tL rOgShVlrcCLrbt15R.zp3WH5mfePbRgAETSxhe7JnUc5H1aUAcn8lrPuHsMj RxZRIsny13ucwErOt7YhGe4W8MmNX.VLvcrXeNDJXNFn.IY4xHb40iewH+RJ lSuZgT.ph3Zcb2xnzjOvrgrm0lEiU1msNHQsOT1b0ynCbJC5c3XuEQXkZX5x 4o2LB6YbBGmwYL9mo2tc3oyn2RL.143W6R5eUzsLr8ngwEHGQb6iI2Ye4wQG .nrBmm6sDuCp.AeVOPxQCN3yFfHA2RwObaGNP68bd3wiIIEbex5r+EN9JRxU dYAqCiSNRvyvBKf17ufy6icY9dCO0uw3LAnHPE5kILB+HNKOLIt1QOSyKMs1 lmU6TXP4OlTbgrurZSTjpXS5UaJC+XX446v2H8AzEk6rbzOWWvOXTLWwfO5M L1L7oOLWFk3+S3f52.sjTbbXbZFNmpCyiHtSU6N.eu25Hxcs+vo49u2yG24I 2JHOSaYVXPRLiHZblrMWd6nZ6XCFq5Ckh8G6k1xolSGEqyW3kwvMgDPT4NII IQM2U0iJJqtWb3JOBlDxIUjd0EMbUZVgr8Z2Ht.1Gx8yRhhZbo364wV1S.8o oO9mCCHOzPGOaOzCOLs7AfVEBEDtDmSZtMh2x7laogUb0YypOGtw16atby4y 3mRy.u5UeVHB7W.Pcj4qA2dKv40fu.7J.cyP1lseM3la.FuF7eo7Gt0uNcOk umo8cJYrqo+PC97d9WHGmsm9uiHRj1VTQ6rncHpbVo3RwLxiOrS.Qfn9AxKO TvD1OX5nuwRDCDy5q9PRnyghjnwAI4LvL92OmhJNud74NsK7VgyaN2dHVSns JvZxurZOKVHpHzhurJ+ryYicOlpi4k9ZwNs2SklCxwL.48ZZGwAdwXbO3QZ. K5x.KVxAJvddP2Anbi+Cdww3naA2D3Q7tsMbYiZznv3tzZTP6r82NfkSsvyu DNJEmBZNRnpzHgwU1T7tpmzacbODFDzTINWuWNSKZPkGLC9zceIYlbK.TFRV wnYYfYlLDUglsmdrFxhxNGIRF7CWT2zdsbuGwA2QuETIG24QHYgKnddmuseG OWyuG1798vpzVIhdt4ccSotorvKR3oU041hwuWrADORdtxLxGbeVxp2zzs0m ouoFbM+huf5F84aJZLBW2ftty.gwy4ciRy1EFw2K.A+jy6cGWdfbKPNf67he 4p+h26u389XXqtw7qQT+SrrkztTq82XcYrK8D34WXulwWOZ8GSu8D3oH90P8 4W6LfKzlJerHV.5GKW3EujEOhCFSkiG0zPxfRXnBwjXXOI2At1GmI4Q71U+j 4M460XlAbRbxtGlsatA3bVl25.KlnZXKxw7fgPzRwm1d6s.iyiDvFF7JARZn 3H4metXIMKD6UBjCJ1S4ip8WbV0HqKKLBUdExgfgMt4DpOtjwTZDUWwSRPQp ANmywEN+ZhFL8.tJNyYpm+OMH+4obdtEuFI1sjQNdotZrDWBfmEdRXY8DH4z anpaJzROBFfF.MO7DpJGeIhyWZYNHeo4DPZo6YkyzRRokNunIWFuHgHIcrFc L4LOIohT5TjYoL4axbry2zymjMjjjMUJJFJKHCUBRFYIapSgpCMuObFJBIKc wKnNhLPxliZC0gj0ksfKTLZVeZUjHHIgYGkhhkR+m5Hyf4EtbLF5SupGRcDy As1GVCEglM2Gs1JDMKk0QtStpzB8RQZMEKRqEkkqi.tezayMZqc0SkIgWsf+ DEt2KnHd16KV8gH95N013Zq1JII6oYcGYqyWmPt7.kVMFaT1Q9IQ7K+6.vBD o5C8Cr9jfuTeRur5hpuLWFNprmrxJwhO81Uxne4p3wkkUnN5m0B0wRr.lMqs LU6sPcbTdHEBVhIoIYD.Rl.0dJQWHr9R92YvBqv3fyKiw3sJ2NeS+MmKJ3XY qpLknrxZtNzahm4XxlUi9Hl40RjjWColFau5z2AIU8BUg2pCXy5OOoLrDP4c 5C6AyyExVwkiddy.KxpXYWZVz2XFNArGdo8MVSz8iRxwms44hu38Yf9lmilB k1740hInsQs9+xvVLgPpNuomOI7Q74TODqFdYSzGj+TMVq0LjawZBg5dV8gW VBIgAXUjD0yznn6VjjEfyntZOnjz13Z4mcRbM+50EdyK9.tEbsXYxi6bFF5H S37Ka8+19BzyyV50dOnj5QRngUwEB2Equ91m.wG166ftww6VMP28+19zO.qP MlKh3jd6CfdhDSe3z1D.GH1dqs0io1eeFpsGp8SwA7vA4dcyExPKsnpsjhHB SQTRRZOJ+dYBnpLAzZyzOnt0Ta9WYw0qFS+LU9YeY36oCvGFokCTThW.2Drg rQ6jXblkUslPms9PFmYpDEBaydRYS77av.gsafO7+JB77G9Sf282GxRQAHBC hSVABv4E99lCx+3umEhAAdw4fHOv833O9GjLL3a8d555WeVd67obcjsYE6S1 y5ETVv7vfcXC46Y6mOc9famllYmONc3gmPuV0Maa2i4gG7xVPejr0lm5fQ2N agaf5lLyr2sYDpjUgautrjR0xG.dEio+LzfnPksxU9R+evvm8IPGhxvz85Mq UiSRKhZpzUnPyKLi3pSWegRajTt7Ov.+j.LHEmQsxfpFAj8we2ecJUIRgxkb l1k7ZpW3GTZR55Ht1G5kdMHMZcNXgWd2ZXLelp5kVigCrRmOa9oaoY.cZ.fo xqwfkIqyQrYDIaUXnMe0Y0aNBrmHZMNGfoXsDAcKz8Z6LHXNEBDaD8O+HrWl TAjk8W4+yOqSgG.hLGHx7p87AS45AG9DyiHPulIGs9spd0SsyNSYUu1pjfcr 3tubbKMZ2WPCDAKniDYSvqD0chVokY.sKYerNeAusTbUv8YIKRHU64e9clnq rcMMt56e6aq15eOZMljjPd3pukNLW07ngFeErii9se4at56+kXesCN5BB9Gj HoSv1cgruPFTm4R+XDcfN6R7iPG4gfyNABKgxIrjadMZ3lC77WxNsLL07xlR hjSqD0Mk7QEghqe3OqYDq+CIg4gE1mVX8DOnHWqsOg433GLixZrRzCFDRVL6 wwg4GSaSOIKdSYWUEFpS+M0U1JmWcHYmIWGYU1dHqg5rZaLsldKcLYW4JJz5 PVZdYS0hlmXhLLldcwYCqo2x5sflQSPZFNsXMLmd5SLjcg0afTKZdpIoCMA4 MfRJ1vVsHYofYK0hlMlfrFRIcdt5Pyx1oHTmEibKnWGrFpicnHo81VcVn5Ho 8DTgZhHRaHpqZQyRI1PcTofLmb9nHcqGxQsHY3mnuChfJTK4PZCjbldsjCqi Ti7opmbb7dI3vyqH3usvac.vxwVWu222yWd7eO3.myW2JvdemGaMFuyi6.i9 2qvjrjddSP2nfbetu5iqdwIUjzIqdQkQ4Me7o30.tXP5Xtobi5ZLZbVeIfyJ HaVtx.vQ6ECEeow4f580B0y4AewErYdr3Hz1B.E3ztB9ZnGWpPPuqDuck1sy SLYoGGIHmlJXNojCbtDziynQNxPMViF0XqTTSCMyxDEoVnlUgAoITofhISlF t7lnDprnw063WFt67CWaQOy1h++aHsi5PdvIKyGsm.lJE+fgDTy3IWCIC3LW sjqgFOxQBpw3.oFtJxs5MYLBYqdR1V8irs6EYzq1ucw+Gq06t3B -----------end_max5_patcher-----------