├── readme.md └── arduino-waving.ino /readme.md: -------------------------------------------------------------------------------- 1 | # Arduino Waving 2 | 3 | ## Post 4 | 5 | - [http://www.jamesbooth.net/blog/2014/10/28/making-things-club-aka-jjlpr](http://www.jamesbooth.net/blog/2014/10/28/making-things-club-aka-jjlpr) 6 | 7 | -------------------------------------------------------------------------------- /arduino-waving.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | Servo servo; 4 | 5 | // pins 6 | const int lightSensorPin = 0; 7 | const int servoPin = 9; 8 | 9 | // light value 10 | int lightVal = 0; 11 | int prevLightSensorValue = 0; 12 | 13 | // arbiatary light level to start waving at 14 | int standardLightLevel = 90; 15 | int minLightLevelDiff = 5; 16 | 17 | // waving 18 | boolean waving = false; 19 | int angles[] = {0, 100, 60, 100, 60, 100, 60, 100, 60, 100, 0}; 20 | int anglesLength = 11; 21 | int index = 0; 22 | 23 | // delay 24 | long previousMillis = 0; 25 | long interval = 500; 26 | 27 | 28 | // run once 29 | void setup() { 30 | Serial.begin(9600); 31 | 32 | pinMode(lightSensorPin, INPUT); 33 | 34 | servo.attach(servoPin); 35 | } 36 | 37 | 38 | // run forever 39 | void loop() { 40 | 41 | // LIGHT SENSOR 42 | 43 | if(waving == false) { 44 | int lightSensorValue = analogRead(lightSensorPin); 45 | Serial.println(lightSensorValue); 46 | if(prevLightSensorValue != 0) { 47 | int diff = standardLightLevel - lightSensorValue; 48 | if(diff > minLightLevelDiff) { 49 | waving = true; 50 | } 51 | } 52 | prevLightSensorValue = lightSensorValue; 53 | } 54 | 55 | // WAVING 56 | 57 | if(doInterval() && doWave()) { 58 | wave(); 59 | } 60 | } 61 | 62 | // METHODS 63 | 64 | boolean doWave() { 65 | if(waving) { 66 | if(index < anglesLength) { 67 | Serial.println(index); 68 | return true; 69 | } 70 | else { 71 | endWave(); 72 | } 73 | } 74 | return false; 75 | } 76 | 77 | boolean doInterval() { 78 | unsigned long currentMillis = millis(); 79 | if(currentMillis - previousMillis > interval) { 80 | previousMillis = currentMillis; 81 | return true; 82 | } 83 | return false; 84 | } 85 | 86 | void wave() { 87 | Serial.println("wave"); 88 | int servoAngle = angles[index]; 89 | servo.write(servoAngle); 90 | index++; 91 | } 92 | 93 | void endWave() { 94 | waving = false; 95 | index = 0; 96 | delay(2000); 97 | } 98 | 99 | --------------------------------------------------------------------------------