Bonjour à tous,
J'ai codé une fonction pour utiliser un buzzer 5v afin de l'utiliser sur mon robot la fonction pourra être utiliser pour generer un beep ou plusieurs avec une intensité régable , une durée On et Off ...
J'ai codé cette fonction pour la durée et l'instensité pour l'instant ...
Alors qd je mets cette fonction Beep() dans la loop elle fonctionne bien, jai le beep On Off avec l'intensité réglable qui fonctionne ...
Je vais l'utiliser pour la marche arrière et pour signaler les obstacles ....
par contre qd je declenche ma fonction à partir du void setup par exemple j'ai un beep en continu et pareil dans le switch case ...
dans la void loop cela fonctionne correctement ! je ne comprends pas trop pourquoi !!
#include <LiquidCrystal.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Ultrasonic.h> LiquidCrystal lcd(52, 50, 48, 46, 44, 42); #define ONE_WIRE_BUS 22 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature ds18b20(&oneWire); #define T1 24 #define E1 26 #define T2 23 #define E2 25 #define T3 27 #define E3 28 Ultrasonic ultrasonic1(T1, E1); Ultrasonic ultrasonic2(T2, E2); Ultrasonic ultrasonic3(T3, E3); // Moteur A int dir1PinA = 13; int dir2PinA = 12; // Moteur B int dir1PinB = 11; int dir2PinB = 8; // Vitesse Moteur int speedPinA = 10; int speedPinB = 9; int buzzerPin = 2; int speed = 0; char incomingByte; long timedatasend = 1000; long previousMillis = 0; long timerefreshLCD = 1000; long previousMillisLCD = 0; long previousMillisBuzzer = 0; int beepdone = 0; const long timerefreshLED = 250; long previousMillisLED = 0; int ledCameraState = LOW; const int ledCameraPin = 28; float U1 = 0; void setup() { ds18b20.begin(); lcd.begin(16, 2); Serial.begin(115200); lcd.print("KBOT"); pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(speedPinA, OUTPUT); pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT); pinMode(speedPinB, OUTPUT); pinMode(ledCameraPin, OUTPUT); speed = 100; } float temperature(){ ds18b20.requestTemperatures(); return ds18b20.getTempCByIndex(0); } float ultrason(){ long microsec = ultrasonic1.timing(); float cmMsec = ultrasonic1.convert(microsec, Ultrasonic::CM); } void beep(int buzzerpwm, int timebuzzerOn, int timebuzzerOff){ long currentMillis = millis(); if (beepdone == 0){ if(currentMillis - previousMillisBuzzer > timebuzzerOn) { previousMillisBuzzer = currentMillis; analogWrite(buzzerPin, buzzerpwm); beepdone = 1; } } if (beepdone == 1){ if(currentMillis - previousMillisBuzzer > timebuzzerOff) { previousMillisBuzzer = currentMillis; analogWrite(buzzerPin, 0); beepdone = 0; } } } void loop() { if (Serial.available() > 0) { lcd.setCursor(0, 0); lcd.print("KBOT CONNECTED"); incomingByte = Serial.read(); //Serial.println(incomingByte, DEC); analogWrite(speedPinA, speed); analogWrite(speedPinB, speed); switch (incomingByte) { case 'A': analogWrite(speedPinA, speed); analogWrite(speedPinB, speed); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); break; case 'B': digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, LOW); break; case 'C': analogWrite(speedPinA, speed); analogWrite(speedPinB, speed); digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); break; case 'D': analogWrite(speedPinA, speed); analogWrite(speedPinB, speed); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); break; case 'G': analogWrite(speedPinA, speed); analogWrite(speedPinB, speed); digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); break; default: Serial.print("commande : "); Serial.print(incomingByte); break; } } unsigned long currentMillis = millis(); if(currentMillis - previousMillis > timedatasend) { previousMillis = currentMillis; //float sondetemperature = temperature(); float sondetemperature = 35; U1 = ultrason(); Serial.println(sondetemperature); Serial.println(U1); } currentMillis = millis(); if(currentMillis - previousMillisLCD > timerefreshLCD) { previousMillisLCD = currentMillis; lcd.clear(); lcd.print("U1 :"); lcd.print(U1); } currentMillis = millis(); if(currentMillis - previousMillisLED > timerefreshLED) { previousMillisLED = currentMillis; if (ledCameraState == LOW) { ledCameraState = HIGH; } else { ledCameraState = LOW; } digitalWrite(ledCameraPin, ledCameraState); } beep(255,50,50); }
Cordialement,
bypbop