Bonjour à tous
Voila j'essaye d'envoyer une serie de données de ma rasPi vers l'arduino et toutes les 1 secondes envoyer des données de mon arduino vers la rasPi (données des capteurs)
J'ai essayé ceci mais je constate un ralentissement sur les tâches que mon robot a à executer ! il recoit bien l'information ! l'arduino reçoit bien les informations mais elle excute bien aprés ...
Je fais une boucle avec Millis pour ne pas bloquer pourtant !
#include <LiquidCrystal.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Ultrasonic.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #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 speed = 0; char incomingByte; long timedatasend = 1000; long previousMillis = 0; void setup() { ds18b20.begin(); lcd.begin(16, 2); Serial.begin(9600); lcd.print("KBOT"); pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(speedPinA, OUTPUT); pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT); pinMode(speedPinB, OUTPUT); speed = 100; delay(5000); } float temperature(){ ds18b20.requestTemperatures(); return ds18b20.getTempCByIndex(0); } float ultrason(){ long microsec = ultrasonic1.timing(); float cmMsec = ultrasonic1.convert(microsec, Ultrasonic::CM); } 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 U1 = ultrason(); // Serial.println(sondetemperature); // Serial.println(U1); // } }
Le code qui perturbe est commenté ... et la cela marche ! c'est plus rapide !
Pr info pour l'info sur la rasPi je ne gère pas la reception juste l'émission
cdlt,
bypbop