Arduino – Safety Belt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
#define switchBelt 3 #define neoPin 2 #define piezo A3 #define sensorPressure A5 #include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> // Required for 16 MHz Adafruit Trinket #endif Adafruit_NeoPixel strip(8, neoPin, NEO_GRB + NEO_KHZ800); int valuePressure=0; int statesSwitch=0; unsigned long cnt=0; int beltok=1; long firstPixelHue=0; void setup() { pinMode(switchBelt, INPUT_PULLUP); #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif strip.begin(); strip.show(); Serial.begin(9600); } void loop() { statesSwitch=digitalRead(switchBelt); Serial.print("SW : "); Serial.print(statesSwitch); valuePressure=analogRead(sensorPressure); Serial.print(", Sensor : "); Serial.println(valuePressure); // 압력이 가해졌다면 if (valuePressure > 512) { // 벨트가 채워져 있다면 if (statesSwitch) { colorWipe(strip.Color(0, 255, 0), 0); cnt=0; noTone(piezo); delay(100); if (beltok==1) { tone(piezo, 523); delay(200); noTone(piezo); //delay(10); tone(piezo, 659); delay(200); noTone(piezo); //delay(10); tone(piezo, 784); delay(400); noTone(piezo); beltok=0; } } // 벨트가 채워져 있지 않다면 else { if (cnt==0) { tone(piezo, 1047); cnt=millis(); colorWipe(strip.Color(255, 0, 0), 0); } else if (millis() > cnt+1000) { cnt=0; } else if (millis() > cnt+500) { //tone(piezo, 1047); tone(piezo, 880); colorWipe(strip.Color(0, 0, 0), 0); } beltok=1; } } // 압력이 가해져 있지 않다면 else { noTone(piezo); cnt=0; beltok=1; colorWipe(strip.Color(0, 0, 0), 0); } } void colorWipe(uint32_t color, int wait) { for(int i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, color); strip.show(); //delay(wait); } } |