User:E.zn/special issue X: Difference between revisions

From XPUB & Lens-Based wiki
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__
<div style="background-color:black;padding: 10px; padding-bottom:50px; color:white; font-family:ocr">
<div style="background-color:black; padding:10px; padding-bottom:50px; color:white; font-family:ocr">
==<span style="color:white">Txx.uo</span>==
=<span style="color:white">Txx.uo</span>=
[[File:Txx.uo_Final.jpeg|500px|right]]
[[File:Txx.uo_Final.jpeg|500px|right]]
''Txx.uo'' consolidates two contrasting radio frequency implementation modes: RFID reader scans the cards/objects containing RFID tags using radio waves and LCD screen displays a Q-code* [internationally established three-letter abbreviation used in radio communication].<br>  
[[File:Txx.uo_.gif|500px|right]]
''Txx.uo'' consolidates two contrasting radio frequency implementation modes: RFID reader scans the cards/objects containing RFID tags using radio waves and LCD screen displays a [https://www.giangrandi.org/electronics/radio/qcode.shtml#qcodefull Q-code]* [internationally established three-letter abbreviation used in radio communication].<br>  


<span>*</span>''A particular Q-code denotes a question when it is followed by a question mark and references an answer [statement] when it's not:''<br>
<span>*</span>''A particular Q-code denotes a question when it is followed by a question mark and references an answer [statement] when it's not:''<br>
Line 18: Line 19:
••• D5 o1 out<br>
••• D5 o1 out<br>
•••• D8 o5 in<br>
•••• D8 o5 in<br>
••••• Tx o3 out<br><br>
••••• Tx o3 out<br><br><br><br><br><br><br><br><br><br><br><br>
----
 
[[File:Txx_sc.png|500px|right]]
[[File:Txx_sc.png|500px|right]]
===<span style="color:white">Components and configuration</span>===
==<span style="color:white">Components and configuration</span>==
<br>
<br>
+ : Solder<br>
+ : Solder<br>
> : Plug into<br><br>
> : Plug into<br><br>


+ 15x1 female header [x2] 🢒🢒 PCB [Nano]<br>
+ 15x1 female header [x2] -- PCB [Nano]<br>
+ 15x1 male header [x2] 🢒🢒 Nano<br>
+ 15x1 male header [x2] -- Nano<br>
+ 4x1 female header 🢒🢒 PCB [LCD1602-I2C]<br>
+ 4x1 female header -- PCB [LCD1602-I2C]<br>
+ 1602 I2C LCD display 🢒🢒 LCD1602-I2C<br>
+ 1602 I2C LCD display -- LCD1602-I2C<br>
+ 8x1 Female Header 🢒🢒 PCB [RFID]<br>
+ 8x1 Female Header -- PCB [RFID]<br>
+ 8x1 male header 🢒🢒 RFID<br>
+ 8x1 male header -- RFID<br>
+ 10k ohm potentiometer 🢒🢒 A1 P in<br>
+ 10k ohm potentiometer -- A1 P in<br>
+ LED 🢒🢒 LED2 D7<br>
+ LED -- LED2 D7<br>
+ 10k ohm resistor 🢒🢒 R1<br>
+ 10k ohm resistor-- R1<br>
+ 220 ohm resistor 🢒🢒 R3<br>
+ 220 ohm resistor -- R3<br>
+ 220 ohm resistor 🢒🢒 R3<br>
+ 220 ohm resistor -- R3<br>
+ 3.5mm mono jack socket 🢒🢒 D5 o1 out<br>
+ 3.5mm mono jack socket -- D5 o1 out<br>
+ 3.5mm mono jack socket 🢒🢒 D3 o2 out<br>
+ 3.5mm mono jack socket -- D3 o2 out<br>
+ 3.5mm mono jack socket 🢒🢒 T5 o3 out<br>
+ 3.5mm mono jack socket -- T5 o3 out<br>
+ 3.5mm mono jack socket 🢒🢒 A2 o4 out<br>
+ 3.5mm mono jack socket -- A2 o4 out<br>
+ 3.5mm mono jack socket 🢒🢒 D8 o5 in<br>
+ 3.5mm mono jack socket -- D8 o5 in<br>
+ 2 pins of 4-pin tactile push button switch 🢒🢒 Reset<br>
+ 2 pins of 4-pin tactile push button switch -- Reset<br>
+ 5x2 male header 🢒🢒 JP [bridge the second row by soldering them together]<br>
+ 5x2 male header 🢒🢒 JP [bridge the second row by soldering them together]<br>
+ Vactrol : place the heads of LED and LDR in a heat shrink tube. Heat up the tube and then:<br>
+ Vactrol : place the heads of LED and LDR in a heat shrink tube. Heat up the tube and then:<br>
_ + LED 🢒🢒 LED 1 [long leg of LED 🢒🢒 square hole]<br>
_ + LED -- LED 1 [long leg of LED 🢒🢒 square hole]<br>
_ + LDR 🢒🢒 LDR<br><br>
_ + LDR -- LDR<br><br>


> RFID 8x1 male header 🢒🢒 8x1 11mm female header [bend the pins] 🢒🢒 8x1 11mm female header 🢒🢒 8x1 11mm female header [bend the pins] 🢒🢒 8x1 female header.<br>
> RFID 8x1 male header -- 8x1 11mm female header [bend the pins] -- 8x1 11mm female header -- 8x1 11mm female header [bend the pins] -- 8x1 female header.<br>
> LCD 🢒🢒 4x1 female header<br>
> LCD -- 4x1 female header<br>
> NANO 🢒🢒 2 15x1 female headers  
> NANO -- 2 15x1 female headers  
<br><br><br>
<br><br><br>


<!-- &#11216; 🢗 -->
<!-- &#11216; 🢗 -->
----
 
===<span style="color:white">Printed Manual</span>===
 
==<span style="color:white">Printed Manual</span>==
<br>
<br>
[[File:Manual.jpg|770px]]
[[File:Manual.jpg|770px]]
<br><br>
<br><br>
----


===<span style="color:white">Perfboard prototype</span>===
 
==<span style="color:white">Perfboard prototype</span>==
<br>
<br>
[[File:Txx.uo_Prototype_1.jpg|770px]]
[[File:Txx.uo_Prototype_1.jpg|770px]]
Line 68: Line 70:
<br><br>
<br><br>
[[File:Txx.uo.gif|200px|right]]<br><br>-->
[[File:Txx.uo.gif|200px|right]]<br><br>-->
----


==Collaboration, Conflict & Consent==
==.ino==
<source lang="cpp">
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.
 
#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
 
const int RFIDled = 6;
const int RFIDSound = 5;
const int RFIDbin = 3;
const int signalIN = A0;
const int TextKnob = A1;
const int textSound = A2;
long randNumber;
 
 
 
void setup()
{
  Serial.begin(9600); // Initiate a serial communication
  SPI.begin(); // Initiate  SPI bus
  lcd.begin(16, 2); // initialize the lcd
  mfrc522.PCD_Init(); // Initiate MFRC522
 
  Serial.println();
 
  pinMode(RFIDled, OUTPUT);
  pinMode(RFIDSound, OUTPUT);
  pinMode(RFIDbin, OUTPUT);
  pinMode(signalIN, INPUT);
  pinMode(TextKnob, INPUT);
  pinMode(textSound, OUTPUT);
}
 
void readCard() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
 
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content = ""; // for tag + sound
  String binary = ""; // for binary + LED
 
  for (int i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i], DEC);
    content.concat(String(mfrc522.uid.uidByte[i], DEC));
 
    if (content.charAt(i) == '0') {
      tone(RFIDSound, 40, 2250);
      delay(100);
    }
    else if (content.charAt(i) == '1') {
      tone(RFIDSound, 15, 2250);
      delay(100);
    }
    else if (content.charAt(i) == '2') {
      tone(RFIDSound, 25, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '3') {
      tone(RFIDSound, 17, 150);
      delay(100);
    }
    else if (content.charAt(i) == '4') {
      tone(RFIDSound, 30, 1000);
      delay(100);
    }
    else if (content.charAt(i) == '5') {
      tone(RFIDSound, 27, 1590);
      delay(100);
    }
    else if (content.charAt(i) == '6') {
      tone(RFIDSound, 28, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '7') {
      tone(RFIDSound, 10, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '8') {
      tone(RFIDSound, 13, 1050);
      delay(100);
    }
    else if (content.charAt(i) == '9') {
      tone(RFIDSound, 7, 1000);
      delay(100);
    }
  }
 
  for (int b = 0; b < mfrc522.uid.size; b++)
  {
    Serial.println(mfrc522.uid.uidByte[b], BIN);
    char r = mfrc522.uid.uidByte[b];
 
    for (int j = 8; j >= 0; j--) {
      if CHECK_BIT(r, j) {
        digitalWrite(RFIDled, HIGH);
        digitalWrite(RFIDbin, HIGH);
        delay(100);
      } else {
        digitalWrite(RFIDled, LOW);
        digitalWrite(RFIDbin, LOW);
        delay(100);
      }
      delay(100);
    }
  }
  Serial.println();
  delay(100);
}
 
//Q-code questions
const char *Qs[] = {
  "",
  "",
  "QRB?:How far are you from my station?",
  "QRL?:Are you busy?",
  "QRZ?:Who is calling me?",
  "QRH?:Does my frequency vary?",
  "QRI?:How is the tone of my transmission?",
  "QRK?:What is the readability of my signals?",
  "QRM?:Do you have interference?",
  "QRN?:Are you troubled by static noise?",
  "QRQ?:Shall I send faster?",
  "QRT?:Shall I cease or suspend operation?",
  "QRU?:Have you anything for me?",
  "QRV?:Are you ready?",
  "QRX?:Shall I standby?",
  "QSA?:What is the strength of my signals?",
  "QSB?:Are my signals fading?",
  "QSD?:Is my keying defective?",
  "QSL?:Can you acknowledge receipt?"
};
 
//Q-code answers/statements
const char *As[] = {
  "QRH:Your frequency varies.",
  "QRL:I am busy. Please do not interfere.",
  "QRM:I have interference.",
  "QRM:I am troubled by static noise.",
  "QRO:Please increase transmit power.",
  "QRQ:Please send faster.",
  "QRS:Please send more slowly",
  "QRT:I am suspending operation.",
  "QRU:I have nothing for you.",
  "QRV:I am ready.",
  "QRX:Please standby.",
  "QSB:Your signals are fading.",
  "QSD:Your keying is defective.",
  "QSK:I can hear you between my signals (while transmitting); break in on my transmission.",
  "QSL:I am acknowledging receipt.",
  "QSM:Repeat the last telegram which you sent me",
  "QSY:Please change transmission frequency.",
  "QSZ:Send each word or group twice."
};
 
void loop()
{
  readCard();
  int textnumber;
  int text = analogRead(TextKnob);
  textnumber = map(text, 1, 1023, 0, 18);
 
  if (textnumber > 1) { //when the knob is turned from the 'position 0'
    Serial.println(Qs[textnumber]);
    String question = Qs[textnumber];
    lcd.setCursor(0, 0); //Set the lcd cursor to the upper left corner
    lcd.print(Qs[textnumber]); //Display the specific Q-question on the fisrt row of LCD
 
    for (int positionCounter = 0; positionCounter < question.length(); positionCounter++) {
      lcd.scrollDisplayLeft(); //Q-question scrolls to the left
      delay(230);
    }
    char* specQs = Qs[textnumber];
 
    // loop over each character of question
    for (int a = 0; a < strlen(specQs); a++ ) {
      char c = specQs[a];
      //Serial.print(c);
      //Serial.print(" ");
      Serial.print(specQs[a], BIN);
      //Serial.println();
 
      // sonify the bits...
      for (int i = 7; i >= 0; i--) {
        if CHECK_BIT(c, i) {
          tone(textSound, 440, 100);
        } else {
          tone(textSound, 220, 100);
        }
        delay(100);
      }
    }
  }
 
 
  // give an answer
  randNumber = random(0, 17);
  int readSignal = digitalRead(signalIN);
  String randomQ = As[randNumber];
 
  if (readSignal) { //If the module receives a signal via A2 o4 input channel...
    Serial.println(As[randNumber]);
    lcd.setCursor(0, 1); //Set the lcd cursor to the lower left corner
    lcd.print(randomQ); //Displayes a random Q-answer from the answers array
 
    for (int counter = 0; counter < randomQ.length(); counter++) {
      lcd.scrollDisplayLeft(); //Q-answer dissapears in the left side of the LCD
      delay(230);
    }
  }
  delay(500);
}
</source>
 
=Collaboration, Conflict & Consent=
'''A two-day [https://pzwiki.wdka.nl/mediadesign/Xpub1_Collaboration,_Conflict_%26_Consent/ workshop] with [http://eleanorg.org/ Eleanor Greenhalgh]''' [[File:Nor.gif|200px|thumb|right]]
'''A two-day [https://pzwiki.wdka.nl/mediadesign/Xpub1_Collaboration,_Conflict_%26_Consent/ workshop] with [http://eleanorg.org/ Eleanor Greenhalgh]''' [[File:Nor.gif|200px|thumb|right]]


Line 79: Line 311:




==Module==
=Module=
'''Building a module with a guest tutor [http://dennisdebel.nl/ Dennis de Bel]'''
'''Building a module with a guest tutor [http://dennisdebel.nl/ Dennis de Bel]'''


__ [https://learn.sparkfun.com/tutorials/voltage-current-resistance-and-ohms-law/all  Voltage, Current, Resistance, and Ohm's Law ]
__ [https://learn.sparkfun.com/tutorials/voltage-current-resistance-and-ohms-law/all  Voltage, Current, Resistance, and Ohm's Law ]


===Referneces [Dennis]===
==Referneces [Dennis]==
[https://uxdesign.cc/the-worst-volume-control-ui-in-the-world-60713dc86950 The worst volume control UI in the world]<br>
[https://uxdesign.cc/the-worst-volume-control-ui-in-the-world-60713dc86950 The worst volume control UI in the world]<br>
[https://www.youtube.com/watch?v=1KVyFio8gw4&app=desktop Dark Patterns: User Interfaces Designed to Trick People]
[https://www.youtube.com/watch?v=1KVyFio8gw4&app=desktop Dark Patterns: User Interfaces Designed to Trick People]
<br><br>
=Sound=
'''Sound / music / listening / methods with [https://olliaarni.bandcamp.com/ Olli Aarni]'''
[[File:Sound-making.gif|200px|thumb|right]]
==References [Olli]==
[https://monoskop.org/images/6/6b/Cage_John_Silence_Lectures_and_Writings_1973.pdf John Cage - Silence]<br>
[https://1819.mywdka.nl/SPCD23/wp-content/uploads/sites/300/2018/07/pauline-oliveros-deep-listening-a-composers-sound-practice.pdf Pauline Oliveros - Deep Listening - A Composer's Sound Practice]<br>
[https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwi_2NP747LmAhVB-aQKHZBfD2kQFjAAegQIAxAC&url=https%3A%2F%2Fwww.onlineopen.org%2Fdownload.php%3Fid%3D259&usg=AOvVaw0a91DW4tKp0b8KSYeUgUMB Mark Bain - Psychosonics and the Modulationof Public Space, On Subversive Sonic Techniques]<br><br>


<br><br>




[[Category:LFP]]
[[Category:LFP]]
[[Category:LFP_Mika]]
[[Category:LFP_Mika]]

Latest revision as of 13:33, 21 June 2021

Txx.uo

Txx.uo Final.jpeg
Txx.uo .gif

Txx.uo consolidates two contrasting radio frequency implementation modes: RFID reader scans the cards/objects containing RFID tags using radio waves and LCD screen displays a Q-code* [internationally established three-letter abbreviation used in radio communication].

*A particular Q-code denotes a question when it is followed by a question mark and references an answer [statement] when it's not:
QRT? : Shall I cease or suspend operation?
QRT : I am suspending operation.

The RFID technology is used for object identification, authentication and security reasons, whereas Q-code is transmitted on a specific radio frequency by a radio operator and can be intercepted by anyone, who is tuned in to the same frequency.

This module converts the data received from a scanned card into a sound• and binary code••. This Binary signal is then transfigured into LED••• blinking and is also funneled to another module through an output•• channel. Top row of an LCD screen displays a specific question from the list of a Q-code, depending on a knob position and when receiving•••• a signal from another module, a random Q-code answer is shown on the second row of the screen. All other textual output can be sent to another module via Tx•••••.

•D5 o1 out
•• D3 o2 out
•• LED 2 D7
••• D5 o1 out
•••• D8 o5 in
••••• Tx o3 out











Txx sc.png

Components and configuration


+ : Solder
> : Plug into

+ 15x1 female header [x2] -- PCB [Nano]
+ 15x1 male header [x2] -- Nano
+ 4x1 female header -- PCB [LCD1602-I2C]
+ 1602 I2C LCD display -- LCD1602-I2C
+ 8x1 Female Header -- PCB [RFID]
+ 8x1 male header -- RFID
+ 10k ohm potentiometer -- A1 P in
+ LED -- LED2 D7
+ 10k ohm resistor-- R1
+ 220 ohm resistor -- R3
+ 220 ohm resistor -- R3
+ 3.5mm mono jack socket -- D5 o1 out
+ 3.5mm mono jack socket -- D3 o2 out
+ 3.5mm mono jack socket -- T5 o3 out
+ 3.5mm mono jack socket -- A2 o4 out
+ 3.5mm mono jack socket -- D8 o5 in
+ 2 pins of 4-pin tactile push button switch -- Reset
+ 5x2 male header 🢒🢒 JP [bridge the second row by soldering them together]
+ Vactrol : place the heads of LED and LDR in a heat shrink tube. Heat up the tube and then:
_ + LED -- LED 1 [long leg of LED 🢒🢒 square hole]
_ + LDR -- LDR

> RFID 8x1 male header -- 8x1 11mm female header [bend the pins] -- 8x1 11mm female header -- 8x1 11mm female header [bend the pins] -- 8x1 female header.
> LCD -- 4x1 female header
> NANO -- 2 15x1 female headers



Printed Manual


Manual.jpg


Perfboard prototype


Txx.uo Prototype 1.jpg



.ino

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

const int RFIDled = 6;
const int RFIDSound = 5;
const int RFIDbin = 3;
const int signalIN = A0;
const int TextKnob = A1;
const int textSound = A2;
long randNumber;



void setup()
{
  Serial.begin(9600); // Initiate a serial communication
  SPI.begin(); // Initiate  SPI bus
  lcd.begin(16, 2); // initialize the lcd
  mfrc522.PCD_Init(); // Initiate MFRC522

  Serial.println();

  pinMode(RFIDled, OUTPUT);
  pinMode(RFIDSound, OUTPUT);
  pinMode(RFIDbin, OUTPUT);
  pinMode(signalIN, INPUT);
  pinMode(TextKnob, INPUT);
  pinMode(textSound, OUTPUT);
}

void readCard() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }

  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content = ""; // for tag + sound
  String binary = ""; // for binary + LED

  for (int i = 0; i < mfrc522.uid.size; i++)
  {
    Serial.print(mfrc522.uid.uidByte[i], DEC);
    content.concat(String(mfrc522.uid.uidByte[i], DEC));

    if (content.charAt(i) == '0') {
      tone(RFIDSound, 40, 2250);
      delay(100);
    }
    else if (content.charAt(i) == '1') {
      tone(RFIDSound, 15, 2250);
      delay(100);
    }
    else if (content.charAt(i) == '2') {
      tone(RFIDSound, 25, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '3') {
      tone(RFIDSound, 17, 150);
      delay(100);
    }
    else if (content.charAt(i) == '4') {
      tone(RFIDSound, 30, 1000);
      delay(100);
    }
    else if (content.charAt(i) == '5') {
      tone(RFIDSound, 27, 1590);
      delay(100);
    }
    else if (content.charAt(i) == '6') {
      tone(RFIDSound, 28, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '7') {
      tone(RFIDSound, 10, 1500);
      delay(100);
    }
    else if (content.charAt(i) == '8') {
      tone(RFIDSound, 13, 1050);
      delay(100);
    }
    else if (content.charAt(i) == '9') {
      tone(RFIDSound, 7, 1000);
      delay(100);
    }
  }

  for (int b = 0; b < mfrc522.uid.size; b++)
  {
    Serial.println(mfrc522.uid.uidByte[b], BIN);
    char r = mfrc522.uid.uidByte[b];

    for (int j = 8; j >= 0; j--) {
      if CHECK_BIT(r, j) {
        digitalWrite(RFIDled, HIGH);
        digitalWrite(RFIDbin, HIGH);
        delay(100);
      } else {
        digitalWrite(RFIDled, LOW);
        digitalWrite(RFIDbin, LOW);
        delay(100);
      }
      delay(100);
    }
  }
  Serial.println();
  delay(100);
}

//Q-code questions
const char *Qs[] = {
  "",
  "",
  "QRB?:How far are you from my station?",
  "QRL?:Are you busy?",
  "QRZ?:Who is calling me?",
  "QRH?:Does my frequency vary?",
  "QRI?:How is the tone of my transmission?",
  "QRK?:What is the readability of my signals?",
  "QRM?:Do you have interference?",
  "QRN?:Are you troubled by static noise?",
  "QRQ?:Shall I send faster?",
  "QRT?:Shall I cease or suspend operation?",
  "QRU?:Have you anything for me?",
  "QRV?:Are you ready?",
  "QRX?:Shall I standby?",
  "QSA?:What is the strength of my signals?",
  "QSB?:Are my signals fading?",
  "QSD?:Is my keying defective?",
  "QSL?:Can you acknowledge receipt?"
};

//Q-code answers/statements
const char *As[] = {
  "QRH:Your frequency varies.",
  "QRL:I am busy. Please do not interfere.",
  "QRM:I have interference.",
  "QRM:I am troubled by static noise.",
  "QRO:Please increase transmit power.",
  "QRQ:Please send faster.",
  "QRS:Please send more slowly",
  "QRT:I am suspending operation.",
  "QRU:I have nothing for you.",
  "QRV:I am ready.",
  "QRX:Please standby.",
  "QSB:Your signals are fading.",
  "QSD:Your keying is defective.",
  "QSK:I can hear you between my signals (while transmitting); break in on my transmission.",
  "QSL:I am acknowledging receipt.",
  "QSM:Repeat the last telegram which you sent me",
  "QSY:Please change transmission frequency.",
  "QSZ:Send each word or group twice."
};

void loop()
{
  readCard();
  int textnumber;
  int text = analogRead(TextKnob);
  textnumber = map(text, 1, 1023, 0, 18);

  if (textnumber > 1) { //when the knob is turned from the 'position 0'
    Serial.println(Qs[textnumber]);
    String question = Qs[textnumber];
    lcd.setCursor(0, 0); //Set the lcd cursor to the upper left corner
    lcd.print(Qs[textnumber]); //Display the specific Q-question on the fisrt row of LCD

    for (int positionCounter = 0; positionCounter < question.length(); positionCounter++) {
      lcd.scrollDisplayLeft(); //Q-question scrolls to the left
      delay(230);
    }
    char* specQs = Qs[textnumber];

    // loop over each character of question
    for (int a = 0; a < strlen(specQs); a++ ) {
      char c = specQs[a];
      //Serial.print(c);
      //Serial.print(" ");
      Serial.print(specQs[a], BIN);
      //Serial.println();

      // sonify the bits...
      for (int i = 7; i >= 0; i--) {
        if CHECK_BIT(c, i) {
          tone(textSound, 440, 100);
        } else {
          tone(textSound, 220, 100);
        }
        delay(100);
      }
    }
  }


  // give an answer
  randNumber = random(0, 17);
  int readSignal = digitalRead(signalIN);
  String randomQ = As[randNumber];

  if (readSignal) { //If the module receives a signal via A2 o4 input channel...
    Serial.println(As[randNumber]);
    lcd.setCursor(0, 1); //Set the lcd cursor to the lower left corner
    lcd.print(randomQ); //Displayes a random Q-answer from the answers array

    for (int counter = 0; counter < randomQ.length(); counter++) {
      lcd.scrollDisplayLeft(); //Q-answer dissapears in the left side of the LCD
      delay(230);
    }
  }
  delay(500);
}

Collaboration, Conflict & Consent

A two-day workshop with Eleanor Greenhalgh

Nor.gif

_ Applying various methods of decision-making and evaluating the outcomes.
_ Practicing listening in teams of three [each having a specific role].
_ Playing group games, like counting to 20.
_ Creating a consensual artwork.



Module

Building a module with a guest tutor Dennis de Bel

__ Voltage, Current, Resistance, and Ohm's Law

Referneces [Dennis]

The worst volume control UI in the world
Dark Patterns: User Interfaces Designed to Trick People

Sound

Sound / music / listening / methods with Olli Aarni

Sound-making.gif

References [Olli]

John Cage - Silence
Pauline Oliveros - Deep Listening - A Composer's Sound Practice
Mark Bain - Psychosonics and the Modulationof Public Space, On Subversive Sonic Techniques